沃保网爬虫(一)python爬取沃保网中国人寿、中国平安保险代理人微信号等个人信息

xiaoxiao2021-02-28  34

下图爬取沃保网平安保险公司和中国人寿保险公司皇冠会员和钻石会员微信号等个人信息

保存在mysql数据库中大概是这样形式,

开发环境:

乌班图、pycharm、mysql、redis、mongodb、python3

爬虫技术:

requests、redis加密对数据去重、xpath、os模块、保存csv、mysql、保存mongodb、保存二维码图片、面向对象写法

0、目标网站分析(找到post 接口URL和post参数)

找代理人,下面有旗舰会员、皇冠会员、诚信宝会员,本文爬皇冠和诚信保里面的代理人信息,接口大家看下,都一样

1、框架和库

etree:将相应的代码转成xpath可以提取的结构

pymongo: python 操作mongodb

pymysql: python操作mysql

os : 保存图片

hashlib: 对字段加密,增量爬虫用到

retry: 如果请求失败,可以设置最大请求次数

2、创建一个类,并初始化数据(网站是post请求,需要带data)

headers、post请求数据、初始化csv文件、创建数据库连接对象

3、最大重复请求3次,增加程序健壮性

4、获取数据列表

(具体提取方式请根据post请求URL查看前端代码,这一步必须动手操作,如果不动手,会永远停留在眼高手低的地步)

5、返回con_list列表、构造下一页URL和data数据

(注意:所有请求post URL都一样,不一样的是传的data数据,主要还是构造data数据)

6、获取展业证号

因为展业证号对应的详情页有多种页面结构,所以需要根据页面中特有的信息做一些判断,选择合适的提取方式提取

7、构造增量式爬虫

利用hashlib对提取的名字信息生成哈希加密指纹,并利用redis的集合数据类型,保存加密字段,如果程序第二次爬取到数据,将该数据的加密字段sadd保存到redis,如果能sadd加入进去,则返回值是1,如果不能sadd保存,则返回值是0(作用:实现根据姓名字段判断到数据库是执行更新操作还是增加操作,也即增量含义)

8、保存mysql

根据res返回值,是1还是0,对应执行增加insert操作和更新update操作

同时分表存储,我这边建了两个表zgrs和zgpa,如果是新数据,并且公司名称是中国人寿,则保存在zgrs表中,如果不是中国人寿,则保存在pabx中,该步分表可以根据实际需求来做,数据量少的话不需要分表,数据量大的话可能会有分表需求

9、保存到mongodb数据库(各种保存方式我都会写一遍过程,也许你当下知识储备不够不理解代码,但是你看一遍先有个印象,如果遇到类似保存的,你可以直接翻阅我的文章找到对应方法)

10、保存到CSV(保存CSV关键用到逗号分隔符,所以需要用到","join方法)

11、保存二维码图片,读取图片二进制内容,再写入文件,文件名自己手动构造成公司_等级_姓名_城市格式

11、运行方法,自动判断是否有下一页,如果下一页的请求URL不为none,则继续递归请求

整个文章爬取思路至此结束,具体细节希望大家能动手去做一下,领悟中间特别是请求数据的构造,分页,增量爬虫的思路,希望大家能体会,另外该涉及一些细节技术,比如mysql如何建表,数据保存mysql的简单方法,数据保存CSV的简单方法,等等,仍会继续出一些优惠精简的方法,欢迎持续关注

该篇文章不明白的留言,源码已经上传知识星球(左侧为知识星球,右侧二维码为微信公众号)

           

转载请注明原文地址: https://www.6miu.com/read-2624660.html

最新回复(0)