2017-11-20 9 views
0

それは非常に自明な質問ですが、私はScrapyには新しいです。私は自分の問題の解決策を見つけようとしましたが、このコードで何が間違っているのか分かりません。Scrapyでdivを反復処理する方法は?

私の目標は、指定されたウェブサイトからすべてのオペラショーをスクラップすることです。すべてのショーのデータは、1つのdiv内にあり、クラス「行 - 流体行 - パフォーマンス」を有する。私はそれを取得するためにそれらを反復しようとしていますが、動作しません。それは私に各繰り返しの最初のdivの内容を与えます(私は19x倍の同じ項目を表示するのではなく、同じ番組を取得しています)。

アドバイスありがとうございます!

import scrapy 
from ..items import ShowItem 

class OperaSpider(scrapy.Spider): 
    name = "opera" 
    allowed_domains = ["http://www.opera.krakow.pl"] 
    start_urls = [ 
     "http://www.opera.krakow.pl/pl/repertuar/na-afiszu/listopad" 

    ] 


    def parse(self, response): 
     divs = response.xpath('//div[@class="row-fluid row-performance "]') 
     for div in divs: 
      item= ShowItem() 
      item['title'] = div.xpath('//h2[@class="item-title"]/a/text()').extract() 
      item['time'] = div.xpath('//div[@class="item-time vertical-center"]/div[@class="vcentered"]/text()').extract() 
      item['date'] = div.xpath('//div[@class="item-date vertical-center"]/div[@class="vcentered"]/text()').extract() 
      yield item 

答えて

2

.//を開始するためのforループ内のXPathを変更するようにしてください。つまり、ダブルバックスラッシュの前にドットを置くだけです。 extract()の代わりにextract_first()を試してみて、より良い結果が得られるかどうかを確認することもできます。

+0

".//" worked、thanks :) – Grevioos

+0

お手数ですが、これが正しい答えとして表示されていれば助かります。ありがとう。 –

関連する問題