我正在尝试获得产品1和产品2,但我无法得到它的帮助
我正在使用jsoup
和排球
<ul id="searched-products">
<li>
<div class="gd-col navUnitContainer1 gu4">
<div class="product_name">
<a>Prodict 1</a>
</div>
</div>
</li>
<li>
<div class="gd-col navUnitContainer1 gu4">
<div class="product_name">
<a>Prodict 2</a>
</div>
</div>
</li>
</ul>
我试过这个
Elements itemElements = doc.select("ul#searched-products li");
但它没有选择“li”。我也试过这个
Elements itemElements = doc.select("ul#searched-products"); //this line works
Element e1 = itemElements.get(i);
e1.select("li"); or item.getElementsByTag("li");
仍然没有好处...... 有数百个李,所以我不能这样做
doc.select("li");
请提出建议
答案 0 :(得分:0)
像这样:
public class JsoupList {
public static void main(String[] brawwwr){
String html = "<ul id=\"searched-products\">" +
"<li>" +
"<div class=\"gd-col navUnitContainer1 gu4\">" +
"<div class=\"product_name\">" +
"<a>Prodict 1</a>" +
"</div>" +
"</div>" +
"</li>" +
"<li>" +
"<div class=\"gd-col navUnitContainer1 gu4\">" +
"<div class=\"product_name\">"+
"<a>Prodict 2</a>" +
"</div>" +
"</div>" +
"</li>" +
"</ul>";
Document doc = Jsoup.parse(html);
Elements itemElements = doc.select("ul#searched-products li");
for(Element elem : itemElements){
System.out.println(elem.select("div div a").text());
}
}
}
将返回
Prodict 1
Prodict 2
您可以将标记内的重复代码想象成一个自己的小页面。 问候
答案 1 :(得分:0)
试试此代码。
Elements itemElements = doc.select("ul#searched-products");
itemElements = itemElements.select("li");
for(Element ele : itemElements){
String text = ele.text();
System.out.println(text); //this will return Prodict 1 and Prodict 2
}
// or u can try by getting all the a
for(Element ele : itemElements){
String text = ele.select("a").first().text();
System.out.println(text); //this will also return Prodict 1 and Prodict 2
}
答案 2 :(得分:0)
要排除列表外的<li>
或<a>
标记,您需要限制选择器仅匹配列表内部。最好的方法是使用ID(#searched-products
)。然后,请勿从<li>
中选择<a>
或doc
个标记,而是从所选的<ul>
元素中选择。{/ p>
您可以使用以下任何选择器(不是完整列表)获取文本:
#searched-products li a
#searched-products a
#searched-products .product_name a
#searched-products .product_name
即使是最后一个也没关系,因为您只需要文字,div.product_name
只包含<a>
标记。
for(Element e: doc.select("#searched-products .product_name")) {
String t = e.text(); // Prodict N
}
顺便说一句,在<li>
内选择ul#searched-products
标签的原始方法应该有用。如果不返回任何内容,则可能是该列表在该页面上动态生成。您可以通过打印出Jsoup所拥有的HTML(doc.html()
或doc.select('#searched-products').html()
)来轻松测试。
如果确实如此,Jsoup对你来说不是合适的工具。我建议您使用Selenium可能使用无头浏览器(HtmlUnit或PhantomJS)。他们可以返回甚至与动态创建的元素进行交互,因此可以简化爬网过程的其他部分。