【发布时间】:2014-12-29 03:17:03
【问题描述】:
我正在尝试使用 python 来抓取一个使用无限滚动实现的网站。实际上,网络是 pinterest。我知道如何使用 selenium webdriver 来无限滚动抓取网页。不过webdriver基本是模仿访问网页的过程,速度慢,比使用BeautifulSoup和urllib爬取慢很多。你知道用无限滚动抓取网页的任何高效方法吗?谢谢。
【问题讨论】:
标签: python web-scraping
我正在尝试使用 python 来抓取一个使用无限滚动实现的网站。实际上,网络是 pinterest。我知道如何使用 selenium webdriver 来无限滚动抓取网页。不过webdriver基本是模仿访问网页的过程,速度慢,比使用BeautifulSoup和urllib爬取慢很多。你知道用无限滚动抓取网页的任何高效方法吗?谢谢。
【问题讨论】:
标签: python web-scraping
无限滚动可能是使用 Ajax 查询在您滚动时检索更多数据。使用浏览器的开发工具检查请求结构并尝试直接访问相同的端点。通过这种方式,您可以获得您需要的数据,通常是 json 或 xml 格式。
在 chrome 中打开开发工具(在 Windows 中为 Ctrl + shift + I)并切换到网络选项卡。然后开始滚动,当加载更多内容时,您应该会看到新的网络活动。特别是 Ajax 请求,您可以按“xhr”过滤。单击新的网络项,您将获得有关请求的详细信息,例如标头、请求正文、响应的结构以及请求命中的 url(端点)。抓取这个 url 和抓取一个网站是一样的,只是不会有 html 来解析格式化的数据。
某些网站会尝试阻止此类行为。如果发生这种情况,我建议使用不带硒的 phantomjs。它可以非常快(与 selenium 相比)在网站上模仿人类交互。
【讨论】:
selenium.webdriver.PhantomJS 还是 Javascript 中的直接 phantomjs?