`
wander754085
  • 浏览: 51963 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

使用HtmlUnit抓取百度搜索结果

阅读更多

 

htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。这个没有界面的浏览器,运行速度也是非常迅速的。相关文件下载地址:http://sourceforge.net/projects/htmlunit/files/ (依赖的包略多微笑

 

我的需求是使用百度的高级新闻搜索,抓取指定时间段的新闻,手动搜索的设置如图所示:

通过htmlunit可以方便地操作网页中的form和各类的input控件,如HtmlSubmitInput,HtmlTextInput,HtmlRadioButtonInput,HtmlHiddenInput等等,可以通过name和value查找对应的DOM结点。一开始遇到的问题是,即使正确地操作了radio Button,也不能得出正确的时间段内的结果,用chrome查看了Http header后发现,百度在form中隐藏了两个参数,参数名为bt和et,分别代表用户选中的那两个时间begin_date和end_date与1970-1-1之间的间隔时长的时间戳,因此还需要手动添加这两个参数,才能得出对应时间段的结果,代码如下:

final WebClient webclient = new WebClient();
		final HtmlPage htmlpage = webclient
				.getPage("http://news.baidu.com/advanced_news.html");
		webclient.setCssEnabled(false);
		webclient.setJavaScriptEnabled(false);
		// System.out.println(htmlpage.getTitleText());
		final HtmlForm form = htmlpage.getFormByName("f");
		final HtmlSubmitInput button = form.getInputByValue("百度一下");
		final HtmlTextInput textField = form.getInputByName("q1");
		textField.setValueAttribute(word);
		final List<HtmlRadioButtonInput> radioButtons = form
				.getRadioButtonsByName("s");
		radioButtons.get(0).setChecked(false);
		radioButtons.get(1).setChecked(true);// 选中限定时间段的radion button
		final List<HtmlRadioButtonInput> titleButtons = form
				.getRadioButtonsByName("tn");
		titleButtons.get(0).setChecked(false);
		titleButtons.get(1).setChecked(true); //选中“仅在新闻的标题中”的radion button
		HtmlHiddenInput bt = form.getInputByName("bt");
		bt.setValueAttribute("1167580800"); //2007-1-1的时间戳
		HtmlHiddenInput et = form.getInputByName("et");
		et.setValueAttribute("1199116799"); //2007-12-31的时间戳
		final HtmlPage page2 = button.click();
		String result = page2.asText();
		Pattern pattern = Pattern.compile("找到相关新闻 约(.*) 篇");
		Matcher matcher = pattern.matcher(result);
		webclient.closeAllWindows();
                if (matcher.find())
			return matcher.group(1);

 

分享到:
评论

相关推荐

    java使用htmlunit工具抓取js中加载的数据.docx

    java使用htmlunit工具抓取js中加载的数据.docx

    通过htmlunit获取执行js代码后的html文档

    以下是使用HTMLUnit进行此类操作的基本步骤: 1. **导入库**:在Java项目中,你需要添加HTMLUnit的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;net.sourceforge.htmlunit&lt;/...

    webCrawl:使用HTMLUnit,PhantomJS和JBrowserDriver抓取网址

    本文将深入探讨如何使用HTMLUnit、PhantomJS和JBrowserDriver这三种无头浏览器技术来实现网页抓取。这些工具都基于Java语言,因此适合Java开发者进行网页抓取工作。 首先,HTMLUnit是一个强大的无头Java浏览器,它...

    Htmlunit2.23-bin.zip

    HTMLUnit是一个强大的Java库,它模拟了一个无头Web浏览器,主要用于自动化测试和网页抓取。在版本2.23的zip文件中,我们主要关注HTMLUnit的核心功能和它如何帮助开发者处理HTML内容。 HTMLUnit的核心是基于Jakarta ...

    基于ApacheNutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件nutch-htmlunit.zip

    常规的AJAX页面抓取: 对于绝大部分诸如jQuery ajax加载的页面,可以直接用protocol-htmlunit插件抓取。 特殊的AJAX请求页面抓取: 诸如淘宝/天猫的页面采用了独特的Kissy Javascript组件, 导致...

    htmlunit2.8 + jsoup1.7网站数据抓取

    **结合使用htmlunit2.8与jsoup1.7** 将这两个库结合起来,可以实现更强大的数据抓取能力。首先,HtmlUnit加载整个网页,执行JavaScript,然后Jsoup解析HtmlUnit得到的HTML内容,提取我们需要的数据。这样做的好处...

    htmlunit-2.14

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化Web页面的测试和抓取。这个库的核心功能是能够解析、渲染和执行JavaScript,从而使得开发者可以在没有实际浏览器环境的情况下,对网页进行功能测试...

    htmlunit 及其 依赖包

    HTMLUnit使用HttpClient来处理网络通信,包括GET和POST请求,设置请求头,处理重定向等。版本4.5.2提供了一套完整的HTTP协议实现,支持HTTPS和各种HTTP特性。 4. **xml-apis-1.4.01.jar**:这是一个XML API的集合,...

    htmlunit依赖jar包

    5. **CSS解析**: 对于CSS的支持,HTMLUnit使用了Cascading Style Sheets (CSS) Object Model (CSOM)来解析和应用CSS规则。 6. **异常处理和模拟**: HTMLUnit还包含了各种模拟浏览器行为的组件,如模拟点击、填写...

    htmlunit依赖的所有jar

    将这些JAR文件解压并导入到你的Java项目后,你就可以开始使用HTMLUnit进行网页测试或抓取。例如,你可以创建一个`HtmlPage`对象,加载URL,然后通过这个对象来执行JavaScript、查找元素或提取数据。 8. **示例代码...

    htmlunit-2.31.jar

    HTMLUnit是一个强大的Java库,主要用于自动化网页浏览和数据抓取任务。它是一个无头浏览器,意味着它可以在没有图形用户界面的情况下运行,这对于自动化测试和Web抓取非常有用。标题中的"htmlunit-2.31.jar"是...

    htmlunit-2.19-bin

    这个“htmlunit-2.19-bin”压缩包包含了HTMLUnit的二进制版本,允许开发者在Java应用程序中进行网页自动化测试和网页抓取。以下是关于HTMLUnit及其2.19版本的一些关键知识点: 1. **HTMLUnit简介**:HTMLUnit是一个...

    htmlUnit所需jar包

    使用HTMLUnit,开发者可以编写代码来浏览网页、填写表单、点击链接,甚至执行JavaScript,而无需真正打开一个浏览器。这对于自动化测试、数据抓取和无头爬虫来说非常有用。由于其无头特性,HTMLUnit在服务器端或...

    htmlunit爬取数据转储excel

    使用HTMLUnit进行网页抓取时,应遵守网站的robots.txt协议,尊重网站的版权和隐私政策。此外,频繁的抓取可能会被服务器视为攻击,因此需要合理控制请求频率,必要时使用代理IP。 总结来说,"htmlunit爬取数据转储...

    htmlunit-2.26-bin

    9. **安全性**:在使用HTMLUnit进行网页抓取时,需要遵循网络伦理和法律法规,尊重网站的robots.txt文件,避免对目标服务器造成过大的负载,防止被识别为恶意爬虫。 10. **学习资源**:要学习和使用HTMLUnit,可以...

    htmlunit-2.20.zip

    值得注意的是,随着Java版本的更新,某些新特性可能无法在HTMLUnit 2.20中使用,但它的稳定性和对Java 7的支持使其在某些场景下仍然很有价值。 HTMLUnit的核心功能包括: 1. **无头浏览器模拟**:HTMLUnit可以在...

    htmlunit参考文档

    HTMLUnit是一款强大的Java库,它模拟了一个无头Web浏览器,主要用于自动化Web测试和网页抓取。这个参考文档是关于HTMLUnit的API详细说明,对于开发者来说是理解和使用HTMLUnit的重要资源。下面,我们将深入探讨...

    htmlunit基本jar包

    3. **错误处理**:在使用HTMLUnit时,由于JavaScript执行和网络请求的复杂性,需要处理可能出现的各种异常。 4. **性能优化**:虽然HTMLUnit是为了快速和自动化测试设计的,但在大规模使用时,仍需考虑性能优化,...

    htmlunit所需要jar包

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化网页测试和网页抓取。这个库允许开发者在没有实际浏览器的情况下与HTML页面进行交互,执行JavaScript,并获取页面加载后的结果。它对于进行功能测试...

Global site tag (gtag.js) - Google Analytics