使用AJAX的抓取站点

2024-10-02 20:35:03 发布

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

我读了一些相关的帖子,但找不到答案。在

我正试图抓取一个有评论的网页。当站点被访问时,一开始只有10条评论,用户每次向下滚动到评论列表的末尾时,应该按“Show more”来获得10条评论(这也会在站点地址的末尾添加add10)。实际上,用户可以通过在站点地址的末尾添加\add1000(其中1000是一些额外的评论)来获得完整的评论列表。问题是,我在我的spider中使用site_url#add1000只得到前10条评论,就像site\u url一样,所以这种方法不起作用。在

我也找不到一个合适的方式,从网站上模仿原产地的要求。源AJAX url的格式是'domain/ajaxlst?par1=x&par2=y,我尝试了所有这些:

Request(url='domain/ajaxlst?par1=x&par2=y', callback=self.parse_all) 
Request(url='domain/ajaxlst?par1=x&par2=y', callback=self.parse_all,
        headers={all_headers})
Request(url='domain/ajaxlst?par1=x&par2=y', callback=self.parse_all,
        headers={all_headers}, cookies={all_cookies})

但每次我收到404错误。谁能解释一下我做错了什么吗?在


Tags: 用户selfurl站点parserequestdomaincallback
2条回答

由于请求模块不能很好地处理AJAX,您需要的是一个无头浏览器。在

这种无头浏览器之一是selenium。在

即)

driver.find_element_by_id("show more").click() # This is just an example case

通常,当您向下滚动页面时,Ajax将向服务器发送请求,然后服务器将向您的浏览器响应json/xml文件以刷新页面。在

您需要找出链接到此json/xml文件的url。通常,您可以打开firefox浏览器并打开tools/web dev/web控制台。监视网络活动,您可以轻松地捕获这个json/xml文件。在

一旦找到这个文件,就可以直接解析来自它们的评论(我推荐Python模块请求和bs4来完成这项工作),并减少大量的时间。记住使用不同的客户端和IP。对服务器好一点,它不会阻止你。在

相关问题 更多 >