python爬图片_网络爬虫经验:反爬和反反爬

我想很多人入门python是图片爬虫,就是HTTP请求,保存一下图片,用python实现非常快。网上很多爬虫的教程就讲到这里,实际上很单一,看了跟没看没什么区别,都是找一下网页的规律,然后BeautifulSoup解析一下网页,再使用request做HTTP请求,可能有些还用了多线程多进程,可是都没有考虑到反爬问题。很多有价值的数据都会有反爬,那么很多Python爬虫资料都没什么用。这里分享一下我听闻过的反爬和反反爬。

1 反爬:判断是否为浏览器(最初级反爬)

反反爬:伪造请求头headers,其实就是为User-Agent赋值。

2 反爬:弹出验证码

反反爬:

  • 手动输入验证码,就是将验证码图片下载到本地,然后通过PIL库显示一下,当爬虫遇到验证码时会显示出来,我们手动填一下。
  • 使用打码平台,将验证码对接到相应的打码平台,平台会帮我们输入正确的验证码,平台怎么输入正确验证码的呢?它其实就是租人来填,填多少个有相应的金额可以获取。
  • 使用Python的图像识别库,如PIL,对验证码图片进行处理,让词表库匹配一下,最后自动填写。

我有一个想法就是通过CNN卷积神经网络对验证码中的图片,将验证码图片分割成一个个的字符,获得足够多的字符就可以喂养给CNN,当做训练数据,CNN对图像识别的准确率还是很高的,有兴趣的人可以看看CNN识别手写字体MNIST数据集,目前我还没有这样弄过。

当然还有一些很变态的验证码,比如Google的验证码,要你找出图片中的店铺之类的,这个没想法,欢迎大神提点,对于滑动验证码已经有人做了比较成功的尝试。

3 反爬:需要登录才能获得想要的数据

要弄通这一个的反反爬我觉得有必要弄明白登录的一些知识,如cookies、session、token。

现在常见的就是session和token,因为将用户敏感信息存到cookies中非常不安全。

session其实非常简单,就是用户信息存到服务器中,将对应这个用户信息的唯一id发放给用户,一般存到cookies,理解了这种登录模式,使用反反爬就明确了,将自己正确登录后的cookies保存下来,放到爬虫的cookies中,每次请求都带上,那么服务器就会认为你是登录的用户。

token其实也不难理解,很多网站在用户登录成功后,会使用唯一的token来标识不同的用户,那么每次请求头中包含这个token就OK了,这里要注意一下token的格式。

4 反爬:JavaScript逻辑复杂化界面

很多时候界面的数据不是静态的,而是动态的,如通过ajax获得的数据,如果没有使用JavaScript来操作这些数据,那么我们自己访问这个ajax接口就可以获得数据了,那么有些网站,返回的数据非常奇怪,只有通过网站的JavaScript处理后,才是人看的数据,这就非常尴尬了,那么一般有两种方式

反反爬:

  • Python模仿JavaScript中的逻辑,因为都可以获得原始的数据,只是人家的数据通过JavaScript处理后才是正常的,那么我们可以使用python实现JavaScript中的逻辑,就可以获得数据了,当然这对JavaScript功底有一定的要求。
  • PhantomJS+Selenium,这个其实就没什么好说的了,就会利用自动测试,使用浏览器来获得数据,获得的这些数据都是经过对方JavaScript处理过的可用数据,就是有点慢,不适合分布式爬虫,当然有人说PhantomJS是可以被识别出来的。

5 反爬:基于用户行为

因为爬虫的数据非常快,那么一个用户不可能在一秒都没有就看完这个页面,所以认为你是爬虫,很多网站会对访问频率有个限制,如果你访问的太快,就会被认为不是一个人,那么测试出这个边界就比较重要了,有了边界,就可以最大效率的爬取网站

反反爬:

  • 模拟用户行为

用户平时怎么浏览,你就怎么做,比如访问速度慢点,或者没爬完一个界面,等个1分钟,这种方式的效率非常慢。

  • 多IP多账号

一种暴力却很有效的方式,通过多个IP来访问一个网站,这个IP挂了,立刻有另一个IP顶上,那么很多初学者会使用一些代理IP。

以上是我的一些经验总结,如有不足之处欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值