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 页面抓取的主要内容,如果未能解决你的问题,请参考以下文章
Python使用lxml模块和Requests模块抓取HTML页面的教程