python爬虫-分布式网页爬数据-破解验证码-破解封IP-采集分页经验分享

python爬虫-从零教您做大数据爬虫-天某查-破解验证码+封IP+分页问题-核心代码
一、问题描述

(1)、爬天某查的时候 对方封得很厉害,如何破解他们的反爬机制?

(2)、爬天某查的时候,IP封得太厉害了,怎么解决啊封掉ip问题?

(3)、爬天某查的时候,出现验证码怎么解决

(4)、爬天某查的数据存储用什么数据库好一点?

(5)、如何下载公司logo等相关的图片到本地来呢?

(6)、如何进行数据清洗、数据提炼

(7)、爬天某查用什么框架最好呢?
二、问题总结

经过这几年从事的数据挖掘技术工作,我们知道做人工智能需要大数据为基础,现在很多企业都做大数据的挖掘工作,导致我们的很多工程师同事不断的需要学习数据挖掘技术,需要做大数据就需要解决的是数据源,成千上万的数据源如果光靠人工去搜索一条一条的去添加,那么这肯定是100年后中国都多无法实现大数据腾飞梦想,在目前互联网开放的背景下,政府实现云政府、企业实现云端数据、很多数据其实早就分散存储在互联网的各个节点上的,比如分散在企业官网上、政府网上、电商网上、社区网上、微博网上等等,我们如果要做大数据只要把目前分散在互联网上的各种数据通过数据挖掘技术把这些数据挖掘出来然后整合提炼分析就可以得到有价值的数据,最终形成大数据,下面就关于大数据挖掘技术分享一些实战经验给大家,我们目前比较流行的数据挖掘技术的开发语言就是python,因为python拥有非常完整的各种库可以直接使用,比如: 图像识别库、requests库等等,下面就关于 模拟请求爬取天某查的整套架构设计+核心代码分享给大家,主要是解决大家在写python爬虫过程中遇到验证码问题、封IP问题、分页爬不完问题、还有爬取的效率和速度问题。
三、IT大咖-分享的解决方案

1、天某查-爬虫大数据整体架构:

我们做天某查这种数据爬取的数据,首先应该评估一下数据量有多大,天某查应该是千万级上亿级的数据,我们需要做一个大数据架构来支撑这个亿级的数量存储和爬取工作,免得到时数据大了都动不了了反而就是这个灾难,下面是整体架构图:

原始库:数据库我们实现读写分离的简易架构,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设置的参数。

url:就是我们采集的目标网站地址

headers:就是我们模拟访问对方网站时候需要模拟的头参数(这个参数怎么来呢,其实很简单,直接用火狐打开对方网站 查看网络里面有和请求头 那些参数复制过来即可)

Proxies:就是我们的设置我们的代理IP,代理IP是什么意思呢?代理服务器的工作机制很象我们生活中常常提及的代理商,假设你的机器为A机,你想获得的数据由B机提供,代理服务器为C机,那么具体的连接过程是这样的。 首先,A它与C机建立连接把请求发给C,C机接收到A机的数据请求后马上与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理任务。这样下载对方网站的数据的是代理服务器,而这个代理服务器IP是随机变动,对方就抓不到是谁一直采集他的数据了。那这个代理ip我们清楚了,这个ip代理池又是什么呢?我们运行我们的python程序的时候,每秒发一个http请求去爬对方网站一次,请求一次需要一个IP,那么这个ip怎么来呢?我们可以网上购买第三方那种ip接口,比如:每10秒中会返回1个IP给我们用,如果我们每次爬数据都先要调取代理IP接口得到IP了再去爬对方网站 那么这个效率和代码质量就低了,因为人家是10秒中才一个IP,您的程序速度和效率就直接卡在因为代理IP接口控制问题了,所以这个时候您需要改进代理IP代码架构,首先每10秒中读取代理IP接口得到的IP 缓存到reis去,并且设置60秒过期,那么这个redis就会形成一个代理IP池了,您的程序代码爬对方网站时候直接从redis读取IP去爬,这样速度就快了,程序架构就优化了。

2、模拟请求天某查-爬虫源代码:

下面我把天某查爬虫核心源代码分享给大家。时间有限先分享到这里,欢迎对高端爬虫技术交流感兴趣朋友加我qq2779571288交流

猜你喜欢

转载自blog.51cto.com/13949322/2167959