2017-01-17 6 views
1

私はscrapyを使用してウェブサイトから商品データを抽出しています。 1つのWebページには複数の製品が含まれています。Scrapy:1ページから複数の一致するxpathを抽出する方法は?

<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> 

Q:は私の解析方法は、順番に、どのようなものに見えるだろう興味のHTMLは次のようになります製品とその説明を抽出し、配列やファイルに格納しますか?どこ配列は次のようになります。

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

私はただの製品が含まれている配列Aを抽出する方法を知っていると私は説明して、配列Bを抽出する方法を知っています。しかし、説明のない製品があるため、C = A + Bはミスマッチにつながります。ですから、製品に説明がある場合にのみ、商品と説明を対応させる方法を見つける必要があります。製品に比べ

答えて

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記述値に注意してください。

<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> 
+1

うわーエレガントなソリューション:あなたの例に基づいてこのHTMLサンプルを使用した作業

!私は非常にpythonicではない解決策を書いていました。常に笑を学ぶ。ありがとう! – Bobby

関連する問題