基本的にレビューが含まれている次のURLをクロールする必要があります。そこにあるすべてのレビューには、レビュー ライターの名前、レビューのタイトル、およびレビュー自体があります。
このタスクを実行するために「python-scrapy」を選択しました。
しかし、言及されたURLは開始URLではなく、基本的なparse
方法から取得します。解析すると、a を初期化しitemLoder
ます。meta
そこでいくつかのアイテムを抽出し、レスポンス経由でアイテムを渡します。(抽出されたフィールドには、ホテル名、住所、価格などの情報が含まれています...)
「review_member_name」、「review_quote」、「review_review」というアイテムも宣言しました
ページには複数のレビューがあり、レビューのレビュー ID は から取得できますresponse.url
。(以下の parse メソッドに示されています)
多くのレビューがあり、すべてが同じアイテム名を共有するため、アイテムが連結されますが、これは起こるべきではありません。誰でもこれを解決する方法を提案できますか?
以下はparse_reviewの私のソースです。
def parse_review(self,response):
review_nos = re.search(".*www\.tripadvisor\.in/ExpandedUserReviews-.*context=1&reviews=(.+)&servlet=Hotel_Review&expand=1",response.url).group(1)
review_nos = review_nos.split(',') # list of review ids
for review_no in review_nos:
item = response.meta['item']
#item = ItemLoader(item=TripadvisorItem(), response=response) - this works fine but I will lose the items from parse method
div_id = "expanded_review_"+review_no
review = response.xpath('/html/body/div[@id="%s"]'%div_id)
member_name = review.xpath('.//div[@class="member_info"]//div[@class="username mo"]//text()').extract()
if member_name:
item.add_value('review_member_name', member_name)
review_quote = review.xpath('.//div[@class="innerBubble"]/div[@class="quote"]//text()').extract()
if review_quote:
item.add_value('review_quote', review_quote)
review_entry = review.xpath('.//div[@class="innerBubble"]/div[@class="entry"]//text()').extract()
if review_entry:
item.add_value('review_review', review_entry)
yield item.load_item()
以下は私のitems.jsonです(「review_review」は削除されており、parseメソッドからのアイテムも削除されています)
[{"review_quote": "\u201c Fabulous service \u201d", "review_member_name": "VimalPrakash"},
{"review_quote": "\u201c Fabulous service \u201d \u201c Indian hospitality at its best, and honestly the best coffee in India \u201d", "review_member_name": "VimalPrakash Jessica P"},
{"review_quote": "\u201c Fabulous service \u201d \u201c Indian hospitality at its best, and honestly the best coffee in India \u201d \u201c Nice hotel in a central location \u201d", "review_member_name": "VimalPrakash Jessica P VikInd"}]
そして、この質問にふさわしいタイトルを提案してください。