全部博文(2759)
分类:
2012-08-11 05:36:41
原文地址:网络爬虫简单策略 作者:laoliulaoliu
前几天同学问我,获取一个网站的资料是通过api调用好还是通过网络爬虫好,我说如果api可以满足需求那可以直接调api因为api是网站给你暴露的接 口,客服端开发起来方便,并且返回的数据好解析,只要按他的规则来就应该没什么大的问题,不要考虑策略去获取最新的资料,可有个很大的问题就是通过api 的调用完全受api服务器端限制,就和在中国上网一样,说哪个网站不上你上,那你通过合法的流程肯定是上不了的。
网络爬虫有个很大的好处,不太受服务器端的限制,你可以通过许多策略去绕过它,他们一般有以下可以做限制的:
1.通过ip限制。
2.通过cookie限制
3.通过加密算法加密请求的url
4.通过你请求的header限制
5.通过回答问题或验证码限制
6.欢迎补充
其中除了出现验证码,其他都可以破解,那我就简单介绍下我的策略吧!
对于单位时间访问过多,服务器端可能会给你的ip直接封死,有两个方法可以绕过这个规则,第一,给你请求的http设置代理,现在的代理ip比较多,不 过要慢慢找,很多都不能使用。第二个方法:大部分人用的是adsl上网,那adsl有一个很好的优点就是ip不是固定的,所以重启下路由就可以换个新的 ip了,不过要注意不要出现重启后还出现之前用的ip了!所以我们要给ip简单过滤下。
出现通过cookie限制的话,那你程序就一步一步的请求,最好不要跳步,如果用httpclient写的爬虫,那设置当请求时自动在请求体中加上cookie。
通过加密算法加密请求的url,那必须知道它的加密算法写在哪,比如说sina之前的邮箱加密算法写在js里面,并且比较复杂,那可以用java执行加密js生成结果,所以也不一定要搞懂它是怎么加密的,除非真正没其他办法,那只能看懂它的加密算法,再自己实现。
通过你请求的header限制是比较简单的限制,就是判断你请求的header是否符合要求,UA是否有,是否符合要求,host是否有......所以只要你请求时加上必要的header就行。
通过回答问题限制那就先好好分析它的问题,因为题库总是有限的,有点的题目本来就很简单,比如两数相加相减什么的,那可以用程序自动分析,自动执行。
最后有个最难的就是出现图片的一切验证,反正我是破解不了,那怎么办?一般出现验证码肯定影响用户体验,所以被抓去的网站肯定也不是很喜欢,但为了防止 一些非法请求还必须加上,所以出现验证码的大部分都是有原因的,哈哈...有点夸张,所以我们按正规的流程走是不会出现验证码的,所以要把爬虫写得像人请 求一样,那你就算成功了一大半了。
往往写网络爬虫要把几个策略一起使用,一点一点试服务器端的规则,绕过规则就是天堂。