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——迁徙规模指数(附代码)相关推荐

  1. 树莓派python实例_使用Python实现树莓派WiFi断线自动重连实例(附代码)

    实现 WiFi 断线自动重连,原理是用 Python 监测网络是否断线,如果断线则重启网络服务.接下来给大家分享实现代码,需要的朋友参考下 1.Python 代码 autowifi.py,放在 /ho ...

  2. 基于蜣螂算法改进的随机森林回归算法 - 附代码

    基于蜣螂算法改进的随机森林回归算法 - 附代码 文章目录 基于蜣螂算法改进的随机森林回归算法 - 附代码 1.数据集 2.RF模型 3.基于蜣螂算法优化的RF 4.测试结果 5.Matlab代码 6. ...

  3. 基于果蝇优化的BP神经网络(分类应用) - 附代码

    基于果蝇优化的BP神经网络(分类应用) - 附代码 文章目录 基于果蝇优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.果蝇优化BP神经网络 3.1 BP神经 ...

  4. 基于布谷鸟优化的BP神经网络(分类应用) - 附代码

    基于布谷鸟优化的BP神经网络(分类应用) - 附代码 文章目录 基于布谷鸟优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.布谷鸟优化BP神经网络 3.1 B ...

  5. 基于布谷鸟算法优化的Elman神经网络数据预测-附代码

    基于布谷鸟算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于布谷鸟算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电 ...

  6. (DEAP)基于图卷积神经网络的脑电情绪识别(附代码)

    1. 数据集介绍以及特征部分见上篇文章: DEAP数据集介绍以及特征提取部分 深度学习基于DEAP的脑电情绪识别情感分类(附代码)_qq_3196288251的博客-CSDN博客 2. 图卷积神经网络 ...

  7. 基于灰狼优化的BP神经网络(分类应用) - 附代码

    基于灰狼优化的BP神经网络(分类应用) - 附代码 文章目录 基于灰狼优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.灰狼优化BP神经网络 3.1 BP神经 ...

  8. 基于鲸鱼算法优化的Elman神经网络数据预测-附代码

    基于鲸鱼算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于鲸鱼算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...

  9. 基于海鸥算法优化的Elman神经网络数据预测-附代码

    基于海鸥算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于海鸥算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...

  10. 基于鸟群优化的BP神经网络(分类应用) - 附代码

    基于鸟群优化的BP神经网络(分类应用) - 附代码 文章目录 基于鸟群优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.鸟群优化BP神经网络 3.1 BP神经 ...

最新文章

  1. 2行代码实现小程序分享到朋友圈功能
  2. Oracle使用impdb/expdb数据泵导入/导出数据库
  3. Apache引起的wampserver安装好第二次使用无法启动问题
  4. Google App Engine:在您自己的域中托管应用程序
  5. .net backend return json string , used by frontend
  6. Android 系统(42)---使用BatteryHistorian分析和优化应用电量
  7. ORM正向和反向查询
  8. Rust_lings
  9. 《经济学通识》六、生命有限
  10. 互动让综艺再进化,「黑科技」如何让这届年轻人身临其境做戏精?
  11. vue3运行npm run serve无反应,选择跳转后会自动跳入文件路径中
  12. Android开发交流群
  13. 特殊符号(一)—反斜杠 ” \ “(旋转光标和倒计时的实现)
  14. docker desktop 运行mysql
  15. 小清丽微距花卉拍摄示范
  16. VBA脚本查找AS400 DSPMSG任务执行状态
  17. python画五星红旗
  18. 收音机主页网站服务器列表,谁有收音机频道列表,要山东的,越详细越好
  19. month(字段)、year(字段)
  20. 如何强行卸载电脑上面的恶心软件

热门文章

  1. ORACLE 查询表空间使用情况
  2. apache-hive-3.1.0-bin.tar.gz 下载
  3. java网上销售外文文献_基于java网上购物论文英文的参考文献欣赏
  4. 【游戏开发】免费开源游戏引擎
  5. 【数据结构】栈的基本操作
  6. 宾虹中学计算机课,【微宾中·从这里·再出发】宾虹中学2018届毕业典礼
  7. 最详细的Quartus + Modesim完整波形仿真过程
  8. python爬虫淘宝视频_python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据...
  9. 图解tcpip读书笔记
  10. GPS之Ublox方案设计