抓取网页新闻(htmlunitjava页面分析工具的浏览器运行速度也迅速的应用 )

优采云 发布时间: 2022-01-22 19:17

  抓取网页新闻(htmlunitjava页面分析工具的浏览器运行速度也迅速的应用

)

  htmlunit 是一个开源的java页面分析工具。阅读完页面后,可以有效地使用htmlunit分析页面上的内容。该项目可以模拟浏览器的操作,称为java浏览器的开源实现。这个没有界面的浏览器运行速度非常快。相关文件下载地址:(依赖包稍微多一些

  

  )

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

  

  通过htmlunit,可以方便的操作网页中的表单和各种输入控件,如HtmlSubmitInput、HtmlTextInput、HtmlRadioButtonInput、HtmlHiddenInput等,通过名称和值可以找到对应的DOM节点。一开始遇到的问题是,即使正确操作了radio Button,也无法得到正确时间段的结果。用chrome查看Http header后发现百度在表单中隐藏了两个参数。参数名称为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 radioButtons = form

.getRadioButtonsByName("s");

radioButtons.get(0).setChecked(false);

radioButtons.get(1).setChecked(true);// 选中限定时间段的radion button

final List 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);

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线