基于自定义属性的 JSoup 抓取
JSoup Scraping based on custom attributes
所以我正在使用 JSoup 抓取一个网站,该网站创建了一堆具有动态 class 名称的 div(它们每次重新加载都会更改),但属性名称相同。例如:
<div class="[random text here that changes] js_resultTile" data-listing-number="[some number]">
<div class="a12_regularTile js_rollover_container " itemscope itemtype="http://schema.org/Product" data-listing-number="[same number here]">
<a href...
我已经尝试了多种方法来 selecting 这些 div 并将它们保存在元素中,但我似乎无法正确处理。我试过属性:
Document doc = Jsoup.connect([theUrl]).get();
Elements myEls = doc.select("div[data-listing-number]");
我试过 class:
Document doc = Jsoup.connect([theUrl]).get();
Elements myEls = doc.getElementsByClass("a12_regularTile")
并且:
Document doc = Jsoup.connect([theUrl]).get();
Elements myEls = doc.select("div[class*=js_resultTile]")
我试过另一种属性方法:
Document doc = Jsoup.connect([theUrl]).get();
Elements myEls = new Elements();
for (Element element : doc.getAllElements() )
{
for ( Attribute attribute : element.attributes() )
{
if ( attribute.getKey().equalsIgnoreCase("data-listing-number"))
{
myEls.add(element);
}
}
}
None 这些作品。我可以 select 获取所有 HTML 的文档,但我的 myEls 对象始终为空。我可以用什么来 select 这些元素?
您确定服务器返回的 HTML 中存在这些元素吗? JavaScript 稍后可能会添加它们。如果 JavaScript 涉及到页面呈现,那么您将无法使用 Jsoup。我在此处对类似问题的回答中有更多详细信息:
还有一个提示。除了使用 for-for-if 结构,您还可以使用这个:
for (Element element : doc.getAllElements()) {
if (element.dataset().containsKey("listing-number")) {
myEls.add(element);
}
}
所以我正在使用 JSoup 抓取一个网站,该网站创建了一堆具有动态 class 名称的 div(它们每次重新加载都会更改),但属性名称相同。例如:
<div class="[random text here that changes] js_resultTile" data-listing-number="[some number]">
<div class="a12_regularTile js_rollover_container " itemscope itemtype="http://schema.org/Product" data-listing-number="[same number here]">
<a href...
我已经尝试了多种方法来 selecting 这些 div 并将它们保存在元素中,但我似乎无法正确处理。我试过属性:
Document doc = Jsoup.connect([theUrl]).get();
Elements myEls = doc.select("div[data-listing-number]");
我试过 class:
Document doc = Jsoup.connect([theUrl]).get();
Elements myEls = doc.getElementsByClass("a12_regularTile")
并且:
Document doc = Jsoup.connect([theUrl]).get();
Elements myEls = doc.select("div[class*=js_resultTile]")
我试过另一种属性方法:
Document doc = Jsoup.connect([theUrl]).get();
Elements myEls = new Elements();
for (Element element : doc.getAllElements() )
{
for ( Attribute attribute : element.attributes() )
{
if ( attribute.getKey().equalsIgnoreCase("data-listing-number"))
{
myEls.add(element);
}
}
}
None 这些作品。我可以 select 获取所有 HTML 的文档,但我的 myEls 对象始终为空。我可以用什么来 select 这些元素?
您确定服务器返回的 HTML 中存在这些元素吗? JavaScript 稍后可能会添加它们。如果 JavaScript 涉及到页面呈现,那么您将无法使用 Jsoup。我在此处对类似问题的回答中有更多详细信息:
还有一个提示。除了使用 for-for-if 结构,您还可以使用这个:
for (Element element : doc.getAllElements()) {
if (element.dataset().containsKey("listing-number")) {
myEls.add(element);
}
}