首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > CSS >

应用HtmlUnit抓取百度搜索结果

2012-09-28 
使用HtmlUnit抓取百度搜索结果?htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlun

使用HtmlUnit抓取百度搜索结果

?

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

?

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

应用HtmlUnit抓取百度搜索结果

通过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 buttonfinal List<HtmlRadioButtonInput> titleButtons = form.getRadioButtonsByName("tn");titleButtons.get(0).setChecked(false);titleButtons.get(1).setChecked(true); //选中“仅在新闻的标题中”的radion buttonHtmlHiddenInput 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);

?

热点排行