深圳英文网站建设专业公司,我的网站怎么做,wordpress抓取文章插件,有什么网站做的比较高大上转载请标明出处#xff1a;http://blog.csdn.net/lmj623565791/article/details/23866427 今天又遇到一个网页数据抓取的任务#xff0c;给大家分享下。 说道网页信息抓取#xff0c;相信Jsoup基本是首选的工具#xff0c;完全的类JQuery操作#xff0c;让人感觉很舒服。但… 转载请标明出处http://blog.csdn.net/lmj623565791/article/details/23866427 今天又遇到一个网页数据抓取的任务给大家分享下。 说道网页信息抓取相信Jsoup基本是首选的工具完全的类JQuery操作让人感觉很舒服。但是今天我们就要说一说Jsoup的不足。 1、首先我们新建一个页面 !DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
htmlheadtitlemain.html/titlemeta http-equivkeywords contentkeyword1,keyword2,keyword3meta http-equivdescription contentthis is my pagemeta http-equivcontent-type contenttext/html; charsetUTF-8style typetext/cssa {line-height: 30px;margin: 20px;}/style!--link relstylesheet typetext/css href./styles.css--script typetext/javascriptvar datas [ {href : http://news.qq.com/a/20140416/017800.htm,title : 高校一保安长相酷似作家莫言
}, {href : http://news.qq.com/a/20140416/015167.htm,title : 男子单臂托举悬空女半小时
}, {href : http://news.qq.com/a/20140416/013808.htm,title : 女子上门讨房租遭强奸拍裸照
}, {href : http://news.qq.com/a/20140416/016805.htm,title : 澳洲骆驼爱喝冰镇啤酒解暑
} ];window.onload function() {var infos document.getElementById(infos);for( var i 0 ; i datas.length ; i){var a document.createElement(a);a.href datas[i].href ;a.innerText datas[i].title;infos.appendChild(a); infos.appendChild(document.createElement(br))}
}
/script/headbodyHello Main HttpUnit!brdiv idinfosstylewidth: 60%; border: 1px solid green; border-radius: 10px; margin: 0 auto;/div/body
/html
页面上观察是这样显示的 我们审查元素 如果你看到这样的页面你会觉得拿Jsoup来抓取简直就是呵呵小菜一叠于是我们写了这样的代码 Testpublic void testUserJsoup() {try {Document doc Jsoup.connect(http://localhost:8080/strurts2fileupload/main.html).timeout(5000).get();Elements links doc.body().getElementsByTag(a);for (Element link : links) {System.out.println(link.text() link.attr(href));}} catch (IOException e) {e.printStackTrace();}} 你会觉得就这几行代码轻轻松松搞定快快乐乐下班。于是运行发现其实什么的抓取不到。 于是我们再回到页面打开页面源代码也就是上面的HTML代码你恍然大悟我靠body里面根本没有数据难怪抓不到。这就是Jsoup的不足如果Jsoup去抓取的页面的数据全都是页面加载完成后ajax获取形成的是抓取不到的。 下面给大家推荐另一个开源项目HttpUnit看名字是用于测试的但是用来抓取数据也不错 我们开始编写类似Jsoup的代码 Testpublic void testUserHttpUnit() throws FailingHttpStatusCodeException,MalformedURLException, IOException {/** HtmlUnit请求web页面 */WebClient wc new WebClient(BrowserVersion.CHROME);wc.getOptions().setUseInsecureSSL(true);wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器默认为truewc.getOptions().setCssEnabled(false); // 禁用css支持wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时是否抛出异常wc.getOptions().setTimeout(100000); // 设置连接超时时间 这里是10S。如果为0则无限期等待wc.getOptions().setDoNotTrackEnabled(false);HtmlPage page wc.getPage(http://localhost:8080/strurts2fileupload/main.html);DomNodeListDomElement links page.getElementsByTagName(a);for (DomElement link : links) {System.out.println(link.asText() link.getAttribute(href));}}再看一下运行结果 完美解决HttpUnit其实就相当于一个没有UI的浏览器它可以让页面上的js执行完成后再抓取信息具体的介绍google一下就行。主要给大家介绍一种方案 如果你觉得这篇文章对你有用就顶一个~ 版权声明本文为博主原创文章未经博主允许不得转载。 转载于:https://www.cnblogs.com/dingxiaoyue/p/4924983.html