raj*_*dia 4 java youtube webview web-scraping jsoup
如此图所示,我想使用Jsoup检索自动完成的搜索结果。我已经在使用视频ID检索视频URL,视频标题和缩略图,但是我一直坚持从搜索结果中删除它们。
我必须不使用Youtube的Data Api而仅使用Jsoup来完成此操作。
任何可以指出正确方向的建议将不胜感激。
搜索结果是通过JavaScript动态生成的。这意味着Jsoup无法解析它们,因为Jsoup仅“看到”嵌入在页面中的静态代码。但是,我们可以直接从API获取结果。
YouTube的自动完成搜索结果是通过网络服务(由Google提供)获得的。每当我们在搜索栏中在后台添加一个字母时,就会对该服务进行请求,并在页面上呈现响应。我们可以使用浏览器的开发人员工具发现此类API。例如,我通过以下过程找到了该API:
Network标签。在这里,我们可以找到有关浏览器与Web服务器连接的详细信息。https://clients1.google.com/complete/search。Headers标签中,我们看到该URL包含我们的搜索查询;在Response选项卡中,响应正文包含自动完成结果。响应是一个JavaScript代码段,其中将我们的数据包含在一个数组中,并且可以使用正则表达式进行解析。Jsoup可以用于HTTP请求,但是任何HTTP客户端都可以。
public static ArrayList<String> autocompleteResults(String query)
throws IOException, UnsupportedEncodingException, PatternSyntaxException {
String url = "https://clients1.google.com/complete/search?client=youtube&hl=en&gs_rn=64&gs_ri=youtube&ds=yt&cp=10&gs_id=b2&q=";
String re = "\\[\"(.*?)\",";
Response resp = Jsoup.connect(url + URLEncoder.encode(query, "UTF-8")).execute();
Matcher match = Pattern.compile(re, Pattern.DOTALL).matcher(resp.body());
ArrayList<String> data = new ArrayList<String>();
while (match.find()) {
data.add(match.group(1));
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
提供的代码是在VScode,Java8,Windows上创建和测试的,但它也应在Android Studio上运行。
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |