Python爬虫实战--Day04

失信人信息爬虫项目

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
    

    (说明:后面会把文档和代码放到网盘,自取即可。下面是我的个人公众号,平时分享一些心得吧,大家有兴趣可以关注一下。后台回复关键词【爬虫】)在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ON.LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值