2

私のスパイダーは、取得する必要がある情報が div[1] にある場合と div[2] にある場合があるという点で、スクレイピングしているサイトにある程度適応する必要があります。次に例を示します。

item['details'] = site.select('//*[@id="detailFacts"]/div[2]/div[2]//text()').extract()

また

item['details'] = site.select('//*[@id="detailFacts"]/div[1]/div[2]//text()').extract()

これらの両方を 1 つのステートメントに結合して、scrapy がこれらのいずれかからフェッチするようにするにはどうすればよいですか?

4

1 に答える 1

2

これを試してください:

details = site.select('//*[@id="detailFacts"]/div[1]/div[2]//text()|//*[@id="detailFacts"]/div[2]/div[2]//text()').extract()
item['details'] = next(s for s in details if s)  # getting first not-empty item from the list

また

details = site.select('//*[@id="detailFacts"]/div[1]|div[2]/div[2]//text()').extract()
item['details'] = next(s for s in details if s)  # getting first not-empty item from the list

それがうまくいくことを願っています。

于 2013-06-05T17:43:45.727 に答える