Hyperlink Jsoup从页面获取所有链接

Hyperlink Jsoup从页面获取所有链接,hyperlink,jsoup,Hyperlink,Jsoup,我正在实现一个网络机器人,它必须从一个页面获取所有链接并选择所需的链接。除了遇到链接位于“表”或“span”标记内的问题外,我的所有功能都正常工作。 以下是我的代码片段: Document doc = Jsoup.connect(url) .timeout(TIMEOUT * 1000) .get(); Elements elts = doc.getElementsByTag("a"); 下面是示例HTML: <table> <tr><td&g

我正在实现一个网络机器人,它必须从一个页面获取所有链接并选择所需的链接。除了遇到链接位于“表”或“span”标记内的问题外,我的所有功能都正常工作。 以下是我的代码片段:

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验证程序抛出了大量错误。这会导致问题吗?

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

提示:使用
select()
代替
getElementsByX()
,它更快更灵活

Elements elts=doc.select(“a”)(编辑)


下面是关于选择器API的概述:

试试这段代码

 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();
        }
stringurl=”http://test.com";
单据单据=空;
试一试{
doc=Jsoup.connect(url.get();
Elements links=doc.select(“a[href]”);
元素链接;

对于(int j=0;jSorry,我不明白这句话:“在JSoup使用HTML时转储它(您可以简单地输出doc.toString())”。您能写得更清楚吗?打印
文档
(其中包含解析的HTML,因为JSoup将使用它来选择元素),例如通过
System.out.println(doc)
或将其写入文件。现在,您可以检查所需的元素。顺便说一句,请参阅我的答案编辑(用选择器替换getElements时遗漏)。