在刮取TripAdvisor的评论时如何选择“所有语言”?

时间:2018-04-18 15:11:13

标签: python scrapy scrapy-spider

我也是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
            }

但是,后来我意识到默认情况下,评论语言设置为“英语”。因此,每次关闭并重新打开浏览器,然后打开酒店的评论页面时,语言都会设置为英语。请查看以下图片:

Please click here

我的问题是如何在我的代码中选择“所有语言”选项,以便我可以搜索所有语言的评论?我非常感谢你的帮助。我尽可能地尝试过,但无法解决问题。我期待着你的帮助。谢谢

1 个答案:

答案 0 :(得分:0)

也许答案有点晚,但对于其他感兴趣的人: 您可以通过抛出

轻松完成此操作

“?filterLang = ALL”

位于网址末尾,应该可以解决问题。