数据库设计

数据库省份表(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爬取——国家统计局省份加城市 并写入数据库相关推荐

  1. python 爬取海量网易云评论并写入数据库

    本人是一个网易云音乐的重度患者,最近闲来无事,就想起来写一个爬虫爬一下网易云音乐上都有哪些有趣的评论,于此记录一下过程. 整体思路 可能是我的脑回路那啥,作为一个新手,咱一上来,是直接尝试爬取评论.随 ...

  2. Python爬取高德地图各城市天气

    Python爬取高德地图各城市天气 爬虫练习项目之一.从高德地图json数据接口获取天气.可以获取某省的所有城市天气.高德地图的这个接口还能获取县城的天气,我只写到了市.有兴趣的朋友可以尝试一下. 完 ...

  3. python爬取去哪里_详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?

    今年五一放了四天假,很多人不再只是选择周边游,因为时间充裕,选择了稍微远一点的景区,甚至出国游.各个景点成了人山人海,拥挤的人群,甚至去卫生间都要排队半天,那一刻我突然有点理解灭霸的行为了. 今天通过 ...

  4. Python爬取马蜂窝-推荐小众城市旅游及爬取某一城市的景点信息和游记信息

    目的: 推荐小众城市旅游及爬取某一城市的景点信息和游记信息. 第一部分 首先从目的地页面获得各省专属5位数字编号,之后进入各省城市列表获得热门城市专属5位数字编号. 1.获得直辖市编号和热门省编号,h ...

  5. python爬取京东数据加载失败_python 爬京东数据时,无法登陆。

    想使用python爬取京东的快递信息,现在需要解决的首要问题是使用python模拟浏览器登陆,遇到了下面的问题. _t _ntNBMNX ({"username":"\u ...

  6. python爬取电影信息并插入至MySQL数据库

    在上篇博文中,博主使用python爬取了豆瓣电影的影片信息,接下来,博主考虑到在之前做的JavaWeb电影院项目中需要向数据库中一个个的插入影片数据,十分的繁琐,那么在使用了python爬虫后,这个操 ...

  7. python爬取拉勾网给定关键词职位信息存入数据库_Python 爬取拉勾网python职位信息...

    今天的任务是爬取拉勾网的职位信息. 首先,我们进入拉勾网,然后在职位搜索栏搜索Python 的同时,打开控制面板F12,来查看网页构成. 在XHR里,可以清楚的看见Ajax请求,所以需要使用sessi ...

  8. Python爬取国家统计局官网最新全国所有城市县镇数据

    最近项目里需要省市区村的数据,网上找了很多方法,都没有如意的,有的老数据竟然还要钱,要积分的我也还认可,我在网上查了下,参考了这位老兄的博客,自己又动手把第五级村级行政加了上去.下面请看大屏幕,我要划 ...

  9. Python 爬取国家统计局城市信息2019

    写个页面需要有省市区三级联动,缺少最新的城市信息,从网上找了些资源,发现写的各有特色,有的资源里面的语法奇葩到无语,灼瞎我的眼呀,无奈自己就简写了一个脚本,发现统计局的规律还是挺奇特的,开始用xpat ...

  10. 告诉你那里最受欢迎,python爬取全国13个城市旅游数据

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

最新文章

  1. lnmp架构——架构理解
  2. Kali Linux Wine32英文字体不显示问题
  3. 从理念到实践跳跃式演进!云的原生“免疫系统”如何有机作战?
  4. HBase——强一致性详解
  5. Java Stack 类
  6. Linux socket编程,对套接字进行封装
  7. java安装找不到uri,【找不到与请求 URI匹配的 HTTP 资源】(转)
  8. Android-alpha-渐变透明度 动画
  9. Java让数据库执行一条sql_java数据库编程——执行SQL 语句
  10. asp.net如何解决传递中文参数乱码问题
  11. cw2vec:蚂蚁金服公开最新基于笔画的中文词向量算法
  12. 学习python: 单例设计模式
  13. FileZilla Server目录乱码问题的解决
  14. 北京世园会率先启用5G技术 中国馆优雅呈现
  15. Windows权限维持
  16. 昨天介入600571,信雅达,喜欢的朋友可以跟进!
  17. 拉格朗日插值验证龙格现象python
  18. vc工程下的文件后缀解析
  19. DCCA互相关系数 理论
  20. 如何从javascript直接调用word插件

热门文章

  1. FastDFS原理介绍
  2. PMON 启动流程分析
  3. VMware中不能使用ifconfig教程——亲测有效
  4. 海信LINUX系统改安卓,如何获取海信电视的root许可一键单击海信Smart TV的root卸载内置软件...
  5. 大一入门oj题目——《三天以后》
  6. 成不了AI高手?因为你根本不懂数据!听听这位老教授多年心血练就的最实用统计学...
  7. vue后台管理框架配置vux记录
  8. 树莓派 40pin IO引脚测试
  9. 浅谈论文查重检测过程中的常见问题
  10. mysql嵌套查询,MYSQL嵌套查询(子查询),把内层的查询结果作为外层的查询条件