Java_爬虫,如何抓取Js动态生成数据的页面?
很多网站是用js或Jquery 生成数据的,到后台获取到数据以后,用 document.write()或者("#id").html="" 的方式 写到页面中,这个时候用浏览器查看源码是看不到数据的。
求解答,其中典型的就是这个链接的页面,怎么能在java程序中获取其中的数据?
http://xinjinqiao.tprtc.com/admin/main/flrpro.do
HttpClient是不行的,看网上说HtmlUnit,说 可以获取后台js加载完后的完整页面,但是我按照文章上说的 写了 ,都不好使。一般的代码是这样写的:
String url = "http://xinjinqiao.tprtc.com/admin/main/flrpro.do"; try { WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10); //设置webClient的相关参数 webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setCssEnabled(false); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); //webClient.getOptions().setTimeout(50000); webClient.getOptions().setThrowExceptionOnScriptError(false); //模拟浏览器打开一个目标网址 HtmlPage rootPage = webClient.getPage(url); System.out.println("为了获取js执行的数据 线程开始沉睡等待"); Thread.sleep(3000);//主要是这个线程的等待 因为js加载也是需要时间的 System.out.println("线程结束沉睡"); String html = rootPage.asText(); System.out.println(html); } catch (Exception e) { }
其实根本不好使。
求解答,其中典型的就是这个链接的页面,怎么能在java程序中获取其中的数据?
http://xinjinqiao.tprtc.com/admin/main/flrpro.do
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
在神箭手云爬虫里开发爬虫,只需要勾选上js渲染就可以实现自动爬取js动态生成的数据了,很简单,你可以去试试:http://www.shenjianshou.cn/
点开firebug后再刷新下网页即可
同求,网上很多没有说明具体方法,用于获取js加载后的网页
看全部,不要只看HTML。控制台里也能看到AJAX的交互信息。
引用来自“tinshen”的评论
http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do?date=1406281728304&name=flr&nowpage=1&pagesize=100
你的方向错了。你应该抓取实际的数据源。而不那个显示页面。
我给你的地址就实际数据源。恭喜你页面大小你可以自己控制。
firebug可以完全的看到数据交互,你仔细的看firebug的请求路径就可以知道了。 如果你去到了后台的数据交互。 不就直接解析json不就完了,何必又要去再次通过HtmlUnit获取内容。不更麻烦了。 大部分的复杂交互都是有规律的。 找到顾虑了只要解析后台的返回数据就可以了。
引用来自“tinshen”的评论
http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do?date=1406281728304&name=flr&nowpage=1&pagesize=100
你的方向错了。你应该抓取实际的数据源。而不那个显示页面。
我给你的地址就实际数据源。恭喜你页面大小你可以自己控制。
引用来自“头号大宝贝”的评论
url:http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do?date=[timestamp]
post type:post
param: nowpage,pagesize,name
写个浏览器插件 根据DOM树自己生成源代码
url:http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do?date=[timestamp]
post type:post
param: nowpage,pagesize,name
帮顶下吧,我最近也遇到这个问题未解决。。。
赞
回复
这个就另一个技术了。httpclient有支持sesssion和cookies保持的方法。本身就是模拟一个完整的浏览器请求。 即使有验证码+用户验证等不是问题,因为程序就是模拟浏览器操作。
http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do?date=1406281728304&name=flr&nowpage=1&pagesize=100
你的方向错了。你应该抓取实际的数据源。而不那个显示页面。
我给你的地址就实际数据源。恭喜你页面大小你可以自己控制。