6

我需要筛选从网站上抓取一些数据,因为它不能通过他们的网络服务获得。当我以前需要这样做时,我已经使用 Apache 的 HTTP 客户端库自己编写了 Java 代码,以进行相关的 HTTP 调用来下载数据。在使用Charles Web 代理记录相应的 HTTP 调用时,我通过在浏览器中单击相关屏幕来找出我需要进行的相关调用。

正如您可以想象的那样,这是一个相当乏味的过程,我想知道是否有一个工具可以实际生成与浏览器会话相对应的 Java 代码。我希望生成的代码不会像手动编写的代码那样漂亮,但我总是可以在之后整理它。有谁知道这样的工具是否存在?Selenium 是我知道的一种可能性,但我不确定它是否支持这个确切的用例。

谢谢,唐

4

5 回答 5

4

我还会为 HtmlUnit 添加 +1,因为它的功能非常强大:如果您需要“就像真正的浏览器正在抓取并使用页面一样”的行为,那绝对是最好的选择。HtmlUnit 执行(如果您愿意)页面中的 Javascript。

它目前对所有主要的 Javascript 库都有全功能支持,并将使用它们执行 JS 代码。与此相对应,您可以在测试中以编程方式获取页面中 Javascript 对象的句柄。

但是,如果您尝试做的事情的范围更小,更多的是阅读一些 HTML 元素并且您不太关心 Javascript,那么使用NekoHTML就足够了。它类似于JDom以编程方式(而不是 XPath)访问树。您可能需要使用 Apache 的HttpClient来检索页面。

于 2009-01-09T16:38:00.137 回答
3

managementability.org博客有一个条目,其中列出了一大堆 Java 网页抓取工具。但是,我现在似乎无法访问它,但我确实在此处的 Google 缓存中找到了纯文本表示。

于 2009-01-08T14:51:11.467 回答
2

我想说我个人喜欢使用 HtmlUnit 和 Selenium 作为我最喜欢的两种屏幕抓取工具。

于 2010-12-07T08:36:20.837 回答
2

你应该看看HtmlUnit——它是为测试网站而设计的,但非常适合屏幕抓取和浏览多个页面。它负责 cookie 和其他与会话相关的内容。

于 2009-01-08T04:27:46.390 回答
0

一个名为The Grinder的工具允许您通过其代理编写与站点的会话脚本。输出是 Python(可在 Jython 中运行)。

于 2009-01-08T15:29:58.457 回答