【问题标题】:Web crawling class hidden fields网页爬虫类隐藏字段
【发布时间】:2014-11-11 19:18:36
【问题描述】:

我是新手。在用我的爬虫测试了几个网站后,我发现了以下内容:

<div class="originalCurrencyInformation">                            
<label class="Hidden original-price">Price: £500</label>

注意 class:Hidden 而不是 type="Hidden"。如何使用任何库检索价格,但我的偏好是 Jsoup。

这里是一个示例 sn-p 代码:

Document doc = Jsoup.connect("http://www.example.org")
                            .timeout(3000).get();
    Elements tags = doc.select("div.originalCurrencyInformation > Label.original-price");
    for(Element tag: tags){
                   System.out.println(tag);
    }

更新

我尝试过 Label.Hidden original-price 和 Label.Hidden.original-price 但值返回 null,这就是我得到的

【问题讨论】:

  • 你似乎已经有了解析 html/xml 的方法。 class="Bla" 只是一个类名,主要用于处理 css 样式表或作为 JavaScript 的标识符,它只是一个名称,不要与 style="visibility:hidden"type="hidden" 混淆。

标签: java jsoup hidden-field


【解决方案1】:

在您的示例中,original-price 不在 div 中,因此不清楚您为什么要查找 div.original-price。您可以使用:

doc.select("div.originalCurrencyInformation &gt; label.Hidden.original-price")

选择同时具有“隐藏”和“原始价格”类的标签。

然后您可以使用:

tag.text()

仅从元素中获取文本。

【讨论】:

  • 我试过 label.Hidden.original-price 但是当我使用 .html() 或 text() 时它返回 null
  • 对不起,我的错。经过仔细检查,该网站会更改其针对不同页面的定价标签。看起来我需要找到属性值并查看它是否包含价格然后打印 html。我确信 Oncaphillis 是对的,如果课程隐藏在其中并不重要
  • 如果标签不同,你可以使用 ".Hidden.original-price" 来匹配任何具有这些类名的元素,或者如果你不在乎,只使用 ".original-price"关于“隐藏”。
  • @Alex 我刚刚尝试使用 JSoup 1.8.1 进行测试,但它没有返回 null.text(),但这可能只是因为您上面提到的标签发生了变化。