Java jsoup select 内容
Java jsoup select contents
我有一个 html 文件,其中包含许多以下代码块:
<div class="f-icon m-item " data-ctrdot="60055294621">
<div class="item-main util-clearfix">
<div class="content">
<div class="cwrap">
<div class="cleft">
<div class="lwrap">
<h2 class="title"><a href="http://www.alibaba.com/product-detail/Sunnytex-Best-Selling-wind-proof-Soft_60055294621.html?s=p" title="Sunnytex Best Selling wind proof Soft Shell Winter Black Wool Coat" data-hislog="60055294621" data-pid="60055294621" data-domdot="id:2678,pid:60055294621,ext:'|n=2|s=p|t={{attr target}}'" target="_blank" data-p4plog="60055294621">Sunnytex Best Selling wind proof Soft Shell Winter Black Wool Coat</a> </h2>
<div class="attr">
US .5-24.8 /
<em>Piece</em>
<em>( FOB Price)</em>
</div>
<div class="attr">
500 Pieces
<em>(Min. Order)</em>
</div>
<div class="kv-prop util-clearfix">
<div class="kv" title="Product Type: Coats">
Product Type:
<b>Coats</b>
</div>
<div class="kv" title="Age Group: Adults">
Age Group:
<b>Adults</b>
</div>
.... (many other stuff not shown here)
</div>
</div>
</div>
</div> (end)
我想提取所有链接,例如 "http://www.alibaba.com/product-detail/Custom-3D-Made-Printed-Blank-Hoodies_60081368914.html?s=p"
。
我写了:
Document doc = Jsoup.connect(catUrl).get();
Elements products = doc.select("div.f-icon m-item").select("h2.title").select("a[href]");
for(Element prodUrl: products){
System.out.println(prodUrl.html());
itemUrls.addItem(prodUrl.html());
}
所以基本上我想将所有产品页面 url 放入一个名为 itemUrls 的哈希集中,但 products
中似乎什么也没有。 Jsoup.connect(catUrl).get()
工作正常,可以 return 网页给我,但 select
方法似乎不起作用。任何输入将不胜感激。谢谢。
空格用来描述ancestor child
关系,所以div.f-icon m-item
会用f-icon
class来表示div
,它会尝试寻找m-item
里面的元素。
换句话说 doc.select("div.f-icon m-item")
与 doc.select("div.f-icon").select("m-item")
相同,后者只能找到类似
的内容
<div class="f-icon">
...
<m-item>...</m-item>
...
</div>
这不是你想要的。
如果您想要 select 元素包含两个 class,请使用 element.class1.class2
语法。
所以不用
doc.select("div.f-icon m-item").select("h2.title").select("a[href]")
你可以写成
doc.select("div.f-icon.m-item h2.title a[href]")
// ^^^^^^^^^^^^^^^^^ div with two classes "f-icon" and "m-item"
接下来是 prodUrl.html()
将 return 你的文本用作 link 的表示,就像 <a href="google.com">
foo 中的 foo
.
您似乎想要的是 href
属性的值。为此,请使用 prodUrl.attr("href")
.
所以你的代码看起来或多或少像
Document doc = Jsoup.connect(catUrl).get();
Elements products = doc.select("div.f-icon.m-item h2.title a[href]");
for(Element prodUrl: products){
System.out.println(prodUrl.attr("href"));
itemUrls.addItem(prodUrl.attr("href"));
}
我有一个 html 文件,其中包含许多以下代码块:
<div class="f-icon m-item " data-ctrdot="60055294621">
<div class="item-main util-clearfix">
<div class="content">
<div class="cwrap">
<div class="cleft">
<div class="lwrap">
<h2 class="title"><a href="http://www.alibaba.com/product-detail/Sunnytex-Best-Selling-wind-proof-Soft_60055294621.html?s=p" title="Sunnytex Best Selling wind proof Soft Shell Winter Black Wool Coat" data-hislog="60055294621" data-pid="60055294621" data-domdot="id:2678,pid:60055294621,ext:'|n=2|s=p|t={{attr target}}'" target="_blank" data-p4plog="60055294621">Sunnytex Best Selling wind proof Soft Shell Winter Black Wool Coat</a> </h2>
<div class="attr">
US .5-24.8 /
<em>Piece</em>
<em>( FOB Price)</em>
</div>
<div class="attr">
500 Pieces
<em>(Min. Order)</em>
</div>
<div class="kv-prop util-clearfix">
<div class="kv" title="Product Type: Coats">
Product Type:
<b>Coats</b>
</div>
<div class="kv" title="Age Group: Adults">
Age Group:
<b>Adults</b>
</div>
.... (many other stuff not shown here)
</div>
</div>
</div>
</div> (end)
我想提取所有链接,例如 "http://www.alibaba.com/product-detail/Custom-3D-Made-Printed-Blank-Hoodies_60081368914.html?s=p"
。
我写了:
Document doc = Jsoup.connect(catUrl).get();
Elements products = doc.select("div.f-icon m-item").select("h2.title").select("a[href]");
for(Element prodUrl: products){
System.out.println(prodUrl.html());
itemUrls.addItem(prodUrl.html());
}
所以基本上我想将所有产品页面 url 放入一个名为 itemUrls 的哈希集中,但 products
中似乎什么也没有。 Jsoup.connect(catUrl).get()
工作正常,可以 return 网页给我,但 select
方法似乎不起作用。任何输入将不胜感激。谢谢。
空格用来描述ancestor child
关系,所以div.f-icon m-item
会用f-icon
class来表示div
,它会尝试寻找m-item
里面的元素。
换句话说 doc.select("div.f-icon m-item")
与 doc.select("div.f-icon").select("m-item")
相同,后者只能找到类似
<div class="f-icon">
...
<m-item>...</m-item>
...
</div>
这不是你想要的。
如果您想要 select 元素包含两个 class,请使用 element.class1.class2
语法。
所以不用
doc.select("div.f-icon m-item").select("h2.title").select("a[href]")
你可以写成
doc.select("div.f-icon.m-item h2.title a[href]")
// ^^^^^^^^^^^^^^^^^ div with two classes "f-icon" and "m-item"
接下来是 prodUrl.html()
将 return 你的文本用作 link 的表示,就像 <a href="google.com">
foo 中的 foo
.
您似乎想要的是 href
属性的值。为此,请使用 prodUrl.attr("href")
.
所以你的代码看起来或多或少像
Document doc = Jsoup.connect(catUrl).get();
Elements products = doc.select("div.f-icon.m-item h2.title a[href]");
for(Element prodUrl: products){
System.out.println(prodUrl.attr("href"));
itemUrls.addItem(prodUrl.attr("href"));
}