【发布时间】:2017-03-28 18:15:07
【问题描述】:
我正在尝试从 https://www.tripadvisor.com/Hotel_Review-g60763-d2173604-Reviews-Dream_Downtown-New_York_City_New_York.html 获取评论,当您单击更多评论时我需要的 AJAX 请求似乎是 https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS&metaReferer=Hotel_Review。如何获取 xhr 发布请求,以便正确解析所有数据?这是我的代码:
# -*- coding: utf-8 -*-
import scrapy
def parse(self, response):
url = 'https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS&metaReferer=Hotel_Review'
headers = {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Accept-Encoding':'gzip, deflate, br',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'X-Requested-With':'XMLHttpRequest'}
req = scrapy.Request(url,method='POST',body='{"filters": []}',headers=headers,callback=self.parse_me)
yield req
def parse_me(self,response):
print(response.body)
我还注意到这仅包含具有“更多”选项的列表,因此要获得所有评论,我最好的选择是执行以下操作:
if 'more' is present:
do xhr request
else:
pass
如果可能的话,我也想要 requests 的解决方案,因为我是 scrapy 的新手,但仍然没有找到我非常熟悉的 requests 模块的相应答案。我总是求助于使用我想摆脱的硒。谢谢。
【问题讨论】:
-
您的具体问题是什么?
-
@PeterHenell 我试图弄清楚如何引入 xhr 发布请求,以便我可以从那里获取评论数据,而不是使用 selenium 单击更多然后从页面源中读取。我不完全确定如何做到这一点,当前的标题给了我 404
标签: python-3.x scrapy python-requests scrapy-spider