引言:当我们练习数据分析或者数学建模需要数据的时候,如果找不到现成的数据,爬虫不失为一种很好的获取数据的技术手段

首先声明,本博客仅为个人学习记录,所爬取数据为国家统计局公开数据,不做任何商业用途仅供学习用途,如果能提供一丁点参考将是本人的荣幸

在开始之前,我顺带提一下Robots协议。Robots协议全程Robots Exclusion Protocol,简单来说就是该协议规定了哪些能爬哪些不能爬,具体详见–>Robots协议
环境说明:
jupyter notebook(交互式感觉对爬虫来说更方便)
Chrome浏览器

1.首先查看网站

浏览器输入: http://data.stats.gov.cn/easyquery.htm?cn=A01 打开如下图所示:


我们要爬取的就是红框中的内容

2.分析网页结构

2.1 按F12,出现如下页面


2.2 但我们需要的并不是这个页面,还需要点击箭头指向的NetWork,然后在下面找到XHR,如下图所示:
XHR简介

点开第一个可以发现诸如URL、状态码之类的,在这里,应该留意到页面底部的Query String Parameters,后面会用到

2.3 然后我们依次点开剩下的两个
第二个的URL和Query String Parameters分别是:


第三个URL和Query String Parameters分别是:


通过分析第二个和第三个我们发现,它们的前面部分是一样的,即http://data.stats.gov.cn/easyquery.htm,问号后面的内容虽然不一样,但是和自己Query String Parameters里面的内容一样。学过计算机网络的都应该知道问号后面是传给服务器的参数。

2.4 我们可以发现第三个URL中有个m=QueryData,那我们应该可以做一个大胆的猜测:这个URL就是返回数据的。我们可以点开Response简单验证下:

与页面展示的数据进行比对,发现数据吻合,那说明我们猜想的线路没错
因此我们已经初步可以根据Query String Parameters构造键值对了,但是并没有完,这里有个小陷阱,后面详讲

3. 避开陷阱

3.1 上面我们提到了有个小陷阱,那就是如果我们直接使用Request URL,爬取的数据与页面并不一样。 这是为什么呢?让我们继续仔细查看网页,我们可以看到一个下拉式菜单


当我们点击“最近13个月”的时候,XHR里面会多出来一项

我们可以看到,新的这一条Query String Parameters里面dfwds不再是空了,而之前第三条的dfwds为空。当我们再次查看Response的时候,会发现数据吻合。那么新的这一条URL应该就能真实返回数据了。这里的k1经查证,是时间戳

4. 开始爬虫

  • 需要导入的库如下:
  • import requests
    import numpy as np
    import pandas as pd
    from bs4 import BeautifulSoup
    import time
    import json
    
  • 生成时间戳
  • def getTime():return int(round(time.time() * 1000))
    
  • 爬虫代码,传递url、headers、键值对参数。最终爬取的数据以json的形式展示
  • url='http://data.stats.gov.cn/easyquery.htm?cn=A01'
    headers={'User-Agent':'Mozilla/5.0(Windows;U;Windows NT6.1;en-US;rv:1.9.1.6) Geko/20091201 Firefox/3.5.6'}#浏览器代理
    key={}#参数键值对
    key['m']='QueryData'
    key['dbcode']='hgyd'
    key['rowcode']='zb'
    key['colcode']='sj'
    key['wds']='[]'
    key['dfwds']='[{"wdcode":"sj","valuecode":"LAST13"}]'
    key['k1']=str(getTime())
    r=requests.get(url,headers=headers,params=key)
    js=json.loads(r.text)
    js
    

    爬虫数据json展示如下:

    5. 数据预处理

    这里对于数据的处理操作我搞得比较冗余,熟悉的朋友可以按自己的思路走 我们想要的数据其实是在strdata里面,但是这个strdata被层层“包裹”,需要像剥洋葱一样一层一层剥开。但是一定要注意,剥开一层之后数据格式的变化!

  • 初步解析json,首先查看strdata最外层,我们可以看到strdata外面还包裹了一层'datanodes'
  • 进一步解析json,这次我们应该剥开"datanodes",并查看它数据格式为后面做准备
  • 既然是列表,那我们获取元素就更方便了,但应该注意的是列表里面的元素数据格式是字典类型
  • 我们可以从上图看到strdata就是键值对的值,同时整个字典类型数据存在于列表里面,那事情就好办啦——遍历列表通过键获取值
  • 将列表转换成9*13的DataFrame
  • DataFrame行列重命名
  • 最终结果展示

  • 为数不多的几次爬虫,写得不好的地方请大家指正

史上超详细python爬取国家统计局数据相关推荐

  1. Python爬取国家统计局数据并做简单的数据缺失值处理!

    准备工作: 需要先安装chrome浏览器 其次,下载chromedriver驱动,下载方式可点击这里,下载完毕放置的位置没有要求,只需要在下面的代码中将地址改成你的chromedriver驱动放置的位 ...

  2. python爬取国家统计局数据并做简单的数据缺失值处理

    准备工作: 需要先安装chrome浏览器 其次,下载chromedriver驱动,下载方式可点击这里,下载完毕放置的位置没有要求,只需要在下面的代码中将地址改成你的chromedriver驱动放置的位 ...

  3. 如何用python爬取网页数据,python爬取网页详细教程

    大家好,本文将围绕python怎么爬取网站所有网页展开说明,如何用python爬取网页数据是一个很多人都想弄明白的事情,想搞清楚python如何爬取网页数据需要先了解以下几个事情. 1.如何用Pyth ...

  4. Python爬取豆瓣+数据可视化

    博客原文和源码下载:Python爬取豆瓣+数据可视化 前言 前段时间应我姐邀请,看了一下Python爬虫.不得不说Python的语法确实简洁优美,可读性强,比较接近自然语言,非常适合编程的初学者上手. ...

  5. Python爬虫教程-Python爬取股票数据过程详解

    这篇文章主要介绍了基于Python爬取股票数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本环境配置 python 3.6 pycha ...

  6. python爬取网页公开数据_如何用Python爬取网页数据

    使用Python爬取网页数据的方法: 一.利用webbrowser.open()打开一个网站:>>> import webbrowser >>> webbrowse ...

  7. 编程python爬取网页数据教程_实例讲解Python爬取网页数据

    一.利用webbrowser.open()打开一个网站: >>> import webbrowser >>> webbrowser.open('http://i.f ...

  8. Python爬取天气数据及可视化分析!

    来源丨Python之王 Python爬取天气数据及可视化分析 说在前面 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本 ...

  9. Python爬取的数据存为json文件,并读取

    Python爬取的数据存为json文件,并读取 import requests import time from lxml import etree import jsondef json_data_ ...

  10. python爬虫教程:实例讲解Python爬取网页数据

    这篇文章给大家通过实例讲解了Python爬取网页数据的步骤以及操作过程,有兴趣的朋友跟着学习下吧. 一.利用webbrowser.open()打开一个网站: >>> import w ...

最新文章

  1. php-fpm 没有启动脚本,php-fpm服务启动脚本
  2. 关键词热度分析工具_干货分享丨关键词热度分析工具
  3. context存放内容_Go语言爱好者周刊:第 58 期—关于 context
  4. python保存表格_python怎么把数据保存为excel
  5. Swift傻傻分不清楚系列(六)集合类型
  6. java windows7 环境变量_Windows7环境变量中,系统变量与用户变量的优先级
  7. php 数据类型转换与比较
  8. Java工作笔记-类型转换的一种思路(前后端分离、反射)
  9. 对 app_offline.htm 的几点错误认识
  10. mvc crud_Spring MVC Hibernate MySQL集成CRUD示例教程
  11. jmeter在返回的json串中提取需要的值
  12. ubuntu下查看USB摄像头参数以及摄像头测试
  13. Google 安装印象笔记剪藏插件
  14. LaTeX引用参考文献——BibTex参考文献格式大全
  15. 固态硬盘测试软件有哪些,SSD测试软件有哪些?SSD测试软件盘点
  16. win7 访问局域网共享文件时提示输入网络凭据 设置开机免输入凭证进入共享盘设置
  17. 计算机丢失XAPOFX1_5.dll文件如何解决?
  18. 容联云聚客SCRM如何破SCRM保险应用困局
  19. 3D人脸查看器和匹配器
  20. matlab怎么添加注释快捷键,Matlab注释技巧

热门文章

  1. 利用JS代码完成动态生成表格案例及解析
  2. SACD ISO提取DSF文件及添加封面
  3. JDK1.8HashMap底层实现原理
  4. IP协议号与传输层端口
  5. 4.郝斌C语言笔记——基本的输入和输出函数的用法
  6. 关于SSDP协议的基础知识
  7. 利用MDTools和Hydraw设计专业的液压阀块
  8. 学校计算机总帐和明细帐的表格,5教学仪器设备总账和明细账填写模板.doc
  9. 二叉树入门OJ—递归思想练习
  10. AE开发之鹰眼窗口、书签