爬虫实战:百度失信人名单(代码片段)

传智教育官方博客 传智教育官方博客     2023-02-04     389

关键词:


失信人信息爬虫项目

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
    

使用sparksql探索“全国失信人数据”

“全国法院失信被执行人名单”,网址:http://shixin.court.gov.cn/,可供查询,用于惩罚失信人员。数据量有100多万,也算是大数据了。其中身份证号已被处理,并不能直接看到全部号码。本人承诺不将此数据... 查看详情

爬虫实战斗鱼直播(你想看的都有呀!)(代码片段)

Selenium实战:斗鱼直播前言1.获取数据2.解析数据3.自动翻页4.保存数据5.完整代码6.效果展示前言斗鱼直播—每个人的直播平台闲着没事儿,看起斗鱼的游戏直播了,感觉挺有意思,就想着看看目前有多少人在直播&#... 查看详情

python爬虫实战,scrapy实战,抓取并分析天气数据(代码片段)

前言利用Python“简单地”抓取并分析一下天气数据。补充一下之前数据可视化的空白。开发工具**Python版本:3.6.4相关模块:PIL模块;requests模块;pyecharts模块;以及一些Python自带的模块。环境搭建同Python简单分析微信好友。主要... 查看详情

爬虫——三个小实战(代码片段)

贴吧爬取写代码前,构思需要的功能块;写代码时,把各个功能模块名提前写好初始化初始化必要参数,完成基础设置爬取百度贴吧lol吧:爬取地址中的get参数须传递(可以指定不同主题的贴吧和页码)主题名初始网址请求头生成... 查看详情

python爬虫实战爬取5k分辨率超清唯美小姐姐壁纸(代码片段)

目录简介使用教程编写思路演示图片全部代码简介壁纸的选择其实很大程度上能看出电脑主人的内心世界,有的人喜欢风景,有的人喜欢星空,有的人喜欢美女,有的人喜欢动物。然而,终究有一天你已经产... 查看详情

同一个人在同一法院被两次曝光失信被执行人名单合理吗?

同一个人被同一法院失信曝光被执行人名单两次,可能是不同的事件吧,或许第一次是有期限的后来才又曝光一次的,如果时间不同,期限不同那么曝光两次是合理的参考技术A合理。应该涉及两个案件,欠贷不还,借他人的钱... 查看详情

怎么知道自己有没有上失信黑名单?查征信到哪查?

怎么知道自己有没有上失信黑名单?查征信到哪查?查询自己是不是征信黑名单的方法为:1、携带个人有效身份证件去当地的中国银行营业网点,填写申请表之后可以查询个人征信,在个人信用报告上可以查看有没有不良信用... 查看详情

python爬虫实战-性感gif图数据采集(代码片段)

...gif图片,满满的都是全是爱,作为一个合格的小爬虫,不把它都放进‘作业’文档里怎么行爬取目标网址:GIF出处工具使用开发工具:pycharm开发环境:python3.7,Wind 查看详情

python爬虫实战,scrapy实战,大众点评爬虫(代码片段)

前言爬一波大众点评上美食板块的数据,顺便再把爬到的数据做一波可视化分析开发工具Python版本:3.6.4相关模块:scrapy模块;requests模块;fontTools模块;pyecharts模块;以及一些python自带的模块。环境搭建安装python并添加到环境... 查看详情

python实战高校数据采集,爬虫训练场项目数据储备(代码片段)

在制作爬虫训练场项目时,需要准备大量的数据,供大家学习使用,本系列博客用于数据储备。文章目录示例代码如下所示数据入库本次要采集的是高考大数据,即2022年学校排名,数据来源为百度,地址... 查看详情

python实战高校数据采集,爬虫训练场项目数据储备(代码片段)

在制作爬虫训练场项目时,需要准备大量的数据,供大家学习使用,本系列博客用于数据储备。文章目录示例代码如下所示数据入库本次要采集的是高考大数据,即2022年学校排名,数据来源为百度,地址... 查看详情

基于golang的爬虫实战(代码片段)

基于golang的爬虫实战前言爬虫本来是python的强项,前期研究过scrapy,也写过一些简单的爬虫小程序,但是后来突然对golang产生兴趣,决定写写爬虫练练手。由于本人golang萌新,有错误之处,欢迎指正。大致思路由于现在动态页面... 查看详情

python异步爬虫:引入+线程池实战(代码片段)

python异步爬虫(1):引入+线程池实战​使用异步爬虫可以实现高性能高效率的数据爬取操作文章目录python异步爬虫(1):引入+线程池实战一.引入二.线程池实战插播:[pythonresponse.text和response.content的区别](https://www.cnblogs.com/bra... 查看详情

5行python爬虫代码,就能采集每日资讯@_@(代码片段)

...日新闻他,正在学习Python他,昨天忽然觉得Python爬虫可以替代他手动操作。擦哥说,一个初级爬虫工程师,即将诞生了,没准还是一个实战型程序员,用编程解决自己重复性的动作。具备每日资讯的站点 查看详情

5行python爬虫代码,就能采集每日资讯@_@(代码片段)

...日新闻他,正在学习Python他,昨天忽然觉得Python爬虫可以替代他手动操作。擦哥说,一个初级爬虫工程师,即将诞生了,没准还是一个实战型程序员,用编程解决自己重复性的动作。具备每日资讯的站点 查看详情

4.网络爬虫—post请求(实战演示)(代码片段)

网络爬虫—Post请求实战演示POST请求GET请求POST请求和GET请求的区别获取二进制数据爬[百度官网](https://www.baidu.com/)logo实战发送post请求百度翻译实战使用session发送请求模拟登录17k小说网常见问题前言:📝​📝​此专... 查看详情

python爬虫eval混淆,爬虫进阶实战系列(代码片段)

文章目录⛳️前置知识⛳️电视猫实战场景⛳️实战编码⛳️前置知识历经10篇左右的Python字体反爬系列文章,我们又进入了一个新的主题,常见混淆加密原理与实践。本篇博客从eval混淆开始,逐层为大家拆解JS逆向中混淆相关... 查看详情

爬虫——实战完整版(代码片段)

mongodb操作1importpymongo23#连接数据库实例(连接数据库)---》获取相应数据库---》获取相应collection集合(表)4client=pymongo.MongoClient(host=‘localhost‘,port=27017)56db=client.test#也可用字典形式操作,如下7#db=client["test"]89collection=db.studen 查看详情