网络爬虫,java语言写的,爬不到正确的网页源码,百思不得其解,不知问题症结在哪里?求助爬虫前辈们

进击的小矮人 发布于 2017/01/08 11:18
阅读 1K+
收藏 3

@黄亿华 你好,想跟你请教个问题:

有幸发现了这个网站,拜读了大神们关于网络爬虫的博客,受益良多。

作为爬虫方面的小白,眼下我也正在开展爬虫的一个工作内容(用的java语言),遇到个难以理解的问题,百度、q发帖等多方渠道求助无果,特意向大神请教一下,希望不会占用太多时间。

我想爬取网页上的数据,想先爬到网页源码保存到本地,然后用正则表达式抽取数据。但是有些网页的源码爬取不到,不知为何,java中的httpURLConnection、webmagic、jsoup都试过了,结果都一样。爬到的源码如下:

【问题】网页上是能够看源码的,但是不能正确地把源码下载保存到本地,想请教大神,这是什么原因?

<html><head></head><body><noscript><h1><strong>请开启JavaScript并刷新该页.</strong></h1></noscript><script type="text/javascript">eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>32?String.fromCharCode(c+32):c.toString(33))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('15 D="k";15 1a="i";15 1b="l";15 11=d;15 F = "e+/=";J g(10) {15 U, N, R;15 o, p, q;R = 10.S;N = 0;U = "";17 (N < R) {o = 10.s(N++) & 6;O (N == R) {U += F.r(o >> a);U += F.r((o & 1) << b);U += "==";n;}p = 10.s(N++);O (N == R) {U += F.r(o >> a);U += F.r(((o & 1) << b) | ((p & 5) >> b));U += F.r((p & 4) << a);U += "=";n;}q = 10.s(N++);U += F.r(o >> a);U += F.r(((o & 1) << b) | ((p & 5) >> b));U += F.r(((p & 4) << a) | ((q & 3) >> c));U += F.r(q & 2);}W U;}J H(){15 16= 19.Q||B.C.u||B.m.u;15 K= 19.P||B.C.t||B.m.t;O (16*K <= 8) {W 14;}15 1d = 19.Y;15 1e = 19.Z;O (1d + 16 <= 0 || 1e + K <= 0 || 1d >= 19.X.18 || 1e >= 19.X.M) {W 14;}W G;}J h(){15 12 = 1a+1b;15 L = 0;15 N    = 0;I(N = 0; N < 12.S; N++) {L += 12.s(N);}L *= 9;L += 7;W "j"+L;}J f(){O(H()) {} E {15 A = ""; A = "1c="+g(11.13()) + "; V=/";B.w = A; 15 v = h();A = "1a="+g(v.13()) + "; V=/";B.w = A; 19.T=D;}}f();',59,74,'0|0x3|0x3f|0xc0|0xf|0xf0|0xff|111111|120000|19|2|4|6|7|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|HXXTTKKLLPPP5|KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU|QWERTASDFGXYSF|RANDOMSTR3936|WZWS_CONFIRM_PREFIX_LABEL7|/|STRRANDOM3936|body|break|c1|c2|c3|charAt|charCodeAt|clientHeight|clientWidth|confirm|cookie|cookieString|document|documentElement|dynamicurl|else|encoderchars|false|findDimensions|for|function|h|hash|height|i|if|innerHeight|innerWidth|len|length|location|out|path|return|screen|screenX|screenY|str|template|tmp|toString|true|var|w|while|width|window|wzwschallenge|wzwschallengex|wzwstemplate|x|y'.split('|'),0,{}))</script></body></html>

加载中
0
aabbccli
aabbccli
应该是页面需要JS渲染才能正常获取,可以用SELENIUM + PHANTOMJS来获取试试,最好贴出你要爬的网址,让同学们帮你瞅瞅
0
loyal
loyal
执行掉这个js不就完了?用java.
0
进击的小矮人
进击的小矮人

引用来自“aabbccli”的评论

应该是页面需要JS渲染才能正常获取,可以用SELENIUM + PHANTOMJS来获取试试,最好贴出你要爬的网址,让同学们帮你瞅瞅

@aabbccli

谢谢指点。网址是:http://www.pbc.gov.cn/

0
进击的小矮人
进击的小矮人

引用来自“loyal”的评论

执行掉这个js不就完了?用java.

@loyal

您是说用java模拟js的执行过程吗?还是有其他的方法?

[小白接触爬虫不久,正在奋力学习中,还请大神多多指点]

x
xanm123456
111111111
x
xanm123456
回复 @loyal : 不是模拟,是用java执行这段js,得出的结果再进行跳转或cookie赋值.js有部分需要修改才能用java调用..不是模拟,是用java执行这段js,得出的结果再进行跳转或cookie赋值.js有部分需要修改才能用java调用..
x
xanm123456
水水水水水水水
x
xanm123456
回复 @loyal : 威威威威威威威威
进击的小矮人
进击的小矮人
回复 @loyal : 好,我先试一下,可能还会请教您呢。谢谢您的指点。
下一页
0
大賢者
大賢者
网站 http头 自己比较下,有的比如agent作过滤,防爬虫bot
0
马云的同学
马云的同学

有些网站是js动态生成,webmagic、jsoup什么的确实搞不定,你可以用htmlunit试试,一般是没问题的,我之前用过,会模拟浏览器运行,不过速度可能相对慢了一点。

x
xanm123456
阿斯顿发射点
0
进击的小矮人
进击的小矮人

@xanm123456,@马云的同学,@styleman,@loyal

感谢大家的关注和不嫌弃,已经解决了,确实是js渲染的原因,最后用selenium解决的【特别感谢@aabbccli    提到用selenium,不然还云里雾里的呢】。这期间,认真研读了@黄亿华     的博客内容,献上头盖骨膜拜一下

关于源码,相信osChina上已经有很多优秀的代码,就不班门弄斧了。代码目前只能实现基本功能,还谈不上效率,如果有同为爬虫小白的道友需要参照,可以私信。[多多交流,共同进步]

进击的小矮人
进击的小矮人
回复 @loyal : 连续爬取多个网页是有点慢,不知道是不是代码没有优化的缘故,也可能是您说到的selenium本身的原因。我再看看。
进击的小矮人
进击的小矮人
回复 @loyal : 谢谢分享。刚接触爬虫,目前还没有涉及到太深。可以持续关注。
loyal
loyal
在批量化或无界面的情况下,SELENIUM 显然不可取.
返回顶部
顶部