• 国家统计局通用数据爬取思路+代码实现 (超级舒畅的一次爬取经历)


    国家统计局通用数据爬取思路+代码实现 (超级舒畅的一次爬取经历)#

    0、前言#

    在做一些预测的时候常常会用到国家统计局的数据,之前写的一些爬虫也没能够复用,今天又遇到了这个问题,反复检查之后发现国家统计局的各种数据其实都遵循同一套逻辑,而只需掌握这一个逻辑,我们便可以想要啥就要啥。

    1、初见#

    经典https不安全🤪🤪🤪🤪🤪

    一进到这个网站我立马熟练的点开了,各项数据分类,这里有国家月度数据,国家年度数据,国家季度数据,也有分各个省的数据。

    我今天对2021的出生率死亡率非常感兴趣,于是我立马快速切换到年度数据。

    随后飞速的在左侧侧边栏找到人口指标下的人口出生率、死亡率和自然增长率。

    我也如期拿到了数据

    但是总感觉过程不够丝滑,我能不能让这个过程更高效一点?

    2、分析#

    我打开了F12神奇,冒充开发者。

    结果发现原来发现,不论什么数据基本都是同一个接口:

    https://data.stats.gov.cn/easyquery.htm
    
    paramters = {
        "m": "QueryData",
        "dbcode": "fsnd",
        "rowcode": "zb",
        "colcode": "sj",
        "wds": [], 
        "dfwds": [{"wdcode":"zb","valuecode":"A0303"}],
        "k1": 1651675561678
        "h": 1,
    }
    

    这请求方法是GET,参数又只有这么几个,那么如果我解析了这几个参数,我岂不是想爬什么爬什么,想爬什么时间段就爬什么时间段?

    • m:无需多言,就是请求数据
    • dbcode:我是在想不出这个单词表示的意义,不过当我看到后面fsnd的时候,我知道这应该是分省年度的缩写,我想这大抵对应首页的几个数据种类。
    • rowcode:直译为行编码,一看后面的字,原来是zb招标啊,
    • colcode:直译为列编码,后面的sj应该是时间的缩写
    • wds:不明所以
    • dfwds:不明所以,不过这个字段和上面wds应该很重要
    • k1:为时间戳
    • h:好像就是一个常量

    简单分析之后我立马上试了一试

    OK的完全没有问题,那么接下来就是指定需求了:

    1. 所有指标一视同仁
    2. 爬取任意久远的时间段(官网只提供了几个有限的选项)

    1. 可以自由切换不同的省,不同的数据类(国家年度,分省年度):显然微调dbcode即可实现

    3、问题解决#

    3.1、所有指标一视同仁#

    预想一次性处理所有指标,那么就先得对指标的命名情况有一个了解

    dfwds: [{"wdcode":"zb","valuecode":"A0302"}]
    

    dfwds中我们发现那个熟悉的词语拼音缩写,zb 指标,后面的应该就对应于这个指标的代码

    可以发现A0302完美对应这个指标在指标树中位置。同时我观察到10号元素不是A10而是A0A,所以可以得出大部分数据都是满10进A随后按照字典序提升。

    3.2、对任意时间段爬取#

    官网只提供了一段时间的爬取,但是我想要任意时间段的数据。尝试查看了近20年数据之后,我发现这里的dfwds变了,现在变成了时间索引,且valuecode也 变了,变成最近20,我自然联想到直接把20改一改,没准就能行。

    果然如期返回了!那我们的推断没有错。

    现在我想爬取任意一个指标的任意时间段的数据,经过测试发现原来dfwds真的是一个数组,可以放多个条件

    "dfwds": "[{\"wdcode\":\"zb\",\"valuecode\":\"A0202\"},{\"wdcode\":\"sj\",\"valuecode\":\"LAST50\"}]"
    

    把指标信息和时间约束都加到这个字段,从而实现了我们最初的需求。

    我立马写成代码测试

    4、测试#

    python nationStatisticdata.py --zb A0302 --sj LAST50 --dbcode hgnd --output 湖北省人口出生死亡自然增长.csv
    

    非常顺利哈哈哈哈!

    5、代码#

    GitHub: https://github.com/HuangXingjie2002/Mush-Spider

  • 相关阅读:
    数据结构与算法(Data Structures and Algorithm)——跟着Mark Allen Weiss用Java语言学习数据结构与算法
    10-27 maven概念
    FRR+BFD+OSPF与BGP联动
    JimuReport积木报表 v1.7.2 版本发布,低代码报表工具
    Deepin下vsftp服务安装配置
    Clog——基于C语言的日志系统设计
    零基础入门数据挖掘——二手车交易价格预测:baseline
    微软推出Azure量子资源估算器,加速量子算法研发
    数据处理的那些事「GitHub 热点速览」
    园区/厂区怎么实现wifi上网短信认证
  • 原文地址:https://www.cnblogs.com/mushrain/p/16222956.html