HTML 页面抓取

Posted

技术标签:

【中文标题】HTML 页面抓取【英文标题】:HTML Page Scraping 【发布时间】:2012-11-24 16:11:46 【问题描述】:

抓取具有 AJAX/动态加载数据的网页的最佳方法是什么?

例如:抓取一个加载时显示 20 张图片的网页,但当用户向下滚动页面时,它会加载更多图片(有点像 Facebook)。在这种情况下,您如何抓取所有图像,而不仅仅是前 20 个?

【问题讨论】:

【参考方案1】:

这是连主要搜索引擎都没有掌握的东西。它叫做“event-driven crawling”。

Google 甚至提供了如何处理 help them crawl your ajax sites better 的指南

最好的办法是阅读一些open source crawlers 并看看他们做了什么。但你爬到 80% 的机会充其量是微乎其微的,除非你有一个特定的目标。

crawljax也有一些有趣的读物

基本上,您应该尝试查找脚本并检查它们是否进行任何 ajax 调用,然后确定它们采用哪种参数并使用递增/递减的参数值重复调用。这仅在参数具有逻辑模式(例如数字、单个字母等)时才有效。它还取决于您是针对已知站点还是只是将其发送到野外。如果你知道你的目标,你可以检查它的 DOM 并自定义你的代码以获得更高的准确性,如 wolf 所提到的。

祝你好运

【讨论】:

【参考方案2】:

使用Fiddler 或WireShark 等工具检查加载更多项目时完成的网络请求。

然后在您的代码中复制请求。


更新(感谢pguardiario ofr 他的评论):

请注意,Wireshark 是一种低级网络捕获工具,它提供有关流量的大量详细信息(正在交换的数据包、DNS 查找等),并且在您只希望在这种情况下使用可能会很痛苦查看 HTTP 请求。

因此,您最好在浏览器中使用 Fiddler 或类似工具(例如:Chrome 的网络检查面板)。

【讨论】:

提琴手是的,但wireshark会很痛苦。 Chrome 的网络检查面板将完成这项工作。 @pguardiario 是的,这也是一个很棒的工具【参考方案3】:

Crawljax 是开源的,可以动态抓取基于 Ajax 的内容。

【讨论】:

以上是关于HTML 页面抓取的主要内容,如果未能解决你的问题,请参考以下文章

如何分析curl抓取页面的编码

Python使用lxml模块和Requests模块抓取HTML页面的教程

python 如何抓取动态页面内容?

如何使用 beautifulsoup 从 html 页面中抓取纬度/经度数据

你如何抓取 AJAX 页面?

如何抓取网页中的动态数据