【问题标题】:Jsoup getting contents of hrefJsoup获取href的内容
【发布时间】:2021-07-18 01:21:27
【问题描述】:

我正在使用 Jsoup 开发网络爬虫,并希望从表格中提取链接。

这是我正在看的:

<ul class="inline-list indent>
    <li>
        ::marker
        <a href="www.linkhere.com" title="Some Text">Some Other Text</a>
        (Date & Time Stamp)
    </li>   

我想要www.linkhere.com 和其他一些文本。我已经想出了如何获取 Some Other Text,但无法获取 www.linkhere.com

这是我尝试过的:

Document results = Jsoup.connect(url).get();
tTable = ("li:nth-of-type(1)");

Element row : results.select("ul.indent.inline-list:nth-of-type(1)")
Element link = results.select("ul.indent.inline-list:nth-of-type(1) > a").first();

tName = row.select(tTable).text();
articleLink = link.attr("href");

System.out.println(tName);
System.out.println(articleLink);

这给了我错误:

NullPointerException:无法调用“org.jsoup.nodes.Element.attr(String)”,因为“llink”为空

【问题讨论】:

  • 如果您在网页浏览器中禁用 JavaScript 浏览此页面,您是否仍会在此页面上看到相同的内容?
  • 页面略有改动,但我追求的内容是一样的
  • 尝试将 userAgent 字符串添加到您的 get 请求中。

标签: java html web-scraping jsoup


【解决方案1】:

你正在使用这样的选择器:

"ul.indent.inline-list:nth-of-type(1) > a"

第一部分ul.indent.inline-list:nth-of-type(1) 选择第一个&lt;ul&gt; 元素。第二部分&gt; a 预计&lt;a&gt; 将是&lt;ul&gt; 的直接子代。这与您想要的不匹配,因为它们之间有 &lt;li&gt; 元素,因此解决方案是使用:

"ul.indent.inline-list:nth-of-type(1) > li > a"

或者如果您的想法是匹配第一个 &lt;li&gt;,您必须使用:

"ul.indent.inline-list > li:nth-of-type(1) > a"

【讨论】:

  • 这很有帮助,但它不仅给了我链接,还给了我从 的全部内容。我也许可以从这里解决一些问题。
  • 变量 link 包含整个元素“从 ”,但之后您已经完成了 articleLink = link.attr("href");,这就是您的页面地址所在的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2017-10-16
  • 1970-01-01
  • 2016-06-18
  • 2011-10-13
  • 1970-01-01
相关资源
最近更新 更多