java - 如何获取第一个谷歌搜索结果的 URL?
问题描述
我正在尝试获取第一个搜索结果的 URL。到目前为止,我已经尝试使用InputStream
和将页面转换为 HTML AsyncTask
。然后读取字符串,使用 java 正则表达式去除第一个 URL。
String str = result;
String regex = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group());
Toast.makeText(getBaseContext(), matcher.group(), Toast.LENGTH_LONG).show();
}
我的代码很好地从 HTML 文件中删除了第一个 URL,但是我注意到当我使用 android 设备保存 HTML 文件时,HTML 文件中没有 URL。必须有更好的方法来做到这一点。
解决方案
代替if(matcher.find()){} do while(matcher.find()){}
如果一行中有多个 URL,则您的正则表达式将仅解析该行中的第一个 URL,而忽略任何其他重要的 URL
IE:
while((line = reader.readLine()) != null) {
Matcher matcher = pattern.matcher(line);
while(matcher.find()){
String url = matcher.group();
}
}
您的代码已修改:
Pattern pattern = Pattern.compile("\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]");
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
String url = matcher.group();
}
我猜您正在尝试获得第一个结果,并且您一定会看到很多随机的 google.com 网址,我建议使用Jsoup,因为强烈不建议尝试使用 REGEX 解析 XML/HTML ,它会变得一团糟,这将为您轻松解决所有问题。
IE:
Document connection = Jsoup.connect("https://www.google.com/search?q=query").get();
// all results are grouped into containers using the class "g" (group)
Elements groups = connection.getElementsByClass("g");
// check if any results were found
if(groups.size() <= 0) {
System.out.println("no results found!");
return;
}
// get the first result
Element firstGroup = groups.first();
// get the href from from first result
String href = firstGroup.getElementsByTag("a").first().attr("href");
推荐阅读
- javascript - 未捕获的 TypeError:peerConnection.addstream 不是函数?
- xml - 是否有可能/如何使用 XSLT 2.0 将字符串 XML 转换为 XML?
- c# - 如何创建一个可用的 MSBuild arcive 来编译 C# 项目
- laravel - Laravel 重定向在整个项目中根本不起作用
- android - 通过模型类从 firebasedatabase 获取电话号码时出现空指针异常
- nginx - 将链接 /id 重定向到新域并排除 nginx 中的剩余部分
- c# - 将大型 Zip 文件从一个位置移动到另一个位置 - C#
- java - 如何在没有androidx的情况下制作菜单
- javascript - VisualStudio 2015 中的打字稿设置给出错误:“未定义导出”。如何正确设置?
- php - 错误尝试获取非对象的属性“id_mascota”