Python爬取——国家统计局省份加城市 并写入数据库
数据库设计
数据库省份表(province)
城市表(city)
Python代码
import requests
from lxml import etree
import pymysql
from fake_useragent import UserAgent
#请求方法
def request(param):url = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/'url = url + param# 伪装ua = UserAgent()headers = {'User-Agent':ua.random}response = requests.get(url=url,headers=headers)# 获取字符集编码response.encoding = response.apparent_encodingdata = response.text# 将源码数据加载到数据对象中data = etree.HTML(data)return dataparam = 'index.html'
data = request(param)
#省份数据列表
province_data = []
#城市数据列表
city_data = []
province_list = data.xpath('//tr[@class="provincetr"]/td')
for provinceli in province_list:province = provinceli.xpath('./a/text()')[0]#获取省份下一级链接next_src =provinceli.xpath('./a/@href')[0]#获取省份id值,为城市表的外键province_id = next_src.split('.')[0]print('-----------' + province + '爬取成功,进入城市爬取-----------')#对省份数据进行切片、数据转换处理# 思路# 1、先创建一个空的列表# 2、根据省份表的需要,将省份id、名字添加到空的列表中# 3、将添加过后的列表转化为元组# 4、将转换后的元祖添加到全局列表中(列表名称为:级别 + _data)pro_data = []pro_data.append(province_id)pro_data.append(province)pro_data = tuple(pro_data)province_data.append(pro_data)#进入城市查询data = request(next_src)city_list = data.xpath('//tr[@class="citytr"]')for cityli in city_list:city_name = cityli.xpath('./td[2]/a/text()')[0]# 获取城市下一级链接city_next_src = cityli.xpath('./td[1]/a/@href')[0]# 获取城市idcity_id = cityli.xpath('./td[1]/a/text()')[0]print(city_name + city_next_src + city_id + ' 爬取成功!!')# 对城市数据进行切片、数据转换处理# 思路# 1、先创建一个空的列表# 2、根据城市表的需要,将城市id、名字、上一级省份ID(省份,城市这两个页面比较特殊)添加到空的列表中# 3、将添加过后的列表转化为元组# 4、将转换后的元祖添加到全局列表中(列表名称为:级别 + _data)#---cit_data 的名字要与全局city_data区分开,起名有点相似 cit_data != city_datacit_data = []up_id = city_next_src.split('/')[0] #城市表上一级id(外键)new_src = city_next_src.split('/')[1] #城市下一级cit_data.append(city_id)cit_data.append(city_name)cit_data.append(up_id)# print(cit_data)cit_data = tuple(cit_data)city_data.append(cit_data)
print(province_data)#连接数据库
connecion =pymysql.connect (host='localhost', # 数据库地址user='root', # 数据库用户名password='19981216', # 数据库密码db='china', # 数据库名称
)cursor = connecion.cursor()
province_sql = 'insert into province(province_id,province_name) values (%s,%s)'
city_sql = 'insert into city(city_id,city_name,up_id) values (%s,%s,%s)'cursor.executemany(province_sql,province_data)
connecion.commit()
print(cursor.rowcount)
cursor.executemany(city_sql,city_data)
connecion.commit()
print(cursor.rowcount)
cursor.close()
connecion.close()
总结:
- 利用xpath解析的时候,一定要把路径写正确。一直以为省份和城市的数据解析路径一样,然后就一直解析不出来
- 使用了fake_useragent浏览器伪装库,但是因为这是换了浏览器的user-Agent,ip地址并没有更换,所以当你多次运行程序时,会受到反爬虫机制的影响,抓不到数据。
- 同步爬取,效率低,数据量小的时候感觉不出来,把国家统计局中的信息爬取到village的时候,你就会知道有多慢了(亲自测试过一个省份的所有下级信息)。
推荐一个大佬的反爬虫机制策略:
https://blog.csdn.net/ITBigGod/article/details/103248172
Python爬取——国家统计局省份加城市 并写入数据库相关推荐
- python 爬取海量网易云评论并写入数据库
本人是一个网易云音乐的重度患者,最近闲来无事,就想起来写一个爬虫爬一下网易云音乐上都有哪些有趣的评论,于此记录一下过程. 整体思路 可能是我的脑回路那啥,作为一个新手,咱一上来,是直接尝试爬取评论.随 ...
- Python爬取高德地图各城市天气
Python爬取高德地图各城市天气 爬虫练习项目之一.从高德地图json数据接口获取天气.可以获取某省的所有城市天气.高德地图的这个接口还能获取县城的天气,我只写到了市.有兴趣的朋友可以尝试一下. 完 ...
- python爬取去哪里_详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
今年五一放了四天假,很多人不再只是选择周边游,因为时间充裕,选择了稍微远一点的景区,甚至出国游.各个景点成了人山人海,拥挤的人群,甚至去卫生间都要排队半天,那一刻我突然有点理解灭霸的行为了. 今天通过 ...
- Python爬取马蜂窝-推荐小众城市旅游及爬取某一城市的景点信息和游记信息
目的: 推荐小众城市旅游及爬取某一城市的景点信息和游记信息. 第一部分 首先从目的地页面获得各省专属5位数字编号,之后进入各省城市列表获得热门城市专属5位数字编号. 1.获得直辖市编号和热门省编号,h ...
- python爬取京东数据加载失败_python 爬京东数据时,无法登陆。
想使用python爬取京东的快递信息,现在需要解决的首要问题是使用python模拟浏览器登陆,遇到了下面的问题. _t _ntNBMNX ({"username":"\u ...
- python爬取电影信息并插入至MySQL数据库
在上篇博文中,博主使用python爬取了豆瓣电影的影片信息,接下来,博主考虑到在之前做的JavaWeb电影院项目中需要向数据库中一个个的插入影片数据,十分的繁琐,那么在使用了python爬虫后,这个操 ...
- python爬取拉勾网给定关键词职位信息存入数据库_Python 爬取拉勾网python职位信息...
今天的任务是爬取拉勾网的职位信息. 首先,我们进入拉勾网,然后在职位搜索栏搜索Python 的同时,打开控制面板F12,来查看网页构成. 在XHR里,可以清楚的看见Ajax请求,所以需要使用sessi ...
- Python爬取国家统计局官网最新全国所有城市县镇数据
最近项目里需要省市区村的数据,网上找了很多方法,都没有如意的,有的老数据竟然还要钱,要积分的我也还认可,我在网上查了下,参考了这位老兄的博客,自己又动手把第五级村级行政加了上去.下面请看大屏幕,我要划 ...
- Python 爬取国家统计局城市信息2019
写个页面需要有省市区三级联动,缺少最新的城市信息,从网上找了些资源,发现写的各有特色,有的资源里面的语法奇葩到无语,灼瞎我的眼呀,无奈自己就简写了一个脚本,发现统计局的规律还是挺奇特的,开始用xpat ...
- 告诉你那里最受欢迎,python爬取全国13个城市旅游数据
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...
最新文章
- lnmp架构——架构理解
- Kali Linux Wine32英文字体不显示问题
- 从理念到实践跳跃式演进!云的原生“免疫系统”如何有机作战?
- HBase——强一致性详解
- Java Stack 类
- Linux socket编程,对套接字进行封装
- java安装找不到uri,【找不到与请求 URI匹配的 HTTP 资源】(转)
- Android-alpha-渐变透明度 动画
- Java让数据库执行一条sql_java数据库编程——执行SQL 语句
- asp.net如何解决传递中文参数乱码问题
- cw2vec:蚂蚁金服公开最新基于笔画的中文词向量算法
- 学习python: 单例设计模式
- FileZilla Server目录乱码问题的解决
- 北京世园会率先启用5G技术 中国馆优雅呈现
- Windows权限维持
- 昨天介入600571,信雅达,喜欢的朋友可以跟进!
- 拉格朗日插值验证龙格现象python
- vc工程下的文件后缀解析
- DCCA互相关系数 理论
- 如何从javascript直接调用word插件
热门文章
- FastDFS原理介绍
- PMON 启动流程分析
- VMware中不能使用ifconfig教程——亲测有效
- 海信LINUX系统改安卓,如何获取海信电视的root许可一键单击海信Smart TV的root卸载内置软件...
- 大一入门oj题目——《三天以后》
- 成不了AI高手?因为你根本不懂数据!听听这位老教授多年心血练就的最实用统计学...
- vue后台管理框架配置vux记录
- 树莓派 40pin IO引脚测试
- 浅谈论文查重检测过程中的常见问题
- mysql嵌套查询,MYSQL嵌套查询(子查询),把内层的查询结果作为外层的查询条件