gpt4 book ai didi

Python Scrapy - Ajax 分页 Tripadvisor

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:30 25 4
gpt4 key购买 nike

我正在使用 Python-Scrapy 来删除 tripadvisor 成员(member)页面的评论。这是我正在使用的网址: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`

请求地址为

 `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 中设置 header 选项

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

如果有人能解释我遗漏的内容并为我指明正确的方向,那就太好了。我已经没有想法了。

而且,我知道我可以使用 selenium。但我想知道是否有更快的方法来做到这一点。

最佳答案

使用ScrapyJS - Scrapy+JavaScript 集成

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

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

例如,如果我们想要检索页面的渲染 HTML,我们可以这样做:

    import scrapy

class MySpider(scrapy.Spider):
start_urls = ["http://example.com", "http://example.com/foo"]

def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, self.parse, meta={
'splash': {
'endpoint': 'render.html',
'args': {'wait': 0.5}
}
})

def parse(self, response):
# response.body is a result of render.html call; it
# contains HTML processed by a browser.
# …

一个常见的场景是用户需要在页面显示之前点击一个按钮。我们可以使用带有 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

关于Python Scrapy - Ajax 分页 Tripadvisor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35129508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com