如何刮一个闪存网站?

时间:2012-10-30 10:52:25

标签: c# flash web-scraping web-crawler html-agility-pack

我们正在使用 Html Agility Pack 来抓取基于HTML的网站的数据;是否有像 Html Agility Pack 这样的DLL来刮擦基于闪存的网站?

4 个答案:

答案 0 :(得分:1)

HTML Agility Pack不会有太多运气。一种方法是使用类似FiddlerCore的内容来代理到Flash站点的HTTP请求。您将启动FiddlerCore代理,然后使用类似C#WebBrowser的内容转到您要抓取的URL。当页面加载时,所有这些HTTP请求都将被代理,您可以检查它们的内容。但是,您不会获得大多数文本,因为它通常在Flash中是静态的。相反,您将获得通常单独存储的更大内容(视频,音频和图像)。与更传统的抓取/抓取相比,这将会变慢,因为您实际上必须在浏览器中执行/运行该页面。

如果您熟悉所有这些YouTube Downloader类型的扩展程序,则它们会在同一个主体上工作,除非它们直接从FireFox(例如)拦截HTTP请求,而不是单独的代理。

我相信谷歌和一些大型搜索引擎与Adobe / Flash有特殊的安排,并提供一些软件,让他们的搜索引擎抓取工具可以看到谷歌所依赖的更多文字和内容。 PDF内容也是如此。我不知道这个软件是否公开可用。

答案 1 :(得分:1)

这实际上取决于您要废弃的网站。在这方面有两种类型的网站:

  • 如果站点有swf文件中的数据,那么你必须反编译swf文件,并读取里面的数据。有足够的工作,你可以编程。但是,如果是这种情况,手动收集数据可能会更容易,因为它可能不会发生太大变化。

  • 但是,如果大多数情况下,特别是对于拥有大量数据的网站,Flash文件实际上是在联系外部API。在这种情况下,您可以完全忽略闪存并直接访问API。如果你不确定,只需激活Firebug的网络面板,然后开始浏览。如果它使用外部API,它应该变得明显。
    一旦找到该API,您可能可以对其进行逆向工程,以便为您提供所需的任何数据。

另请注意,如果它是一个足够大的网站,可能有非闪存方式来获取相同的数据:

  • 它可能有一个移动网站(没有闪存) - 尝试使用iPhone用户代理访问该网站。
  • 它可能有一个抓取工具的网站(例如googlebot) - 尝试使用googlebot用户代理访问该网站。

编辑: 如果你谈论爬行(抓取意味着从任何随机网站获取数据)而不是抓取(从特定网站获取结构化数据),那么你无能为力,即使googlebot也没有废弃Flash内容。主要是因为与HTML不同,flash没有标准化的语法,你可以立即告诉什么是文本,什么是链接等...

答案 2 :(得分:0)

如何将整个页面捕获为图像并在页面上运行OCR来读取数据

答案 3 :(得分:0)

刮擦Flash内容将非常复杂,声称这样做的任何组件的可靠性充其量是值得怀疑的。但是,如果您希望在某个网页上“抓取”或跟踪Flash动画中的超链接,您可能会对Infant感到满意。 Infant是一个用于Web爬行的免费Java库,提供有限/尽力而为的Flash内容超链接功能。婴儿不是开源的,但可以免费用于个人和商业用途。无需注册!