爬虫:自动获取网站数据的程序,关键是批量的获取
反爬虫:使用技术手段防止爬虫程序的方法
误伤:反爬技术将普通用户识别为爬虫,如果误伤过高,效果再好也不能用
成本:反爬虫需要的人力和机器成本
拦截:成功拦截爬虫,一般拦截率越高,误伤率越高
初级爬虫:简单粗暴,不管服务器压力,容易弄挂网站
数据保护:具有知识产权的数据
失控的爬虫:由于某些情况下,忘记或者无法关闭的爬虫
商业竞争对手:防止被对手爬走了数据
通过之前的执行流程图可以看到,Requests和Response之间有很多的Middleware,这个UserAgentMiddleware就是默认用来处理User-Agent的。
从源码可以看到,如果不在settings文件中定义USER_AGENT,那么就会使用默认的"Scrapy"
4.1 全局User-Agent
如果要定义全局默认的User-Agent,可以在settings.py文件中去定义
4.2 局部User-Agent
局部user-agent是在我们自己写的spider代码里面定义的,可以通过custom_settings来定义
4.3 fake-useragent(重点)
官方地址:https://github.com/hellysmile/fake-useragent
默认维护的User-Agent的链接:https://fake-useragent.herokuapp.com/browsers/0.1.11(后面是最新版本号)
4.3.1 安装模块
pip install fake-useragent
4.3.2 Middleware编写
4.3.3 settings配置
4.3.4 如何自定义生成的策略?
fake-useragent默认支持很多种的user-agent的生成方式,有如下类型:ua.ie、ua.opera、ua.chrome等
我们有的时候就想只生产chrome的user-agent,那如何动态切换配置了?
动态切换user-agent的生成策略
通过self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random"),可以读取配置文件的数据
通过get_ua()函数可以动态调用对应的方法,相当于:self.ua.self.ua_type,但是python语法是不支持这样调用的。所以我们通过get_ua()这个内部函数来实现
RANDOM_UA_TYPE这个是自定义配置,默认为random
以后如果想改成chrome或其他的,只需要更改settings中的这个配置即可
有些网站会限制同一个IP频繁爬取网站,这个时候就需要用到IP代理池了。
IP代理推荐:https://zhuanlan.zhihu.com/p/33576641
5.1 爬取代理IP
5.2 实现随机取代理IP
5.2.1 数据库设计
5.2.2 代码
5.2.3 Middleware中间件
5.2.4 settings配置
5.3 总结
我们在爬取网站的时候,总体还是要采用后面讲的限速的策略,不要爬的太快了,一定要珍惜自己的IP!
如果你想爬的更快的话,可以使用IP代理池进行爬取
5.4 其他好用的IP代理的实现
上面的代理IP都是爬取的免费的,免费的一般都不稳定,可以考虑一些付费的IP代理
5.4.1 scrapy-proxies
这个都是在settings文件中进行配置的,不支持数据库操作,所以可以自己对源码改一下。
官方地址:https://github.com/aivarsk/scrapy-proxies
5.4.2 scrapy-crawlera(收费)
这个是代理IP商提供的开源代码,但是使用他们的代理IP是收费的
官方地址:https://github.com/scrapy-plugins/scrapy-zyte-smartproxy
官方文档:https://scrapy-zyte-smartproxy.readthedocs.io/en/latest/
5.4.2 Tor(洋葱浏览器)爬取网站
洋葱浏览器可以使用代理隐藏自己的真实IP地址,常用于黑客使用,我们的python也可以操作Tor来爬取网站
文章:https://copyfuture.com/blogs-details/2020051818370565011ksvjjtfy8inp9
6.1 编码实现(tesseract-ocr)
这个识别准确度比较低,不太推荐使用
还可以使用之前我们写的opencv识别工具类:https://www.yuque.com/suifengbiji/kzz2hu/lufd1y#MKjYY
6.2 在线打码(推荐)
图鉴:图片识别-广告识别-目标检测-准快信息技术有限公司
超级鹰:超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大
打码兔:打码兔-手机打码平台 - 打码app,正规打码网站
6.2.1 超级鹰打码平台代码
1)工具类
2)识别超级鹰自己的登录验证码
6.3 人工代码
后面是真人在给你识别,价格最贵,但是识别率肯定是最高的
将Cookie禁掉,就不会在Requests中携带cookie了,那网站就无法跟踪,适用于不需要登录的网站。
我们可以在scrapy中的settings.py文件中做全局配置
也可以在我们具体的spider代码中做自定义配置custom_settings
中文文档:AutoThrottle 扩展 — Scrapy 2.5.0 文档
官方文档:AutoThrottle extension — Scrapy 2.11.2 documentation
主要是通过这个AutoThrottle扩展来实现限制速度,可以在settings文件中配置
也可以在spider代码中自定义配置custom_settings
8.1 介绍
8.2 代码
我是@王哪跑,关注我的工众号,持续分享python干货,各类副业技巧及软件!