【问题标题】:Extracting href from a class within other div/id classes with jsoup使用 jsoup 从其他 div/id 类中的类中提取 href
【发布时间】:2011-09-20 08:03:56
【问题描述】:

您好,我正在尝试从以下来源的“标题”类中提取第一个 href(来源只是整个页面的一部分,但我正在使用整个页面):

div id="atfResults" class="list results ">
<div id="result_0" class="result firstRow product" name="0006754023">
    <div id="srNum_0" class="number">1.</div>
        <div class="image">
        <a href="http://www.amazon.co.uk/Essential-Modern-Classics-J-Tolkien/dp/0006754023/ref=sr_1_1?ie=UTF8&amp;qid=1316504574&amp;sr=8-1">
        <img src="http://ecx.images-amazon.com/images/I/31ZcWU6HN4L._AA115_.jpg" class="productImage" alt="Product Details">
</a>
</div>
<div class="data">
    <div class="title">
<a class="title titleHover" href="http://www.amazon.co.uk/Essential-Modern-Classics-J-Tolkien/dp/0006754023/ref=sr_1_1?ie=UTF8&amp;qid=1316504574&amp;sr=8-1">Essential Modern Classics - The Hobbit</a>
        <span class="ptBrand">by J. R. R. Tolkien</span>
 <span class="bindingAndRelease">(<span class="binding">Paperback</span> -&nbsp;2 Apr 2009)</span>
        </div>

我尝试了 select 函数和 getElementByClass 的几种变体,但都给了我一个“null”值,例如:

Document firstSearchPage = Jsoup.connect(fullST).get();
Element link = firstSearchPage.select("div.title").first();

如果有人可以帮助我解决这个问题并推荐一些阅读领域,以便我将来避免这个问题,我们将不胜感激。

【问题讨论】:

    标签: java html-parsing jsoup


    【解决方案1】:

    CSS 选择器div.title 返回一个&lt;div class="title"&gt;,而不是您想象的链接。如果你想要&lt;a class="title"&gt;,那么你应该使用a.title 选择器。

    Element link = document.select("a.title").first();
    String href = link.absUrl("href");
    // ...
    

    或者,如果 &lt;a class="title"&gt; 可以出现在该点之前的 &lt;div class="title"&gt; 之外的文档中的其他位置,那么您需要以下更具体的选择器:

    Element link = document.select("div.title a.title").first();
    String href = link.absUrl("href");
    // ...
    

    这将返回第一个&lt;a class="title"&gt;,它是&lt;div class="title"&gt; 的子级。

    【讨论】:

    • 感谢您的回答。但是,我仍然遇到以下问题: Elements link = document.select("div.title a.title").first();不会编译,因为它需要“元素”。当我使用您的任何一个示例更改此设置时,我在行上得到 NullPointerException: String href = link.absUrl("href");
    • 第一个只是一个错字(可能是习惯造成的),我在答案中修复了它。第二个表示文档中没有这样的元素。
    • 我不确定为什么在提取的代码中找不到所需的元素。当标题出现在浏览器的检查元素窗口中时,我尝试提取的页面代码中的许多主标题都返回 null。是否有可能我需要在 document.select 中添加更多内容,例如(div.main div.searchtemplate div.etc),直到我到达我需要的部分?
    • 也许它是由 JavaScript 填充的? Jsoup 不执行 JS 代码。在浏览器中右键单击并 View Source 以查看 Jsoup 将检索的内容(不是 Inspect Element!它在当前 HTML DOM 树上拦截而不是在检索到的源上)。执行System.out.println(document.html()) 以查看 Jsoup 检索到的任何内容。
    • 非常感谢您的帮助。我让它提取包含我需要的信息的
      但是我需要的 href 是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多