我也是Python编程和scrapy的新手。我一直试图从www.tripadvisor.com上搜集一些评论。看来,对于一些酒店,有非英语语言的评论,当我使用以下代码时,我只获得英语语言的评分:
import scrapy
from scrapy.http import Request
import re
class ReviewScrapeSpider(scrapy.Spider):
name = 'review_scrape'
allowed_domains = ['tripadvisor.com']
start_urls = ['https://www.tripadvisor.com/Hotel_Review-g60970-d226251-Reviews-Murfreesboro_Extended_Stay_Hotel-Murfreesboro_Tennessee.html']
def parse(self, response):
hotel_name = response.xpath('//div[@class="ui_column is-12-tablet is-10-mobile hotelDescription"]/h1[@id="HEADING"]/text()').extract_first()
for href in response.xpath('//div[starts-with(@class,"quote")]/a/@href'):
url = response.urljoin(href.extract())
yield scrapy.Request(url, meta={'hotel_name':hotel_name}, callback=self.parse_reviews)
url = response.url
if not re.findall(r'or\d', url):
next_page = re.sub(r'(-Reviews-)', r'\g<1>or5-', url)
else:
pagenum = int(re.findall(r'or(\d+)-', url)[0])
pagenum_next = pagenum + 5
next_page = url.replace('or' + str(pagenum), 'or' + str(pagenum_next))
yield scrapy.Request(
next_page,
meta={'dont_redirect': True},
callback=self.parse)
def parse_reviews(self, response):
rating = response.xpath('//div[@class="ui_column is-10-desktop is-12-tablet is-12-mobile"]/span[@class]').extract_first()[-11:-9]
date = response.xpath('//*[@class="ratingDate"]/text()').extract_first()
yield {
'hotels_name':response.meta['hotel_name'],
'rating':rating,
'date': date
}
但是,后来我意识到默认情况下,评论语言设置为“英语”。因此,每次关闭并重新打开浏览器,然后打开酒店的评论页面时,语言都会设置为英语。请查看以下图片:
我的问题是如何在我的代码中选择“所有语言”选项,以便我可以搜索所有语言的评论?我非常感谢你的帮助。我尽可能地尝试过,但无法解决问题。我期待着你的帮助。谢谢
答案 0 :(得分:0)
也许答案有点晚,但对于其他感兴趣的人: 您可以通过抛出
轻松完成此操作“?filterLang = ALL”
位于网址末尾,应该可以解决问题。