当前位置: 首页 > 面试题库 >

使用JSoup抓取Google结果

施琦
2023-03-14
问题内容

我正在尝试使用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;">

元件。因此,您将在每个清单中搜索该元素。身体也一样。我发现正文位于下面,因此我使用.text()方法进行搜索,然后返回该元素下的所有文本。关键是始终尝试查找具有原始属性的元素(使用类名是理想的)。如果不这样做,仅搜索“
div”之类的内容,它将在整个页面中搜索包含div的ANY元素并返回该元素。因此,您将获得比您想要的更多的结果。我希望这能很好地解释它。如果您还有其他问题,请告诉我。



 类似资料:
  • 我有下面的代码,可以使用JSoup抓取网站,但我想同时抓取多个URL。我将URL存储在一个数组中,但无法使其工作。如果我想使用它,如何在多线程中实现这段代码?多线程对这样的应用程序有好处吗?

  • 问题内容: 最近我一直在学习很多python,以便在工作中的某些项目上工作。 目前,我需要对Google搜索结果进行一些网页抓取。我发现了几个站点,这些站点演示了如何使用ajax google api进行搜索,但是在尝试使用它之后,似乎不再受支持。有什么建议? 我一直在寻找一种方法,但似乎找不到当前有效的解决方案。 问题答案: 您随时可以直接抓取Google搜索结果。为此,您可以使用将返回前10个

  • 我正在使用jsoup库,今天我遇到了一个问题。我必须刮取DuckDuckGo并为每个页面获取查询结果的所有标题,但使用 我只得到关于第一页的结果。我怎样才能继续下一页?

  • 我试图从html文件中获取内容,该文件位于html中。gz文件。当我尝试使用Jsoup点击URL时,我得到: 线程“main”til.readEOFException中的异常:til.java:154InflaterInputSorg.jsoup.helper.(InflaterInputSesponse.execute)onnection.java:560InflaterInputSorg.js

  • 完全新的Java和J汤。我试图创建一个简单的程序,刮网络,给我Java股市的数据。我想从道琼斯股票开始,让它打印出52周的区间数据。它转到http://finance.yahoo.com/quote/AAPL?ltr=1,查看左下表(从上一次收盘价开始),然后下到第5个索引,从那里获取文本值。我得到的错误: 线程“main”组织中出现异常。jsoup。选择选择器$SelectorParseExce

  • 问题内容: 我正在尝试使用Jsoup从站点获取数据。链接到该网站是点击这里! 这是我的代码以获取数据。` 请在这里告诉我我的错误是什么。 问题答案: 您要在此处使用Java 8,因为它默认情况下支持TLSv1.2以及其他必需的密码套件。 为什么不使用Java 7? 我在使用Java 7(1.7.0_45)的盒子上进行了测试,并得到了相同的错误。 我激活了调试消息并强制使用TLSv1.2。 然后我遇