如何在booking.com上使用scrapy而不会被屏蔽?

问题描述

我正在尝试使用 python 插件scrapy 从booking.com 中抓取酒店评论

我的问题是,scrapy 找不到所需的数据(例如负面反馈)。我认为,这是因为网站中嵌入了 javascript 代码

因此,我尝试在 settings.py 文件中更改我的用户代理,但没有任何更改。然后我尝试模拟浏览器请求,但我不确定我是否正确。

这里是我想抓取评论的酒店的链接https://www.booking.com/hotel/de/best-western-plus-marina-star-lindau.de.html

这是我的蜘蛛:

import scrapy


class FeedbacktestSpider(scrapy.Spider):
    name = 'Feedbacktest'
    allowed_domains = ['www.booking.com/']
    start_urls = ['https://www.booking.com/hotel/de/best-western-plus-marina-star-lindau.de.html']

def start_requests(self):
    urls=['https://www.booking.com/hotel/de/best-western-plus-marina-star-lindau.de.html']
   
    headers = {
'Host': 'www.booking.com','Device-Memory': '8','DPR': '1','Viewport-Width': '1920','RTT': '50','Downlink': '10','ECT': '4g','Upgrade-Insecure-Requests': '1','DNT': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','sec-fetch-site':'same-origin','sec-fetch-mode':'navigate','Sec-Fetch-User':'?1','Sec-Fetch-Dest':'document','Referer':'https://www.booking.com/','Accept-Encoding':' gzip,deflate,br','Accept-Language':'de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Cookie':'__utma=12798129.959027148.1615055069.1615055069.1615055069.1; __utmc=12798129; __utmz=12798129.1615055069.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __utmt=1; __utmb=12798129.1.10.1615055069'
}
           
    for url in urls:
        yield scrapy.Request(url = url,callback = self.parse,headers=headers)

def parse(self,response):
    pos = response.xpath("//div[@class='althotelsDiv2 use_sprites_no_back featured_reviewer']/p/span/text()").extract()
    
    yield{
        'pos': pos
        }

对于 settings.py 中的 User-Agent,我尝试了自己的 User-Agent 和 Google-Agent。

非常感谢您的帮助

解决方法

好的,我解决了问题:

我使用我的网络工具查看了我想抓取的站点,并在请求所需数据的地方查找了请求。

然后我抓取了这个链接而不是原始链接,并在我的抓取 settings.py 中设置了 ROBOTSTXT_OBEY = False,这样我就不会被网站阻止。