Python Scrapy Ajax分页Tripadvis

2024-05-16 18:12:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我用pythonscrapy来取消tripadvisor成员页面的评论。 这是我使用的网址:http://www.tripadvisor.com/members/scottca075

我可以用scrapy得到第一页。我还没能找到其他的页面。我在单击“下一步”按钮时,在浏览器的“网络”选项卡中观察到XHR请求。在

发送一个GET和一个POST请求: 在检查GET请求的参数时,我看到:

action : undefined_Other_ClickNext_REVIEWS_ALL
gaa : Other_ClickNext_REVIEWS_ALL
gal : 50
gams : 0
gapu : Vq85qQoQKjYAABktcRMAAAAh
gass : members`

请求url是

^{pr2}$

参数gal表示偏移量。每页有50篇评论。通过单击next按钮移动到第二页时,参数gal被设置为50。然后,100,150,200..等等。在

我想要的数据是json格式的POST请求。Image of JSON data in POST request。post请求的请求url是http://www.tripadvisor.com/ModuleAjax?

我不明白如何在scrapy中提出请求以获取数据。 我尝试使用FormRequest如下:

pagination_url = "http://www.tripadvisor.com/ActionRecord"
form_date = {'action':'undefined_Other_ClickNext_REVIEWS_ALL','gaa':'Other_ClickNext_REVIEWS_ALL', 'gal':'0','gams':'0','gapu':'Vq8EngoQL3EAAJKgcx4AAAAN','gass':'members'}
FormRequest(url=self.pagination_url, formdata=formdata, callback=self.parseItem)

我还尝试在FormRequest中设置headers选项

headers = {'Host':'www.tripadvisor.com','Referer':'http://www.tripadvisor.com/members/prizm','X-Requested-With': 'XMLHttpRequest'}

如果有人能解释我遗漏了什么,并为我指出正确的方向,那就太好了。我已经没有主意了。在

而且,我知道我可以使用硒。但我想知道有没有更快的方法。在


Tags: comhttpurl参数www页面allpost
2条回答

所以你做得对, 将FormRequest前面的收益率相加为:

yield FormRequest(''')

其次,关注gal的值,因为它是这里唯一更改的参数,并且不要保持gal=“0”。在

找到评论的总数,从50页开始到总页数,每个请求加50页。在

^{pr2}$

使用ScrapyJS-Scrapy+JavaScript集成

要在项目中使用ScrapyJS,首先需要启用中间件:

DOWNLOADER_MIDDLEWARES = {
    'scrapyjs.SplashMiddleware': 725,
}

例如,如果要检索页面的呈现HTML,可以执行以下操作:

^{pr2}$

一种常见的情况是,用户需要在页面显示之前单击一个按钮。我们可以使用带有Splash的jQuery来处理这个问题:

function main(splash)
    splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js")
    splash:go("http://example.com")
    splash:runjs("$('#some-button').click()")
    return splash:html()
end

有关详细信息check here

相关问题 更多 >