【发布时间】:2017-08-22 20:52:18
【问题描述】:
我正在使用 Python-Scrapy 来删除tripadvisor 会员页面的评论。 这是我正在使用的网址:http://www.tripadvisor.com/members/scottca075
我可以使用 scrapy 获取第一页。我一直无法获取其他页面。在单击“下一步”按钮时,我在浏览器的 Network 选项卡中观察到 XHR 请求。
发送一个 GET 和一个 POST 请求: 在检查 GET 请求的参数时,我看到了:
action : undefined_Other_ClickNext_REVIEWS_ALL
gaa : Other_ClickNext_REVIEWS_ALL
gal : 50
gams : 0
gapu : Vq85qQoQKjYAABktcRMAAAAh
gass : members`
请求的url是
`http://www.tripadvisor.com/ActionRecord?action=undefined_Other_ClickNext_REVIEWS_ALL&gaa=Other_ClickNext_REVIEWS_ALL&gal=0&gass=members&gapu=Vq8xPAoQLnMAAUutB9gAAAAJ&gams=1`
参数gal代表偏移量。每页有 50 条评论。通过单击下一步按钮移动到第二页时,参数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 = {'Host':'www.tripadvisor.com','Referer':'http://www.tripadvisor.com/members/prizm','X-Requested-With': 'XMLHttpRequest'}
如果有人能解释我所缺少的并指出我正确的方向,那就太好了。我的想法已经用完了。
而且,我知道我可以使用硒。但我想知道是否有更快的方法来做到这一点。
【问题讨论】:
标签: python ajax pagination web-scraping scrapy