帮我用python写一个爬取百度迁徙全国热门城市迁入迁出数据的代码
时间: 2023-09-23 09:10:15 浏览: 126
好的,以下是Python爬取百度迁徙全国热门城市迁入迁出数据的代码:
```python
import requests
from bs4 import BeautifulSoup
url = 'https://huiyan.baidu.com/migration/cityrank.jsonp?dt=city&id=420100&type=move_out&date=20210101&callback=jsonp_1627648939140_83894'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
print(soup.prettify())
```
其中,我们通过requests库向目标URL发送GET请求,获取到返回的HTML代码,然后使用BeautifulSoup库解析HTML代码,最后打印出来。这里的URL是获取武汉市(id=420100)迁出数据的URL,你可以根据需要修改URL中的参数来获取其他城市的数据。
请注意,以上代码仅供学习参考,如需商用请遵守相关法律法规。
相关问题
帮我写一个python爬取百度地图全国迁出迁入数据
当然,我可以帮您解决这个问题。您可以使用Python中的requests库和BeautifulSoup库来爬取百度地图的迁徙数据。这里有一个示例代码,可以供您参考:
```python
import requests
from bs4 import BeautifulSoup
url = "https://huiyan.baidu.com/migration/cityrank.jsonp?dt=city&id=1&type=move_out&date=20210101&callback=jsonp_1610058490762_32804"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
data = soup.text.strip()[19:-1]
print(data)
```
这段代码可以获取2021年1月1日的全国迁出数据。您可以根据需要修改日期和数据类型。希望能对您有所帮助!
利用Python爬取百度迁徙获取城市级别的迁徙数据
要爬取百度迁徙的数据,需要先了解百度迁徙的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`文件中了。
阅读全文