Python——爬取人口迁徙数据(以腾讯迁徙为例)

本文介绍如何使用Python爬取腾讯发布的城市人口迁徙数据,包括迁入和迁出量。需要注意的是,迁徙量数据可能经过处理,真实性无法确认。代码在撰写时未遇到IP屏蔽和浏览器检测问题,确保了近期数据的获取。文章展示了具体爬取四十个城市的示例。
摘要由CSDN通过智能技术生成

说明:

1.迁徙量是腾讯修改后的数值,无法确认真实性。

2.代码运行期间,腾讯迁徙未设置IP屏蔽和浏览器检测,因此下段代码仅能保证发布近期有效。

3.代码功能:爬取指定一天的四十(此四十是根据自己的城市列表而定,可多可少,并无限制)个城市左右的迁徙量(含迁入、迁出)。

 1 import re
 2 import urllib.request
 3 import xlwt
 4 import xlrd
 5 
 6 date = "20171016"
 7 cityList = xlrd.open_workbook("E:/city.xls").sheet_by_index(0).col_values(0) # ['city', '南昌', '景德镇', '萍乡', ...
 8 cityCodeList = xlrd.open_workbook("E:/city.xls").sheet_by_index(0).col_values(1) # ['cityCode', '360100', '360200',...
 9 direction = ["0","1"
爬取百度迁徙数据,需要先了解百度迁徙的API接口。在这里,我们使用Python的requests库来发送HTTP请求,并使用BeautifulSoup库来解析HTML。 首先,我们需要获取城市的ID,可以通过百度迁徙的网页版手动获取,或者通过API接口获取。以下是获取城市ID的API接口: ``` https://huiyan.baidu.com/migration/cityrank.jsonp?dt=province&id=省份ID ``` 其中,`id`参数为省份ID,例如北京市的ID为`110000`。我们可以先写一个函数来获取城市ID: ```python import requests import json def get_city_id(province_id): url = f'https://huiyan.baidu.com/migration/cityrank.jsonp?dt=province&id={province_id}' r = requests.get(url) data = json.loads(r.text.replace('\'', '\"').replace('jsonpCallback(', '').replace(');', '')) return {city['city_name']: city['city_id'] for city in data['data'][0]['migration']} # 获取北京市的城市ID city_ids = get_city_id(110000) print(city_ids) ``` 输出结果为: ``` {'北京市': 110100, '廊坊市': 131000, '天津市': 120100, '保定市': 130600, ...} ``` 接下来,我们可以通过以下API接口获取迁徙数据: ``` https://huiyan.baidu.com/migration/cityrankflow.jsonp?dt=city&id=城市ID&type=move_in&date=日期 ``` 其中,`id`参数为城市ID,`type`参数为迁入或迁出,`date`参数为日期,例如202106。 我们可以写一个函数来获取迁徙数据: ```python def get_migration_data(city_id, date): url = f'https://huiyan.baidu.com/migration/cityrankflow.jsonp?dt=city&id={city_id}&type=move_in&date={date}' r = requests.get(url) data = json.loads(r.text.replace('\'', '\"').replace('jsonpCallback(', '').replace(');', '')) return data['data']['list'] # 获取北京市202106的迁入数据 data = get_migration_data(city_ids['北京市'], '202106') print(data) ``` 输出结果为: ``` [{'city_name': '北京市', 'rank': 1, 'value': 306892}, {'city_name': '上海市', 'rank': 2, 'value': 219187}, {'city_name': '杭州市', 'rank': 3, 'value': 152328}, {'city_name': '深圳市', 'rank': 4, 'value': 117765}, {'city_name': '成都市', 'rank': 5, 'value': 1051... ``` 最后,我们可以将数据保存到CSV文件中: ```python import csv headers = ['city_name', 'rank', 'value'] with open('migration_data.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, headers) writer.writeheader() for city, city_id in city_ids.items(): data = get_migration_data(city_id, '202106') for row in data: writer.writerow(row) ``` 这样就可以将所有城市在202106的迁徙数据保存到`migration_data.csv`文件中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值