首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scrapy/requests模拟XHR

Scrapy/requests模拟XHR
EN

Stack Overflow用户
提问于 2017-03-29 02:15:08
回答 1查看 574关注 0票数 0

我正在尝试从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请求,以便正确解析所有数据?下面是我的代码:

代码语言:javascript
复制
# -*- 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) 

此外,我注意到这只包含有“更多”选项的列表,所以要获得所有评论,我最好的选择是这样做:

代码语言:javascript
复制
if 'more' is present:
     do xhr request
else:
   pass

如果可能的话,我也喜欢请求的解决方案,因为我对scrapy还不熟悉,还没有找到我非常熟悉的请求模块的相应答案。我总是求助于我想要摆脱的硒。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-04-06 03:59:01

所以我是从this URL开始的,对吧?

据我所知,每个评论都有一个可点击的标题;它有一个指向完整评论的URL。例如,单击“现代,干净,优秀的员工!”我得到了URL:

https://www.tripadvisor.com/ShowUserReviews-g60763-d224214-r470551868-The_Bryant_Park_Hotel-New_York_City_New_York.html#CHECK_RATES_CONT

因此,您可以简单地循环包装器来获得每个评论标题的URL。

这是一种方法。

另一种方法是,当我单击"More“并在Network > XHR中进行检查时,我会得到这个URL:

https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS&metaReferer=Hotel_Review&reviews=470551868,470078957,469616995,469417970

请注意,这里有不止一篇评论--请注意最后的数字。我们可以有一个或多个。例如,要通过只保留一个数字来获得相同的上述审查:

https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS&metaReferer=Hotel_Review&reviews=470551868

好的,现在的问题是我们从哪里得到最后一个数字?您可以在属性data-reviewid中找到它,甚至可以通过第一种方法在上面的URL中找到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43076997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档