我正试图从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 post请求以便正确解析所有数据?这是我的代码:
# -*- 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
如果可能的话,我也想要解决请求,因为我是scrapy的新手,但仍然没有找到我非常熟悉的请求模块的相应答案。我总是求助于使用我想要离开的硒。谢谢。
答案 0 :(得分:0)
所以我从this URL开始,对吧?
据我所知,每篇评论都有一个可点击的标题;它有一个URL,导致完整的审查。例如,点击“现代,干净,优秀的员工!”我得到了URL:
因此,您可以简单地循环包装器以获取每个评论标题的URL。
这是一种方式。
另一种方法是当我点击“更多”并在网络中检查> XHR,我得到这个网址:
请注意,这有多个评论 - 请注意最后的数字。我们可以有一个或多个。例如,通过仅保留一个数字来获得相同的上述审核:
好的,现在的问题是我们从哪里可以获得最后一个号码?您可以在属性data-reviewid中找到它,您甚至可以在第一种方式在上面的URL中找到它。