Scrapy:如何从一个页面中提取多个匹配的xpath?

时间:2017-01-17 16:24:15

标签: python html xpath scrapy

我使用scrapy从网站中提取产品数据。一个网页包含多个产品。感兴趣的HTML看起来像这样:

<div class="product  grid" 
      <h2 class="productname"> itemprop="name">Hammer </h2>
      <div class="description"> Nice hammer! </div>
</div>

<div class="product  grid" 
      <h2 class="productname"> itemprop="name">Screwdriver </h2>
      <div class="description"> Cool screwdriver!</div>
</div>

有些产品没有描述,看起来像这样:

<div class="product  grid" 
      <h2 class="productname"> itemprop="name">Nails </h2>
</div>

问:为了提取产品及其描述并将其存储到数组或文件中,我的解析方法会是什么样子?数组的位置如下:

array = [["product1","description1"],["product2","description2"], ..., ["productN","descriptionN"]]

我知道如何提取仅包含产品的数组A,并且我知道如何仅使用描述提取数组B.但是,由于存在没有描述的产品,C = A + B会导致不匹配。所以我需要找到一种方法来匹配产品和描述,只有它有一个。

1 个答案:

答案 0 :(得分:2)

迭代产品并找到产品名称和说明:

$ scrapy shell file://$PWD/index.html
In [1]: [
   ...:     (item.css(".productname::text").extract_first(), 
   ...:      item.css(".description::text").extract_first()) 
   ...:     for item in response.css(".product")
   ...: ]
Out[1]: 
[(u'Hammer', u' Nice hammer! '),
 (u'Screwdriver', u'Cool screwdriver!'),
 (u'Nails', None)]

请注意None描述值(如果不存在)。

根据您的示例使用此HTML示例:

<div>
    <div class="product  grid">
      <h2 class="productname" itemprop="name">Hammer</h2>
      <div class="description"> Nice hammer! </div>
    </div>

    <div class="product  grid">
          <h2 class="productname" itemprop="name">Screwdriver</h2>
          <div class="description">Cool screwdriver!</div>
    </div>

    <div class="product  grid">
      <h2 class="productname" itemprop="name">Nails</h2>
    </div>
</div>