4

我想使用 IE 浏览器从网络上挖掘大量数据。但是,通过 WatiN 生成大量 IE 实例会使系统崩溃。有没有更好的方法来做到这一点?请注意,我不能简单地这样做WebRequests- 由于必须与网站上的 JS 驱动行为进行交互,我真的需要浏览器。

4

4 回答 4

2

我正在用 WatiN 挖掘很多页面。这一刻其实30+。当然,它需要大量资源——大约 2.5 GB 的 RAM,但几乎不可能用WebRequest. 我无法想象自己在合理的时间内做这样的事情。使用WatiN 需要几个小时。

我不知道它是否对您有帮助,但我正在使用 webbrowser 控件来做到这一点。每个实例都是一个单独的进程。但是,我认为对您来说更重要的是,我曾经尝试通过在单个进程中完成所有操作来减少使用的内存量。可以只制作单独AppDomain的 's 而不是进程,并强制它们使用相同的 dll(尤其是 Microsoft.mshtml.dll),而不是为每个新应用程序域单独加载相同的 dll。我现在不记得如何做到这一点,但谷歌搜索并不难。我记得的是一切都很好,RAM的使用量大大减少了,所以我认为值得一试。

于 2010-08-17T09:58:58.817 回答
1

我有一个项目,我在一个扩展的基础上收集了大约 4500 万个请求(带有表单提交)。在持续的基础上,我正在与大约 20 个同时存在的客户进行交流,而我的管道是瓶颈。

在尝试编写自己的 WebClient、WaTiN/WaTiR 并使用 Microsoft 的 UI 自动化 API 后,我使用了 Selinium Remote-Control 。

Selenium RC 让您选择浏览器。我用火狐。设置初始抓取脚本大约需要一个小时的实验和调整。Selenium 比编写我自己的代码要快得多,而且只需很少的投资就更健壮。很棒的工具。

为了扩展这个过程,我尝试了几种不同的方法,但最终最有效的方法是将每个 SRC 实例固定在其自己的精简 VM 中,然后在工作站支持的内存中生成尽可能多的实例。在主机中运行本机而不是 vm 的同等数量的 SRC 实例不可避免地停顿,因为我获得了 +10 个实例。在抓取运行之前,这需要更多的开销和设置时间,但它会连续几天不间断地运行。

另一个考虑因素——调低你的 Firefox 偏好设置,这样就不会加载主页,关闭所有不必要的东西(如果你的抓取、图像、广告块和闪存块等不需要,则关闭所有不必要的东西(欺骗检查、cookies)。

于 2010-08-21T22:15:27.957 回答
1

如何在 .NET 应用程序中启动多个 WebBrowser 控件实例(无论如何都是 IE)以异步方式处理数据挖掘作业?

如果性能是一个问题 - 拆分工作并将其推送到云端也可能会有所帮助。

于 2010-08-15T22:14:59.377 回答
1

最好的方法是实际为每个 Web 浏览器实例创建一个进程,这是因为 Web 浏览器不是托管代码,它的 COM,并且存在无法在托管代码中处理非托管异常的情况,应用程序肯定会崩溃.

更好的办法是创建一个进程主机,它将产生多个进程,如果需要,您可以使用命名管道或套接字或 WCF 在每个进程之间进行通信。

最好的办法是创建一个小型 SQL 嵌入式数据库,您可以在其中排队您的作业,挖掘过程可以获取新请求,并将请求发布回数据库,并且该数据库可用于同步所有内容。

于 2010-08-17T09:38:30.943 回答