我需要屏蔽来自网站的一些数据,因为它不能通过他们的网络服务获得。当我以前需要这样做时,我自己编写了Java代码,使用Apache的HTTP客户端库来进行相关的HTTP调用以下载数据。我通过点击浏览器中的相关屏幕,同时使用Charles web proxy记录相应的HTTP呼叫,找出了我需要进行的相关调用。
你可以想象这是一个相当繁琐的过程,如果有一个工具可以实际生成与浏览器会话相对应的Java代码,那我就开始思考了。我希望生成的代码不会像手动编写的代码一样漂亮,但我可以随后整理它。有谁知道这样的工具是否存在? Selenium是我所知道的一种可能性,虽然我不确定它是否支持这个确切的用例。
谢谢, 唐
答案 0 :(得分:4)
我还要为HtmlUnit添加+1,因为它的功能非常强大:如果你需要行为'好像真正的浏览器正在抓取并使用页面'这绝对是最好的选择。 HtmlUnit执行(如果你想要的话)页面中的Javascript。
目前所有主要Javascript库都有full featured support,并将使用它们执行JS代码。与此相对应,您可以在测试中以编程方式获取页面中Javascript对象的句柄。
但是,如果你想要做的事情的范围更小,更多的是阅读一些HTML元素以及你不太关心Javascript的地方,那么使用NekoHTML就足够了。它类似于JDom给予程序化 - 而不是XPath - 访问树。您可能需要使用Apache的HttpClient来检索页面。
答案 1 :(得分:3)
manageability.org博客有一个条目,列出了一大堆用于Java的网页抓取工具。但是,我现在似乎无法联系到它,但我确实在Google的缓存here中找到了一个纯文字表示。
答案 2 :(得分:2)
你应该看看HtmlUnit - 它是专为测试网站而设计的,但非常适合屏幕抓取和浏览多个页面。它负责处理cookie和其他与会话相关的内容。
答案 3 :(得分:2)
我想说我个人喜欢使用HtmlUnit和Selenium作为我最喜欢的屏幕抓取工具。
答案 4 :(得分:0)
一个名为The Grinder的工具允许您通过遍历其代理来编写会话脚本。输出是Python(在Jython中可运行)。