我们正在使用Html Agility Pack为基于 HTML 的站点抓取数据;有没有像Html Agility Pack这样的 DLL来抓取基于 flash 的站点?
4 回答
这实际上取决于您要废弃的网站。在这方面有两种类型的网站:
如果站点在 swf 文件中有数据,那么您必须反编译 swf 文件,并读取其中的数据。通过足够的工作,您可能可以通过编程方式完成。但是,如果是这种情况,手动收集数据可能会更容易,因为它可能不会有太大变化。
然而,如果大多数情况下,特别是对于有大量数据的网站,flash 文件实际上是在联系外部 API。在这种情况下,您可以完全忽略闪存并直接访问 API。如果您不确定,只需激活 Firebug 的网络面板,然后开始浏览。如果它使用外部 api,它应该变得很明显。
一旦找到该 API,您可能可以对如何操作它进行逆向工程,从而为您提供所需的任何数据。
另请注意,如果它是一个足够大的站点,则可能有非闪存方式来获取相同的数据:
- 它可能有一个移动站点(没有 Flash) - 尝试使用 iPhone 用户代理访问该站点。
- 它可能有一个用于爬虫的网站(如 googlebot) - 尝试使用 googlebot 用户代理访问该网站。
编辑:如果您谈论的是抓取(抓取意味着从任何随机站点获取数据)而不是抓取(从特定站点获取结构化数据),那么您无能为力,即使 googlebot 也不会抓取 Flash 内容。主要是因为与 HTML 不同,flash 没有标准化的语法,您可以立即分辨什么是文本、什么是链接等...
HTML Agility Pack 不会给您带来太多的运气。一种方法是使用FiddlerCore之类的东西来代理与 Flash 站点之间的 HTTP 请求。您将启动 FiddlerCore 代理,然后使用 C# WebBrowser 之类的东西转到您要抓取的 URL。当页面加载时,所有这些 HTTP 请求都将被代理,您可以检查它们的内容。但是,您不会得到大多数文本,因为它们在 Flash 中通常是静态的。相反,您将获得通常单独存储的大部分内容(视频、音频,也许还有图像)。与更传统的抓取/爬网相比,这将变慢,因为您实际上必须在浏览器中执行/运行页面。
如果您熟悉所有这些 YouTube 下载器类型的扩展,它们的工作原理相同,只是它们直接拦截来自 FireFox(例如)而不是单独的代理的 HTTP 请求。
我相信谷歌和一些大型搜索引擎与 Adobe/Flash 有特殊的安排,并提供了一些软件,让他们的搜索引擎爬虫看到更多谷歌依赖的文本和东西。PDF 内容也是如此。我不知道这个软件是否可以公开使用。
抓取 Flash 内容会非常复杂,任何声称这样做的组件的可靠性充其量都是值得怀疑的。但是,如果您希望在某些网页上“爬行”或跟随 Flash 动画中的超链接,您可能会遇到Infant的一些运气。Infant 是一个免费的用于网络爬取的 Java 库,并提供有限/尽力而为的 Flash 内容超链接跟踪功能。Infant 不是开源的,但可以免费用于个人和商业用途。无需注册!
How about capturing the whole page as an image and running an OCR on the page to read the data