0
点赞
收藏
分享

微信扫一扫

爬虫实战:百度失信人名单


文章目录

  • ​​失信人信息爬虫项目​​
  • ​​1. 需求​​
  • ​​2. 开发环境​​
  • ​​3 抓取百度失信人名单​​
  • ​​3.1. 实现步骤:​​
  • ​​3.2 创建爬虫项目​​
  • ​​3.3. 根据需求, 定义数据模型​​
  • ​​3.4 实现百度失信名单爬虫​​
  • ​​3.5. 保存失信名单信息​​
  • ​​3.6. 实现随机User-Agent和代理IP下载器中间件, 解决IP反爬.​​
  • ​​4. 实现抓取最高人民法院失信人名单爬虫​​
  • ​​5. 国家企业信用公示系统爬虫​​
  • ​​5.1 分析,测试: 确定失信企业信息的请求​​
  • ​​5.2 创建爬虫, 完善爬虫​​

失信人信息爬虫项目

1. 需求

  • 1.1 抓取​​百度​​失信人名单
  • 1.2 抓取​​最高人民法院​​失信人名单
  • 1.3 抓取​​企业信用信息公示系统​​失信人公告
  • 1.4 把上面三个来源的失信人信息进行合并,去重
  • 对于个人:
  • 根据失信人证件号码, 检查一下, 如果不存在才插入.
  • 对于企业/组织:
  • 区域 和 企业名称进行检查, 如果有就重复了, 没有才插入.

2. 开发环境

  • 开发语言: Python3
  • 技术选择:
  • 爬虫框架: 使用​​scrapy​​框架,
  • 数据解析: json, re(正则表达式)
  • 存储使用: ​​mysql​
  • js反爬处理: ​​js2py​

3 抓取百度失信人名单

3.1. 实现步骤:

  • 创建爬虫项目
  • 根据需求, 定义数据数据模型
  • 实现百度失信名单爬虫
  • 保存失信名单信息
  • 实现随机User-Agent和代理IP下载器中间件, 解决IP反爬.

3.2 创建爬虫项目

  • ​scrapy startproject dishonest​

3.3. 根据需求, 定义数据模型

3.4 实现百度失信名单爬虫

  • 3.4.1 分析网站, 确定URL/URL列表
  • URL:https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=6899&query=失信人&pn=10&rn=10&ie=utf-8&oe=utf-8
  • 请求方法: GET
  • 参数/data:
  • resource_id=6899 资源id, 固定
  • query=失信人: 关键字, 固定
  • pn=10 索引号
  • rn=10 固定是10
  • ie=utf-8&oe=utf-8: 用于指定编码, 固定
  • 请求头

headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
'Referer': 'https://www.baidu.com/s?ie=UTF-8&wd=%E5%A4%B1%E4%BF%A1%E4%BA%BA'
}

  • 返回数据的格式: json
  • 如何实现翻页:
  • dispNum: 100000 总的数据条数
  • listNum: 2000 总页数
  • resNum: 50 每页数据条数
  • 3.4.2. 实现爬虫
  • 设置默认请求头, 在​​settings.py​​文件中
  • 创建爬虫 ​​scrapy genspider baidu baidu.com​
  • 完善爬虫:
  • 起始URL
  • 生成所有页面的请求
  • 解析页面, 提取需要的数据

3.5. 保存失信名单信息

  • 创建数据库, 创建表
  • 在settings中配置数据库信息
  • 实现管道类
  • 在open_spider中, 建立数据库连接, 获取操作的数据的cursor
  • 在close_spider中, 关闭cursor,关闭数据库连接
  • 在process_item中, 如果数据不存在, 保存数据;
  • 在settings.py中开启 管道

3.6. 实现随机User-Agent和代理IP下载器中间件, 解决IP反爬.

  • 实现随机User-Agent下载器中间
  • 实现代理IP下载器中间件
  • 在settings.py中开启, 并配置重试次数

4. 实现抓取最高人民法院失信人名单爬虫

  • 4.1 分析页面, 确定URL
  • URL:http://jszx.court.gov.cn/api/front/getPublishInfoPageList
  • 请求方法: POST
  • 请求数据:
  • “pageSize”: 10, 一页多少条数据
  • “pageNo”: 2, 当前页号
  • 请求头:

headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
}

  • 响应的数据格式:
  • json格式的字符串
  • 如何实现翻页:
  • “pageCount”:2360
  • 4.2 创建爬虫
  • 4.3. 完善爬虫
  • 构建起始URL
  • 获取总页数, 构建所有页面请求
  • 解析页面数据
  • 4.4 完善管道, 实现数据去重
  • 分析: 百度18位证件号的格式:
  • 把18位证件号的倒数第7到倒数第4位(不包含), 三个数字使用了​​****​​ 替换掉了
  • 处理: 如果证件号是18位, 那么就倒数第7到倒数第4位(不包含), 三个数字使用了​​****​​ 替换掉

5. 国家企业信用公示系统爬虫

5.1 分析,测试: 确定失信企业信息的请求

  • 确定获取数据的URL
  • 请求的URL: http://www.gsxt.gov.cn/affiche-query-area-info-paperall.html?noticeType=21&areaid=100000&noticeTitle=&regOrg=110000
  • 请求方法:POST
  • 请求参数:
  • noticeType: 21: 通知类型, 固定值
  • areaid: 100000 固定值
  • noticeTitle: 搜索公告标题, 可以为空
  • regOrg: 110000 省份ID
  • 请求体数据:
  • draw: 4 点击分页按钮的次数
  • start: 0 数据的开始索引
  • length: 10 每页多少条数据
  • 返回数据格式:
  • json格式的字符串
  • 测试数据的请求
  • 请求参数:
  • 请求体数据:
  • start: 起始索引号
  • length: 10 每页多少条数据
  • 请求头:
  • User-Agent
  • Cookie
  • 每一个Cookie信息, 都绑定了一个User-Agent和IP地址
  • 解决传递cookie问题
  • 确定必须传递的cookie:
  • __jsluid:
  • SECTOKEN
  • __jsl_clearance
  • 确定cookie来源:
  • __jsluid: 第一次请求服务器(521), 服务器设置的
  • SECTOKEN, JSESSIONID 第二次请求服务器, 服务器设置的
  • __jsl_clearance: 通过js生成的
  • 总结:
  • 获取requests中,发送请求session对象
  • 给index_url发送请求
  • 解析js, 生成需要cookie信息:
  • 提取响应中js
  • 把 ​​{eval(​​​ 替换为​​{code=(​
  • 获取js2py中的js执行环境
  • 执行替换后的js, 从js执行环境中, 获取code变量中的js
  • 从上面的js中提取出来生成cookie的js
  • 把document相关代码替换为 ​​r"var \1='http://www.gsxt.gov.cn'"​
  • 执行替换后的代码, 生成cookie信息.
  • 把该cookie信息, 设置给session的cookie, 再次发送请求, 获取其他cookie信息
  • 后面就可以使用这个cookie信息发送公告信息的请求了.

5.2 创建爬虫, 完善爬虫

  • 创建爬虫
  • 修改原来的随机User-Agent, 和随机代理的下载器中间件类, 如果是​​公示系统​​爬虫直接跳过.
  • 实现专门用于处理​​公示系统​​爬虫cookie的中间件
  • 实现生成cookie的脚本
  • 创建​​gen_gsxt_cookies.py​​​文件, 在其中创建​​GenGsxtCookie​​的类
  • 实现一个方法, 用于把一套代理IP, User-Agent, Cookie绑定在一起的信息放到Redis的list中
  • 实现一个run方法, 用于开启多个异步来执行这个方法.
  • 实现公示系统中间类
  • 实现process_request方法, 从Redis中随机取出Cookie来使用; 设置给request对象
  • 实现process_response方法, 如果响应码不是200 或 没有内容重试
  • 在setting.py文件件中配置
  • 注意; 这个配置信息一定要靠前, 可以设置为10.
  • 5.2.4 完善爬虫
  • 解析页面中的城市名称和id, 构建公告信息的请求
  • 解析失信企业公告信息
  • 在下载中间件中设置不要重定向

# 设置不要重定向
request.meta['dont_redirect'] = True


举报

相关推荐

0 条评论