准备工作:
需要先安装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爬取国家统计局数据并做简单的数据缺失值处理相关推荐

  1. Python爬取影评并进行情感分析和数据可视化

    Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化 一.引言 二.使用requests+BeautifulSoup进行影评的爬取 1.分析界面元素 ...

  2. python爬百度翻译-Python爬取百度翻译(利用json提取数据)

    本篇文章给大家带来的内容是关于Python爬取百度翻译(利用json提取数据),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 工具:Python 3.6.5.PyCharm开发工具. ...

  3. 用Python爬取手机壁纸,太简单了吧

    用Python爬取手机壁纸,太简单了吧! 人生苦短,快学Python! 在Python爬虫的学习过程中,爬取图片几乎是每个初学者都练习过的项目,比如我们之前就分享过:如何用Python快速爬取小姐姐的 ...

  4. 利用Python爬取《囧妈》豆瓣短评数据,并进行snownlp情感分析

    利用Python爬取<囧妈>豆瓣短评数据,并进行snownlp情感分析 一.电影评论爬取 今年的贺岁片<囧妈>上映前后,在豆瓣评论上就有不少网友发表了自己的观点,到底是好评的声 ...

  5. 4ye含泪用python爬取了自己的公众号粉丝数据

    4ye含泪用python爬取了自己的公众号粉丝数据 小伙伴们好呀,最近本来是在捣鼓Gateway的知识点的,结果被一件事情搞得心不在焉 哈哈哈哈,结果不得不先鸽下~ 搞完这件事情再继续哦!! ε=ε= ...

  6. 表哥用Python爬取数千条淘宝商品数据后,发现淘宝这些潜规则!

    本文记录了笔者用 Python 爬取淘宝某商品的全过程,并对商品数据进行了挖掘与分析,最终得出结论. 项目内容 本案例选择商品类目:沙发. 数量:共 100 页  4400 个商品. 筛选条件:天猫. ...

  7. 刚刚用python爬取一千个微信朋友圈数据,他们的秘密原来这么多。

    当下我们饮食起居基本上依靠微信,但微信不单单是1个即时通信软件,更像是仿真模拟的日常生活世界.你所处的微信朋友圈是咋样,慢慢地你的思想也会变的咋样.近几日在学习 itchat,并且写了1个网络爬虫,扒 ...

  8. Python爬取《隐秘的角落》弹幕数据,实现简单可视化(附源码)

    工具使用 开发环境: win10.python3.6 开发工具: pycharm 相关模块 : requests,stylecloud 思路分析 1.爬虫获取数据 爱奇艺的弹幕数据是以 .z 形式的压 ...

  9. Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...

    作者 | Huang supreme 编辑 | 郭芮 出品 | CSDN博客 图源 | 视觉中国 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于"数据&qu ...

  10. python 怎么爬桌软件数据_如何利用Python爬取并分析红岭创投的数据?

    第一步:爬取数据 通过 selenium + Firefox 的无头模式将需要的数据爬取出来,代码实现不在赘述,详细步骤可查看我的上一篇图文(如何利用Python爬取网易新闻), 由于 seleniu ...

最新文章

  1. usaco Raucous Rockers(dp)
  2. 用群体测试开发成功的应用程序
  3. linux top命令查看内存及多核CPU的使用讲述 [转]
  4. PageLayoutControl的基本操作
  5. werkzeug response
  6. flask中的static_path和static_path_url和static_folder
  7. 蓝桥杯 ALGO-75 算法训练 筛选号码
  8. Linq to sql(六):探究特性(四)
  9. 机器学习系列(19)_通用机器学习流程与问题解决架构模板
  10. sap 界面创建凭证_在sap系统设置纸张打印格式(针式打印机)
  11. centos7 文件名中文乱码_Linux服务器文件名乱码常见问题
  12. win2008虚拟化服务器配置,Win2008虚拟化实战之创建虚拟机
  13. 人工智能:python 实现 第十章,NLP 第一天 入门介绍及使用stemming还原词汇
  14. 开机出现RUNDLL加载:C:WINDOWS\downlo~1\Cnsmin.dll时…
  15. 手动爬取炉石传说所有卡牌
  16. kali 普通用户没有声音
  17. Redis:字符串INCR、INCRBY、INCRBYFLOAT、DECR、DECRBY命令介绍
  18. python:ImportError: cannot import name ‘xx‘ from ‘xxxx‘
  19. 英语语音中的调核例子_英语调核研究.pdf
  20. oracle 启动crs进程,由于CRS磁盘dismount造成的CRS进程无法启动问题

热门文章

  1. 小学计算机余数在线,【思维导图】小学数学20-有余数的除法
  2. AutoCAD2009下载AutoCAD2009中文版安装教程附软件下载
  3. 嵌入式算法:STM32 F4xx 使用DSP实现cubic spline插值算法
  4. 基于人工智能与大数据的城市治安防控体系建设方案-2022-01版
  5. 错误 101 (net::ERR_CONNECTION_RESET):连接已重置。
  6. Malware Dev 01 - 免杀之 PPID Spoofing 原理解析
  7. Oracle特殊字符转义:和'
  8. Oralcle中特殊字符的处理
  9. 知名蓝牙芯片原厂及其发展应用史(含蓝牙V1.0-V5.0介绍)
  10. 《论系统工程》--钱学森