我在这里阅读了一些相关的帖子,但无法找到答案。
我正在尝试抓取带有评论的网页。访问网站时,最初只有10条评论,用户每次滚动时都应按“显示更多”以获得10条评论(还会将#add10 添加到网站的地址末尾)一直到评论列表的末尾。实际上,用户可以通过在网站地址的末尾添加 #addin1000 (其中1000是一些额外的评论)来获得完整的评论列表。问题是我在我的蜘蛛中只使用 site_url#add1000 进行了前10次评论,就像使用 site_url 一样,所以这种方法不起作用。
我也找不到一种方法来制作一个适当的请求来模仿来自网站的原点。原始AJAX网址的格式为' 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错误。谁能解释我做错了什么?
答案 0 :(得分:1)
您需要的是无头浏览器,因为请求模块无法很好地处理AJAX。
其中一个无头浏览器是selenium。
即。)
driver.find_element_by_id("show more").click() # This is just an example case
答案 1 :(得分:1)
通常,当您向下滚动页面时,Ajax会向服务器发送请求,然后服务器会将json / xml文件响应回您的浏览器以刷新页面。
您需要弄清楚链接到此json / xml文件的网址。通常,您可以打开firefox浏览器并打开工具/ web dev / web控制台。监视网络活动,您可以轻松捕获此json / xml文件。
找到此文件后,您可以直接解析它们的评论(我建议使用Python模块请求和bs4来完成这项工作)并减少大量时间。请记住使用一些不同的客户端和IP。对服务器很好,它不会阻止你。