python爬取国家统计局数据并做简单的数据缺失值处理
准备工作:
需要先安装chrome浏览器
其次,下载chromedriver驱动,下载方式可点击这里,下载完毕放置的位置没有要求,只需要在下面的代码中将地址改成你的chromedriver驱动放置的位置就可以啦。
爬虫代码如下:
# -*- codeing = utf-8 -*-
# Datatime:2020/12/5 5:04
# Filename:text3 .py
# Toolby: PyCharmimport time
import ssl
import xlwt
from selenium import webdriver
from bs4 import BeautifulSoup
ssl._create_default_https_context = ssl._create_unverified_context#爬取网页,得到数据
def getData():chrome_driver = "D:\Google\chromedriver_win32\chromedriver.exe" #chromedriver驱动文件的位置browser = webdriver.ChromeOptions()browser.add_argument('user-agent=Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 87.0.4280.66 Safari / 537.36')browser.add_argument('--ignore-certificate-errors')ss = webdriver.Chrome(executable_path=chrome_driver,chrome_options=browser)ss.get('https://data.stats.gov.cn/easyquery.htm?cn=C01')time.sleep(30) #睡眠3秒,等待页面加载ss.find_element_by_id('mySelect_sj').click() #点击时间的下拉列表框time.sleep(2) #睡眠3秒,等待页面加载ss.find_element_by_class_name('dtText').send_keys('1949-,last10') #在时间框里输入时间:1949-,last10time.sleep(1) #睡眠1秒,等待页面加载ss.find_element_by_class_name('dtTextBtn').click() #点击确定time.sleep(1) #睡眠1秒,等待页面加载ss.find_element_by_id('treeZhiBiao_4_a').click() #点击人口time.sleep(3) #睡眠3秒,等待页面加载ss.find_element_by_id('treeZhiBiao_30_a').click() #点击总人口time.sleep(5) #睡眠5秒,等待页面加载infos1 = ss.find_element_by_id('main-container') #定位到id=main-container的元素(标签)thead = infos1.find_element_by_tag_name('thead').get_attribute("innerHTML") #取得thead标签的html字符串,为str类型tbody1 = infos1.find_element_by_tag_name('tbody').get_attribute("innerHTML") #取得tbody标签的html字符串,为str类型ss.find_element_by_id('treeZhiBiao_31_a').click() #点击人口出生率、死亡率和自然增长率time.sleep(5) #睡眠5秒,等待页面加载infos2 = ss.find_element_by_id('main-container') #定位到id=main-container的元素(标签)tbody2 = infos2.find_element_by_tag_name('tbody').get_attribute("innerHTML") # 取得tbody标签的html字符串,为str类型return thead, tbody1,tbody2# 解析得到的数据
def analyseData():thead,tbody1,tbody2 = getData() #保存爬取到的网页源码,thead,tbody为str类型soup1 = BeautifulSoup(thead, "html.parser") #将thead赋值给soup1,soup1为bs4.BeautifulSoup类型soup2 = BeautifulSoup(tbody1, "html.parser") #将tbody赋值给soup2,soup2为bs4.BeautifulSoup类型soup3 = BeautifulSoup(tbody2, "html.parser") #将tbody赋值给soup2,soup2为bs4.BeautifulSoup类型datalist = [] #声明一个存储所有数据的汇总列表for item in soup1.find_all(name='tr'): #item为bs4.element.Tag类型bb = [] #临时存储年份for item2 in item.find_all(name='th'): #item2为bs4.element.Tag类型bb.append(item2.text) #item2.text为str类型bb.reverse() #将所有数据重新排列,若不排列,则为2019 2018 2017... ,排序后为1949,1950,1951...for i in range(1): #元素右移1位bb.insert(0, bb.pop())datalist.append(bb) #将年份数据存入汇总列表中for item in soup2.find_all(name='tr'): #item为bs4.element.Tag类型bb = [] #用于循环时,依次临时存储总人口、男性人口、女性人口、城镇人口、乡村人口for item2 in item.find_all(name='td'): #item2为bs4.element.Tag类型bb.append(item2.text) #item2.text为str类型bb.reverse() #将所有数据重新排列for i in range(1): #元素右移1位bb.insert(0, bb.pop())datalist.append(bb) #通过循环将总人口、男性人口、女性人口、城镇人口、乡村人口依次存入汇总列表中for item in soup3.find_all(name='tr'): #item为bs4.element.Tag类型bb = [] #用于循环时,依次临时存储人口出生率、人口死亡率、人口自然增长率for item2 in item.find_all(name='td'): #item2为bs4.element.Tag类型bb.append(item2.text) #item2.text为str类型bb.reverse() #将所有数据重新排列for i in range(1): #元素右移1位bb.insert(0, bb.pop()) #通过循环将人口出生率、人口死亡率、人口自然增长率依次存入汇总列表中datalist.append(bb)return datalist# 存储数据
def saveData():datalist = analyseData() #获取数据解析好的数据book = xlwt.Workbook(encoding="utf-8", style_compression=0) #新建工作本sheet = book.add_sheet("1949-2019年人口数据",cell_overwrite_ok=True) #添加工作表for item in datalist:for item1 in item:print(item1)sheet.write(item.index(item1),datalist.index(item),item1) #向工作表1949-2019年人口数据中写入数据sheet.write(0,0,"年份") #将第一列的属性值改为‘年份’(爬虫得到是‘指标’book.save("source.xlsx") #保存文件print("end")#程序入口处
if __name__=='__main__':saveData()
可能会报如下错误:
这是由于加载页面太慢的原因,把代码中的睡眠时间改大一点就可以啦。
如果遇到编码问题,建议改用pycharm运行程序。
程序运行时会自动打开chrome浏览器,进行操作。
爬取成功!
可以看到得到了一个文件source.xlsx,只有这个文件是爬虫过程中生成的,其他文件都是我测试别的东西的时候的创建的。
打开可以看到得到的数据如下:
会有缺失,这在爬虫很正常,进行简单的数据清洗就可以啦。附上代码:
# -*- codeing = utf-8 -*-
# Datatime:2020/12/5 21:22
# Filename:fillna .py
# Toolby: PyCharmimport pandasdata = pandas.read_excel(r'source.xlsx',sheet_name=0)#缺失值填充
data= data.interpolate() #若前后都不为空时,用前后的均值填充,同时兼具向前填充的功能
data= data.fillna(method='bfill') #向后填充data.to_excel("fillna.xlsx") #保存数据
print("保存成功")
结果如下:
缺失没有啦
至于增加了第一列,是由于用pandas进行数据清洗时自动生成的,不想要的话可手动删除。
python爬取国家统计局数据并做简单的数据缺失值处理相关推荐
- Python爬取影评并进行情感分析和数据可视化
Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化 一.引言 二.使用requests+BeautifulSoup进行影评的爬取 1.分析界面元素 ...
- python爬百度翻译-Python爬取百度翻译(利用json提取数据)
本篇文章给大家带来的内容是关于Python爬取百度翻译(利用json提取数据),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 工具:Python 3.6.5.PyCharm开发工具. ...
- 用Python爬取手机壁纸,太简单了吧
用Python爬取手机壁纸,太简单了吧! 人生苦短,快学Python! 在Python爬虫的学习过程中,爬取图片几乎是每个初学者都练习过的项目,比如我们之前就分享过:如何用Python快速爬取小姐姐的 ...
- 利用Python爬取《囧妈》豆瓣短评数据,并进行snownlp情感分析
利用Python爬取<囧妈>豆瓣短评数据,并进行snownlp情感分析 一.电影评论爬取 今年的贺岁片<囧妈>上映前后,在豆瓣评论上就有不少网友发表了自己的观点,到底是好评的声 ...
- 4ye含泪用python爬取了自己的公众号粉丝数据
4ye含泪用python爬取了自己的公众号粉丝数据 小伙伴们好呀,最近本来是在捣鼓Gateway的知识点的,结果被一件事情搞得心不在焉 哈哈哈哈,结果不得不先鸽下~ 搞完这件事情再继续哦!! ε=ε= ...
- 表哥用Python爬取数千条淘宝商品数据后,发现淘宝这些潜规则!
本文记录了笔者用 Python 爬取淘宝某商品的全过程,并对商品数据进行了挖掘与分析,最终得出结论. 项目内容 本案例选择商品类目:沙发. 数量:共 100 页 4400 个商品. 筛选条件:天猫. ...
- 刚刚用python爬取一千个微信朋友圈数据,他们的秘密原来这么多。
当下我们饮食起居基本上依靠微信,但微信不单单是1个即时通信软件,更像是仿真模拟的日常生活世界.你所处的微信朋友圈是咋样,慢慢地你的思想也会变的咋样.近几日在学习 itchat,并且写了1个网络爬虫,扒 ...
- Python爬取《隐秘的角落》弹幕数据,实现简单可视化(附源码)
工具使用 开发环境: win10.python3.6 开发工具: pycharm 相关模块 : requests,stylecloud 思路分析 1.爬虫获取数据 爱奇艺的弹幕数据是以 .z 形式的压 ...
- Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...
作者 | Huang supreme 编辑 | 郭芮 出品 | CSDN博客 图源 | 视觉中国 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于"数据&qu ...
- python 怎么爬桌软件数据_如何利用Python爬取并分析红岭创投的数据?
第一步:爬取数据 通过 selenium + Firefox 的无头模式将需要的数据爬取出来,代码实现不在赘述,详细步骤可查看我的上一篇图文(如何利用Python爬取网易新闻), 由于 seleniu ...
最新文章
- usaco Raucous Rockers(dp)
- 用群体测试开发成功的应用程序
- linux top命令查看内存及多核CPU的使用讲述 [转]
- PageLayoutControl的基本操作
- werkzeug response
- flask中的static_path和static_path_url和static_folder
- 蓝桥杯 ALGO-75 算法训练 筛选号码
- Linq to sql(六):探究特性(四)
- 机器学习系列(19)_通用机器学习流程与问题解决架构模板
- sap 界面创建凭证_在sap系统设置纸张打印格式(针式打印机)
- centos7 文件名中文乱码_Linux服务器文件名乱码常见问题
- win2008虚拟化服务器配置,Win2008虚拟化实战之创建虚拟机
- 人工智能:python 实现 第十章,NLP 第一天 入门介绍及使用stemming还原词汇
- 开机出现RUNDLL加载:C:WINDOWS\downlo~1\Cnsmin.dll时…
- 手动爬取炉石传说所有卡牌
- kali 普通用户没有声音
- Redis:字符串INCR、INCRBY、INCRBYFLOAT、DECR、DECRBY命令介绍
- python:ImportError: cannot import name ‘xx‘ from ‘xxxx‘
- 英语语音中的调核例子_英语调核研究.pdf
- oracle 启动crs进程,由于CRS磁盘dismount造成的CRS进程无法启动问题
热门文章
- 小学计算机余数在线,【思维导图】小学数学20-有余数的除法
- AutoCAD2009下载AutoCAD2009中文版安装教程附软件下载
- 嵌入式算法:STM32 F4xx 使用DSP实现cubic spline插值算法
- 基于人工智能与大数据的城市治安防控体系建设方案-2022-01版
- 错误 101 (net::ERR_CONNECTION_RESET):连接已重置。
- Malware Dev 01 - 免杀之 PPID Spoofing 原理解析
- Oracle特殊字符转义:和'
- Oralcle中特殊字符的处理
- 知名蓝牙芯片原厂及其发展应用史(含蓝牙V1.0-V5.0介绍)
- 《论系统工程》--钱学森