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-iconclass来表示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"));
}