(急)HttpClient 抓取某个网站,网站采用JS和Cookie启用判定,抓取不了怎么解决

ALOSIN 发布于 2012/08/02 07:41
阅读 4K+
收藏 0
  采用HttpClient抓取某个网站,抓取首页时返回一个结果This site requires JavaScript and Cookies to be enabled. Please change your browser settings or upgrade your browser.
  就是要求客户端必须启用JavaScript和Cookie,有什么办法逃避检测么,坐等大牛来解决啊

以下是问题补充:

@ALOSIN:如果不是用HttpClient的话,直接用HtmlUnit应该就可以跳过这段验证的 (2012/08/02 14:48)
@ALOSIN:第一次抓取首页的代码如下,拜托大家支招啊 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> function setCookie(c_name, value, expiredays) { var exdate = new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie = c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toGMTString()) + ";path=/"; } function getHostUri() { var loc = document.location; return loc.toString(); } setCookie('YPF8827340282Jdskjhfiw_928937459182JAX666', '115.173.104.54', 10); setCookie('DOAReferrer', document.referrer, 10); location.href = getHostUri(); </script></head> <body> <noscript>This site requires JavaScript and Cookies to be enabled. Please change your browser settings or upgrade your browser.</noscript></body></html> (2012/08/03 02:12)
@ALOSIN:问题终于解决了,就在于第一次抓取数据时,如上返回的数据,根据该数据,只要给HttpClient设置好Cookie,再重新抓取就可以了 (2012/08/03 05:13)
加载中
0
leo108
leo108
服务器是没法判断你是否启用JS的。而判断COOKIE的话,应该是在首页的时候会发给你一个COOKIE,并且在其他页面判断是否有COOKIE,所以就得在COOKIE上入手,而不是User-agent
ALOSIN
ALOSIN
回复 @leo108 : 因为打开域名用抓包工具看了一下,主页打开了两次,第一次估计就是JS的拼接页面,第二次是真正的网页
ALOSIN
ALOSIN
回复 @leo108 : 估计就是这样做的
leo108
leo108
回复 @蒋伟 : 你查看下源代码,有种可能是网站内容都是由JS拼接起来的,最好能把网址发一下
ALOSIN
ALOSIN
我用本地浏览器试了一下,禁用JavaScript后访问那个网站,就出现一样的情况
0
红薯
红薯
设置一下 User-Agent 吧
红薯
红薯
回复 @蒋伟 : 这种一般要跟网站斗志斗勇的,下一个就是检查 cookie
ALOSIN
ALOSIN
回复 @红薯 : Firfox的USER_AGENT,发现这个情况后,我改IE的还是没用
红薯
红薯
回复 @蒋伟 : 很正常啊,人家检测你大量的抓取,肯定就限制了,user-agent 的值你设置成什么了?
ALOSIN
ALOSIN
而且昨天都没有这个问题,今天突然出现的
ALOSIN
ALOSIN
设置了的,通不过检测
0
红薯
红薯
另外除了 user-agent ,你还应该将网站发过来的 cookie 也传过去。
0
ALOSIN
ALOSIN

引用来自“红薯”的答案

另外除了 user-agent ,你还应该将网站发过来的 cookie 也传过去。
但是获取首页的话,我最开始肯定没有网站的Cookie的东西啊,而且HttpClient对于Cookie是自动处理嘛
ALOSIN
ALOSIN
回复 @红薯 : 只有斗志斗勇了 呵呵
红薯
红薯
那就不清楚了,继续研究吧,想抓别人东西就要付出点代价,呵呵:)
0
qycms_cn
qycms_cn
抓哪个站,我看看?
0
理工男海哥
理工男海哥

用httpclient接收网站传过来的cookie,然后请求的时候也传过去就行了。

出了cookie以外,可能还需要其他一些数据,可以模拟火狐的http头发送。

ALOSIN
ALOSIN
回复 @michaelY : 不是android环境
理工男海哥
理工男海哥
回复 @蒋伟 : httpClient,我不知道你是在哪个地方用的,如果是android,可以尝试用webview控件去加载,然后获取webview的内容(我没有试过,一种思路而已)。
ALOSIN
ALOSIN
我用本地浏览器试了一下,禁用JavaScript后访问那个网站,就出现一样的情况
0
Yisen
Yisen
抓包看,然后模拟发
0
Silencer
Silencer
看一下他js 的内容估计是js有问题
0
v
vipyami
告诉你们一个终极神器,用javafx的webview,直接用webview打开它的网站,然后执行js取它的内容传递到java里处理,用qt的qwebkit也是一样的道理。只会用httpclient抓是不行的,必须要驱动浏览器来抓,在服务器看来你就是一个正常用户在操作浏览器浏览。如果这样的话,服务器还真不知道如何才能分辨了,老@红薯有啥办法吗?
ALOSIN
ALOSIN
呵呵,是神器,但是太麻烦了
0
leo108
leo108
setCookie('YPF8827340282Jdskjhfiw_928937459182JAX666', '115.173.104.54', 10);
setCookie('DOAReferrer', document.referrer, 10);

我不知道HttpClient能不能自己设置cookie,应该是可以的……

你第一次抓首页的时候用正则把上面第一行的cookie内容抓下来,然后按照这个设置你的cookie内容,再次访问应该就可以了

返回顶部
顶部