java - 使用 JSoup 抓取 Google 搜索结果

标签 java jsoup

我正在尝试使用 JSoup 从 Google 抓取搜索结果。目前这是我的代码。

public class GoogleOptimization {
public static void main (String args[])
{
    Document doc;
    try{
        doc = Jsoup.connect("https://www.google.com/search?as_q=&as_epq=%22Yorkshire+Capital%22+&as_oq=fraud+OR+allegations+OR+scam&as_eq=&as_nlo=&as_nhi=&lr=lang_en&cr=countryCA&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=").userAgent("Mozilla").ignoreHttpErrors(true).timeout(0).get();
        Elements links = doc.select("what should i put here?");
        for (Element link : links) {
                System.out.println("\n"+link.text());
    }
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}

}

我只是想获取搜索结果的标题和标题下方的摘要。所以是的,我只是不知道为了抓取这些要寻找什么元素。如果有人有更好的方法来使用 java 抓取 Google,我很想知道。

谢谢。

最佳答案

给你。

public class ScanWebSO 
{
public static void main (String args[])
{
    Document doc;
    try{
        doc =        Jsoup.connect("https://www.google.com/search?as_q=&as_epq=%22Yorkshire+Capital%22+&as_oq=fraud+OR+allegations+OR+scam&as_eq=&as_nlo=&as_nhi=&lr=lang_en&cr=countryCA&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=").userAgent("Mozilla").ignoreHttpErrors(true).timeout(0).get();
        Elements links = doc.select("li[class=g]");
        for (Element link : links) {
            Elements titles = link.select("h3[class=r]");
            String title = titles.text();

            Elements bodies = link.select("span[class=st]");
            String body = bodies.text();

            System.out.println("Title: "+title);
            System.out.println("Body: "+body+"\n");
        }
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}
}

此外,如果您要自己完成此操作,我建议您使用 chrome。您只需右键单击要抓取的任何内容并转到检查元素。它会将您带到该元素所在的 html 中的确切位置。在这种情况下,您首先要找出所有结果列表的根所在的位置。当你找到它时,你想要指定元素,最好是一个唯一的属性来搜索它。在这种情况下,根元素是

<ol eid="" id="rso">

在其下方您将看到一堆以

开头的列表
<li class="g"> 

这就是您要放入初始元素数组的内容,然后对于每个元素,您都需要找到标题和正文所在的位置。在这种情况下,我发现标题在

<h3 class="r" style="white-space: normal;">

元素。因此,您将在每个列表中搜索该元素。 body 也是如此。我发现 body 在下面,所以我使用 .text() 方法搜索它,它返回了该元素下的所有文本。关键是始终尝试找到具有原始属性的元素(使用类名是理想的)。如果您不这样做并且只搜索“div”之类的内容,它将在整个页面中搜索包含 div 的任何元素并返回它。所以你会得到比你想要的更多的结果。我希望这能很好地解释它。如果您还有其他问题,请告诉我。

关于java - 使用 JSoup 抓取 Google 搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17708049/

相关文章:

java - 选择一种语言来编写技术工程数学(我可以使用 Java 吗?)

java - JVM 找不到我的类 : java. lang.NoClassDefFoundError

java - 仅显示最后添加的按钮

java - 类型不匹配 : cannot convert from Element to Elements & first cannot be resolved or is not a field

java - 如何从 Coldfusion 2016 中加载 jsoup Java 库?

java - 如何将 Jsoup 文档保存到 HTML 文件?

java - 如何使用 jsoup 返回元素列表中的索引元素?

java - XPath 转换为 JSoup 元素

java - Maven Project(Cucumber+TestNG+Selenium-Java] 测试无法使用 mvn clean install 在命令行上运行测试

java - Hibernate 一对一映射问题 - 级联功能不起作用