Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4558788
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: 网络与安全

2012-08-09 16:35:03

文章来源:http://alexchan.iteye.com/blog/1512996

    前几天同学问我,获取一个网站的资料是通过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就行。


   通过回答问题限制那就先好好分析它的问题,因为题库总是有限的,有点的题目本来就很简单,比如两数相加相减什么的,那可以用程序自动分析,自动执行。


   最后有个最难的就是出现图片的一切验证,反正我是破解不了,那怎么办?一般出现验证码肯定影响用户体验,所以被抓去的网站肯定也不是很喜欢,但为了防止 一些非法请求还必须加上,所以出现验证码的大部分都是有原因的,哈哈...有点夸张,所以我们按正规的流程走是不会出现验证码的,所以要把爬虫写得像人请 求一样,那你就算成功了一大半了。


   往往写网络爬虫要把几个策略一起使用,一点一点试服务器端的规则,绕过规则就是天堂。


转载请注明来自于:http://alexchan.iteye.com/blog/1512996


阅读(934) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~