0
レビューサイトから情報を収集するために構築した作業用スクレーパーがあります。私が抱えている問題は、複数のレビューを含むビジネスページをクロールしてアイテムを生成しようとすると、最初のアイテムをn回だけ取得することです(nはセレクタが見つけたレビューの数です)。スクリーニングオーバーセレクタでは、ページ上にあるセレクタ数に重複した項目が表示されます
私は発電機で多くを読みましたが、私は正しく物事を考えていないので、それは確信しています。 これは簡単なスニペットです。私はコールバックなどを使用してより複雑なクローラを持っていることを理解していますが、このコードは私が話している振る舞いを生成します。
from scrapy import Spider
from scrapy.selector import Selector
from yelp.items import ReviewItem
class CategorySpider(Spider):
name = "yelp_search_"
allowed_domains = ["yelp.com"]
start_urls = ["http://www.yelp.com/biz/j-crew-arden"]
def parse(self, response):
sel = Selector(response)
# There are 9 particular reviews on this page
reviews_info = sel.xpath('//div[contains(@class, "review review--with-sidebar") and @itemprop="review"]')
for reviewSelector in reviews_info:
#If I print the extracted review selector here, I can confirm that only the first review selector is being used
#In other words, I expect extract first will extract the one and only result within the revewSelector
#Note: if I just do extract(), the item property is populated with a list of all 9 reviewSelectors
#i.e. a list of 9 usernames given to me 9 times
reviewitem = ReviewItem()
reviewitem["username"] = reviewSelector.xpath('//*[@itemprop="author"]/@content').extract_first()
reviewitem["userprofileurl"] = reviewSelector.xpath('//*[@class="user-display-name"]/@href').extract_first()
reviewitem["userlocation"] = reviewSelector.xpath('//*[contains(@class, "user-location responsive-hidden-small")]/text()').extract_first().strip()
reviewitem["reviewtext"] = reviewSelector.xpath('//*[@itemprop="description"]/@content').extract_first()
reviewitem["reviewrating"] = reviewSelector.xpath('//*[@itemprop="ratingValue"]/@content').extract_first()
reviewitem["reviewdate"] = reviewSelector.xpath('//*[@itemprop="datePublished"]/@content').extract_first()
reviewitem["reviewvotesuseful"] = reviewSelector.xpath('//a[@rel="useful"]/span[@class="count"]/text()').extract_first()
yield reviewitem
この特定のコードでは、9個のスクラップ結果が表示されますが、すべてが最初のreviewSelectorです。
私はここで間違っていますか?
!私はそれが簡単だとは信じられません。どうもありがとうございました。 – matisetorm
@matisetormこれはおそらくxpathに関する最も一般的な問題です。 – Granitosaurus