我使用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会导致不匹配。所以我需要找到一种方法来匹配产品和描述,只有它有一个。
答案 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>