【问题标题】:Jsoup get all links from a pageJsoup 获取页面中的所有链接
【发布时间】:2017-11-26 23:18:25
【问题描述】:

我正在实现一个网络机器人,它必须从页面中获取所有链接并选择所需的链接。除了遇到链接位于“表”或“跨度”标签内的问题外,我一切正常。 这是我的代码 sn-p:

Document doc = Jsoup.connect(url)
    .timeout(TIMEOUT * 1000)
    .get();
Elements elts = doc.getElementsByTag("a");

下面是 HTML 示例:

<table>
  <tr><td><a href="www.example.com"></a></td></tr>
</table>

我的代码不会获取此类链接。使用 doc.select 也无济于事。我的问题是,如何从页面中获取所有链接?

编辑:我想我知道问题出在哪里。我遇到问题的页面写得很糟糕,HTML 验证器抛出了大量错误。这会导致问题吗?

【问题讨论】:

    标签: hyperlink jsoup


    【解决方案1】:

    一般来说,Jsoup 可以处理大多数糟糕的 HTML。在 JSoup 使用时转储 HTML(您可以简单地输出 doc.toString())。

    提示:使用select()而不是getElementsByX(),它更快更灵活。

    Elements elts = doc.select("a");(编辑)

    这里是关于 Selector-API 的概述:http://jsoup.org/cookbook/extracting-data/selector-syntax

    【讨论】:

    • 对不起,我没听懂这句话:“Dump the HTML as JSoup ueses it (you can simple output doc.toString())”。能不能写的更清楚一点?
    • 打印Document(其中包含解析的 HTML,因为 Jsoup 将使用它来选择元素)例如。通过System.out.println(doc) 或将其写入文件。现在您可以检查您需要的元素。顺便提一句。查看我的答案的编辑(错过了用选择器替换 getElements)。
    【解决方案2】:

    试试这个代码

     String url =  "http://test.com";
     Document doc = null;
            try {
                doc = Jsoup.connect(url).get();
                Elements links = doc.select(<i>"a[href]"<i>);
                Element link;
    
                    for(int j=0;j<150;j++){
                        link=links.get(j);
                        System.out.println("a= " link.attr("abs:href").toString() ); 
                }
    
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 2020-02-29
      • 2011-01-15
      • 2016-04-19
      • 2020-10-27
      • 1970-01-01
      • 2023-04-02
      • 2014-01-10
      • 2018-02-07
      相关资源
      最近更新 更多