【Python】基于Python的百度迁徙2——迁徙规模指数(附代码)
2020年8月1日更:百度迁徙在5月8日后就不开放了,目前好像只能爬取到3月15日之前的数据,而且爬取的时候会遇到挺多问题的(具体我也不知道,不开放后我就没爬过了,但是最近很多朋友在问)。评论里关于爬取遇到的问题很多我也没遇到过,没办法帮到你们。如果想直接获取数据(5月8日前的数据)的话,可以私聊或者电子邮件(chinshuuichi@qq.com)联系我(会收一点手工费…)。
2020年10月21日更:百度迁徙重新开放了,数据从9月22开始都有。以下旧的代码需要更改一个地方,即把代码里所有r=response.text[3:-1]
全部替换为r=response.text[4:-1]
即可。
目录
- 简介
- 效果展示
- 准备——城市编码
- 代码(旧版本—xlwt)
- 代码(新版本—xlsxwriter)
- 编辑日志
- 系列文章
简介
百度迁徙 :百度迁徙
不多逼逼,相关的自己了解。趁这几天比较好抓取数据,需要的数据就赶紧抓抓抓。
效果展示
本文的数据主要是来自百度迁徙里面的迁徙规模指数,如下图。
本文提供的代码可以批量抓取数据,如抓取所有城市级别的迁入规模指数放进一个表格里,迁出规模指数放进另一个表格里,这样。或者你也可以设定抓取所有省份级别的数据。如下图,我分别按全国级别、省份级别、城市级别抓取,共获得五个表格,为什么是五个呢,因为全国的数据没有分迁入迁出,按照百度迁徙的说法是“全国为总体迁徙规模,不区分迁入或迁出”。当然也可以通过自定义字典来抓取你想要的城市,具体可参考第三部分“准备——城市编码”。
先展示一波抓取后的数据,各位看官看看是不是自己需要的,如下图。
因为上上图的迁徙规模指数的曲线有和去年农历同期对比,所以我就连去年的指数也抓取了,第一行是日期,去年的日期在前面,今年的在后面,你越晚抓取,今年的日期就越多。
准备——城市编码
城市编码和我的上一篇文章一样,可以直接参考。
代码(旧版本—xlwt)
记得调用相关的城市编码和省份编码数据。
# -*- coding: utf-8 -*-
import requests #导入请求模块
import json #导入json模块
import time #导入时间模块
import xlwt
from ChineseAdminiDivisionsDict import CitiesCode, ProvinceCodedef migration_index(FileTittle,classname,direction,CodeDict): #CodeDict字典里所有城市的迁徙规模指数,以全国列表形式列出#######创建一个workbook########workbook = xlwt.Workbook(encoding = 'utf-8') # 创建一个workbook 设置编码worksheet = workbook.add_sheet('Sheet', cell_overwrite_ok=True) # 创建一个worksheet#################写入行头各城市代码及其城市名###############if direction == 'in' :nameofdire = '迁入'if direction == 'out':nameofdire = '迁出'CitiesOrder = {} #存放城市序号的空字典worksheet.write(0 , 0 , label='城市代码') #写入行头worksheet.write(0 , 1 , label='城市') #写入行头times = 1for key , value in CodeDict.items():worksheet.write(times , 0 , label=str(value)) #写入城市代码worksheet.write(times , 1 , label=str(key)) #写入城市名CitiesOrder[str(key)] = times #写入城市序号字典 times += 1########################开始抓取数据##############################for Area , Code in CodeDict.items():url=f'http://huiyan.baidu.com/migration/historycurve.jsonp?dt={classname}&id={Code}&type=move_{direction}'print(f'{Area}:{url}')response=requests.get(url, timeout=2) # #发出请求并json化处理time.sleep(3) r=response.text[3:-1] #去头去尾data_dict=json.loads(r) #字典化if data_dict['errmsg']=='SUCCESS':data_list=data_dict['data']['list']counter_date = 2 #日期计数器datelist = []for date , index in data_list.items(): #按日期排序datelist.append(date)datelist.sort()for date in datelist:index = data_list[date]# print(f'{date} : {index}')worksheet.write(0 , counter_date , label=date)worksheet.write(CitiesOrder[str(Area)] , counter_date , label=index)counter_date += 1 #日期计数器自加一else:print('错误')workbook.save(f'{FileTittle} {nameofdire}规模指数.xls')quanguo = {'全国':0} #全国编码if __name__=="__main__":migration_index('城市','city','in',CitiesCode)migration_index('城市','city','out',CitiesCode)print('全部完成')
代码(新版本—xlsxwriter)
# -*- coding: utf-8 -*-
import requests #导入请求模块
import json #导入json模块
import time #导入时间模块
import xlsxwriter
from ChineseAdminiDivisionsDict import CitiesCode, ProvinceCodedef migration_index(FileTittle,classname,direction,CodeDict): #CodeDict字典里所有城市的迁徙规模指数,以全国列表形式列出if direction == 'in' :nameofdire = '迁入'if direction == 'out':nameofdire = '迁出'#######创建一个workbook########workbook = xlsxwriter.Workbook(f'百度迁徙数据V3.1\\迁徙规模\\{FileTittle} {nameofdire}规模指数.xlsx')worksheet = workbook.add_worksheet('Sheet')#################写入行头各城市代码及其城市名###############if direction == 'in' :nameofdire = '迁入'if direction == 'out':nameofdire = '迁出'CitiesOrder = {} #存放城市序号的空字典worksheet.write(0 , 0 , '城市代码') #写入行头worksheet.write(0 , 1 , '城市') #写入行头times = 1for key , value in CodeDict.items():worksheet.write(times , 0 , str(value)) #写入城市代码worksheet.write(times , 1 , str(key)) #写入城市名CitiesOrder[str(key)] = times #写入城市序号字典 times += 1########################开始抓取数据##############################for Area , Code in CodeDict.items():url=f'http://huiyan.baidu.com/migration/historycurve.jsonp?dt={classname}&id={Code}&type=move_{direction}'print(f'{Area}:{url}')response=requests.get(url, timeout=2) # #发出请求并json化处理time.sleep(3) r=response.text[4:-1] #去头去尾data_dict=json.loads(r) #字典化if data_dict['errmsg']=='SUCCESS':data_list=data_dict['data']['list']counter_date = 2 #日期计数器datelist = []for date , index in data_list.items(): #按日期排序datelist.append(date)datelist.sort()for date in datelist:index = data_list[date]# print(f'{date} : {index}')worksheet.write(0 , counter_date , float(date))worksheet.write(CitiesOrder[str(Area)] , counter_date , float(index))counter_date += 1 #日期计数器自加一else:print('错误')workbook.close()quanguo = {'全国':0} #全国编码if __name__=="__main__":migration_index('城市','city','in',CitiesCode)migration_index('城市','city','out',CitiesCode)print('全部完成')
重点说明一下这个函数,migration_index(FileTittle,classname,direction,CodeDict)
,FileTittle是你要设定的文件夹的名字,仅作标识区分,你要写个狗蛋也行,自己能知道是啥就行了;classname是城市级别,如果你抓取城市级别数据就写city,抓取省份级别就写province,抓取全国的就写country,这和我的上一篇文章的这个部分是一样的;direction是迁徙方向,如果你要抓取迁入强度,就写in,抓取迁出强度就写out;CodeDict是需要你导入的带有城市编码的字典,如果想直接抓取全部城市或全部省份就直接导入我给的CitiesCode或ProvinceCode,具体参考“准备——城市编码”部分。
编辑日志
2020年5月4日:刚才有小伙伴私信我说今天的代码跑不了了,我看了一眼是因为数据的更新导致数据量变大了,而xlwt包写不了255列以上的数据,所以在这里我建议今后要使用代码且有一定条件的朋友改为调用xlsxwriter包,相关的代码当然也要同步更改。我也在这两天会把更新的代码放上来。另外感谢小伙伴们的支持!
2020年5月4日:把原来的xlwt包换成了xlsxwriter包,解决了无法写入超过255列的问题。
系列文章
【Python】基于Python的百度迁徙1——迁入、迁出数据(附代码)
【Python】基于Python的百度迁徙3——城内出行强度(附代码)
【Python】基于Python的百度迁徙4——上班和休闲指数(附代码)
-----------------------分割线(以下是乞讨内容)-----------------------
【Python】基于Python的百度迁徙2——迁徙规模指数(附代码)相关推荐
- 树莓派python实例_使用Python实现树莓派WiFi断线自动重连实例(附代码)
实现 WiFi 断线自动重连,原理是用 Python 监测网络是否断线,如果断线则重启网络服务.接下来给大家分享实现代码,需要的朋友参考下 1.Python 代码 autowifi.py,放在 /ho ...
- 基于蜣螂算法改进的随机森林回归算法 - 附代码
基于蜣螂算法改进的随机森林回归算法 - 附代码 文章目录 基于蜣螂算法改进的随机森林回归算法 - 附代码 1.数据集 2.RF模型 3.基于蜣螂算法优化的RF 4.测试结果 5.Matlab代码 6. ...
- 基于果蝇优化的BP神经网络(分类应用) - 附代码
基于果蝇优化的BP神经网络(分类应用) - 附代码 文章目录 基于果蝇优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.果蝇优化BP神经网络 3.1 BP神经 ...
- 基于布谷鸟优化的BP神经网络(分类应用) - 附代码
基于布谷鸟优化的BP神经网络(分类应用) - 附代码 文章目录 基于布谷鸟优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.布谷鸟优化BP神经网络 3.1 B ...
- 基于布谷鸟算法优化的Elman神经网络数据预测-附代码
基于布谷鸟算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于布谷鸟算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电 ...
- (DEAP)基于图卷积神经网络的脑电情绪识别(附代码)
1. 数据集介绍以及特征部分见上篇文章: DEAP数据集介绍以及特征提取部分 深度学习基于DEAP的脑电情绪识别情感分类(附代码)_qq_3196288251的博客-CSDN博客 2. 图卷积神经网络 ...
- 基于灰狼优化的BP神经网络(分类应用) - 附代码
基于灰狼优化的BP神经网络(分类应用) - 附代码 文章目录 基于灰狼优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.灰狼优化BP神经网络 3.1 BP神经 ...
- 基于鲸鱼算法优化的Elman神经网络数据预测-附代码
基于鲸鱼算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于鲸鱼算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...
- 基于海鸥算法优化的Elman神经网络数据预测-附代码
基于海鸥算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于海鸥算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...
- 基于鸟群优化的BP神经网络(分类应用) - 附代码
基于鸟群优化的BP神经网络(分类应用) - 附代码 文章目录 基于鸟群优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.鸟群优化BP神经网络 3.1 BP神经 ...
最新文章
- 2行代码实现小程序分享到朋友圈功能
- Oracle使用impdb/expdb数据泵导入/导出数据库
- Apache引起的wampserver安装好第二次使用无法启动问题
- Google App Engine:在您自己的域中托管应用程序
- .net backend return json string , used by frontend
- Android 系统(42)---使用BatteryHistorian分析和优化应用电量
- ORM正向和反向查询
- Rust_lings
- 《经济学通识》六、生命有限
- 互动让综艺再进化,「黑科技」如何让这届年轻人身临其境做戏精?
- vue3运行npm run serve无反应,选择跳转后会自动跳入文件路径中
- Android开发交流群
- 特殊符号(一)—反斜杠 ” \ “(旋转光标和倒计时的实现)
- docker desktop 运行mysql
- 小清丽微距花卉拍摄示范
- VBA脚本查找AS400 DSPMSG任务执行状态
- python画五星红旗
- 收音机主页网站服务器列表,谁有收音机频道列表,要山东的,越详细越好
- month(字段)、year(字段)
- 如何强行卸载电脑上面的恶心软件
热门文章
- ORACLE 查询表空间使用情况
- apache-hive-3.1.0-bin.tar.gz 下载
- java网上销售外文文献_基于java网上购物论文英文的参考文献欣赏
- 【游戏开发】免费开源游戏引擎
- 【数据结构】栈的基本操作
- 宾虹中学计算机课,【微宾中·从这里·再出发】宾虹中学2018届毕业典礼
- 最详细的Quartus + Modesim完整波形仿真过程
- python爬虫淘宝视频_python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据...
- 图解tcpip读书笔记
- GPS之Ublox方案设计