java爬虫项目,如何获取js执行后的完整网页源代码?

barrychenzhipinglan 2012-05-08 02:42:00
java爬虫项目,如何获取js执行后的完整网页源代码?

一、问题描述:
现有一个java爬虫项目,需要获取网页中的javascript执行后生成的完整的网页源码(通常使用的右键-查看源代码是看不到js执行后的内容的,用firefox的firebug看到的代码就是js执行后的代码),从中提取一些有用的数据。目前用到的方案是SWT调用IE浏览器内核来执行网页并获取代码,这种方式有两个地方存在严重不足:

1.效率低下,且不够灵活。需要根据目标网站的效应速度和自身爬虫机器的网络情况来设置爬取的超时时间,这样一来抓取一个URL页面可能需要10-30秒不等的时间,非常的慢。

2.由于IE内核本身的不稳定性,在通过浏览器模式抓取的时候偶尔会出现内存泄露从而导致整个程序死掉的严重问题。

求助:
不知道有没有其他的可替代方案,如:通过java的脚本执行引擎执行js来获取网页代码,或者其他的方案。请各位大侠帮忙,感激不尽!
...全文
80157 179 打赏 收藏 转发到动态 举报
写回复
用AI写文章
179 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_21927185 2015-01-08
  • 打赏
  • 举报
回复
不知道有没有人知道这个问题,我也一直在纠结。已经好几个月了都没找到答案
healer_kx 2014-12-24
  • 打赏
  • 举报
回复
那你说的就不是爬虫了,而是浏览器了。。。 假如说,人家JS,写得是setTimeout(...., 100000, 你也要等到10000后得到全部内容吗? 所以你的想法不合适,你可以分析它的页面,用到了哪些js去ajax它要的数据,你直接调用ajax的url就行了。
cofoman 2014-12-24
  • 打赏
  • 举报
回复
我也研究这个问题好久,写点心得。 首先,js执行后的网页源代码本身就不可能是一个静态的东西,会根据时间、事件不停发生变化,所以本来就不可能有完美的解决方案。我想找的只是一个估计时间内,页面相对稳定的时候,不发生更多的事件的时候去得到页面,类似与firefox、chrome在开发模式下看到的那种。 htmlunit本来是个好东西,但是跑js确实出错太多,不忍直视。 selenium现在需要webdriver来跑,要显示出来,不适合后台爬虫的抓取。 jsoup实在能力有限,页面没这么标准的,好多网站页面报一大堆错,根本没法用。 直接分析页面请求就更不靠谱了,现在主流网站那个不是几秒钟就上百个请求,参数千奇百怪。 一直想找浏览器的开放内核来做,理论上这样最靠谱,但是maven,git里面都没有找到这种东西,哪位大神如果找到了请分享。
Akkadian 2014-12-14
  • 打赏
  • 举报
回复
jsoup ,httpunit不能解决不标准的js加载问题,还是不行
lliiqiang 2014-12-01
  • 打赏
  • 举报
回复
URLConnection
哆啦too萌 2014-11-27
  • 打赏
  • 举报
回复
真心求一个高性能高效率能抓取js加载的页面的工具,htmlunit的后台异常实在蛋疼,而且时间等待也太久了吧
shuai007 2014-10-08
  • 打赏
  • 举报
回复
引用 170 楼 welcomesino 的回复:
哈哈,httpclient是可以搞定的,我已经抓取到了,也是异步数据,直接找异步请求能拿到数据,很简单的
http://bbs.aliyun.com/read/169222.html?displayMode=1 有没有遇到这样的情况,我用HtmlUnit、Jsoup或是直接读取流再用Jsoup读取,在eclipse下自己测试、或是部署在windows环境下都是可以正常读取商品数据的,但是部署在阿里云的centos下却有问题,不知道大家有没有碰到这样的问题?
0 1看天下 2014-09-03
  • 打赏
  • 举报
回复
哇 好多人在关注这方面的问题啊
welcomesino 2014-09-03
  • 打赏
  • 举报
回复
哈哈,httpclient是可以搞定的,我已经抓取到了,也是异步数据,直接找异步请求能拿到数据,很简单的
shark_二等 2014-08-08
  • 打赏
  • 举报
回复
这么久了没人回答出来
Hobootu 2014-08-01
  • 打赏
  • 举报
回复
1、使用webdriver。
hello_逗比 2014-07-29
  • 打赏
  • 举报
回复
数据从哪来?一定是服务器send回来的,所以找到请求的url,分析传参,然后模拟请求就可以获得自己需要的数据了,异步的话send回来的一般都是json,格式更友好。
阿飞的蝶 2014-07-29
  • 打赏
  • 举报
回复
引用 150 楼 lmj623565791 的回复:
刚好写过这样的博客:http://blog.csdn.net/lmj623565791/article/details/23866427
这个貌似可以,顶一下。学习了!
zy_think123 2014-07-29
  • 打赏
  • 举报
回复
楼主,可以看看jsoup,crawel-commons等开源作品
  • 打赏
  • 举报
回复
现在的问题是htmlutil的异常问题是否能够有好的解决方案 如果没有好的解决办法,使用内嵌浏览器也是一个办法,缺点是有多余的性能损失
illbehere 2014-07-28
  • 打赏
  • 举报
回复
还没有人弄出来吗,大神们求贴代码啊
lihongyu65085 2014-07-18
  • 打赏
  • 举报
回复
不知道怎么搞
ly_sr 2014-06-08
  • 打赏
  • 举报
回复
引用 133 楼 hxqchan 的回复:
对于js代码获取问题可以转化为找对应的url,即每个js代码数据获取均是从服务端返回。因此只要找到对应的url即可获取js数据。url的获取可以利用Firebug插件或者是Fiddler工具查看
有的网站,部分数据是js post的方式,怎么解?
以夕阳落款 2014-06-07
  • 打赏
  • 举报
回复
菜鸟一只,想解析html
tjsky00010100 2014-06-07
  • 打赏
  • 举报
回复
引用 158 楼 dxqrr 的回复:
htmlunit貌似可以,LZ研究好了,发篇博文哈
博文发了没,给个地址,感谢
加载更多回复(149)

62,636

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧