python爬虫遇到封IP+验证码+登陆怎么办?我的破解技术分享
最近在在利用python网络爬虫技术从事数据聚合技术研发工作,刚开始主要是聚合工商的企业数据源、专利网的数据源、裁判文书网的数据源。做数据聚合研发首先的技术是Python,因为Python具有很多强大的现存的库可以直接用的,比如: 图像识别库、requests库等,下面就关于 模拟请求爬取天某查的整套架构设计+核心代码分享给大家,主要是解决大家在写python爬虫过程中遇到验证码问题、封IP问题、分页爬不完问题、还有爬取的效率和速度问题。
做大数据,首先应该评估一下数据量有多大,比如当时我爬的天某查应该是千万级上亿级的数据,我们需要做一个大数据架构来支撑这个亿级的数量存储和爬取工作,免得到时数据大了都动不了,反而就是这个灾难,下面是整体架构图:
原始库:数据库我们实现读写分离的简易架构,python爬虫不断的把数据采集下来并且写入到原始数据库,写入的时候不用做去重的判断,因为如果您在写入的时候就判断是否存在再去入库,那么当一个表里面有几千万的数据你逐个去匹配去重时候 速度是非常慢的,几十分钟你才能成功插入一条新的数据,所以这个时候我们就应该把判断去重的工作交付给异步清洗处理,尽可能让采集新数据的工作压力越小越好,这样采集的速度就很快,爬虫就负责一直采集入库即可。
标准库:我们中间会有一个数据清洗过程,数据清洗其实很简单,就是把原始库的数据异步复制到标准库中,只是在复制插入到标准库的过程中先判断标准库是否已经存在该条数据了,如果存在就更新之前没有的字段,如果不存在就直接插入库一条。
数据清洗:我们一程序实现数据库复制和判断去重的,把原始库的数据复制一份到标准库后,立刻把原始库的意见清洗过的数据删除掉,为什么需要删除掉原始库已经清洗过的数据呢?因为如果不擅长,那么原始库越来越大,以后每次清洗数据量越来越大而且都是重复清洗,导致清洗工作重复和压力大。
代理IP池:也许您会问这个代理IP池是做什么,又是怎么实现的呢?我们在爬网站的时候,需要用代理ip不能用我们自己电脑的IP去爬,原因是在你电脑直接运行代码那么爬虫的IP就是你电脑的IP ,如果一直频繁的去采集对方的网站,那么对方会检测到您的IP直接把您的IP列入黑名单导致你以后在也采集不了了。所以我所有的批量采集爬虫都采用代理IP去爬的,python怎么采用代理IP呢?其实很简单就那么一行代码就解决:
resp = requests.get(url, headers=self.headers, timeout=20, proxies=proxy)
我们调用的是 requests的get方法 里面有url、和headers以及 , proxies代理IP设置的参数。