我正在尝试抓取在 ajax 请求后加载的数据。
例如,这个 youtube 页面的前 30 个视频以 html 格式显示,然后用户必须单击“加载更多”按钮,该按钮会触发 ajax 并获得更多结果。 https://www.youtube.com/user/testedcom/videos
我可以获得 ajax 链接,但是使用 Scrapy 功能提取剩余数据/“分页”的最佳方法是什么?
启动外壳:
scrapy shell https://www.youtube.com/user/testedcom/videos
获取 ajax 继续的 url:
continuation_url = response.xpath('//*[@class="yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more browse-items-load-more-button"]/@data-uix-load-more-href').extract()[0]
url = "https://www.youtube.com/user/testedcom/videos" + continuation_url
从 ajax 调用中获取新数据:
fetch(url)
...但是从这里我不确定如何处理数据。它与运行 scrapy shell 的原始响应格式不同。它似乎并不像 JSON 那样加载。我认为scrapy对此有专门的东西,但在文档中找不到。
编辑 我可以通过执行以下操作获取 html 内容:
import json
response_json = json.loads(response.body_as_unicode())
html = response_json['content_html']
但随后我将不得不使用正则表达式从这个 unicode 中提取所需的数据,而不是使用更方便的内置 xpath 选择器。