python爬取百度迁徙数据_python爬虫-动态爬取百度迁徙

#1.模拟浏览器发送请求

importrequestsimportjsonimportpandas as pd

city_name=[]

province_name=[]

value=[]

url= 'https://huiyan.baidu.com/migration/cityrank.jsonp?dt=country&id=0&type=move_in&date=20200315&callback=jsonp_1590404076900_7186798'rq=requests.get(url)

rq.status_code

html= rq.content.decode('utf-8')#2.从html中提取信息#字符串预处理

html1 = html[28:-1]

data= json.loads(html1)['data']['list']for i inrange(len(data)):

city_name.append(data[i]['city_name']) #赋值给一个列表

province_name.append(data[i]['province_name'])

value.append(data[i]['value'])#3.数据的本地存储

move_in_data =pd.DataFrame({'迁入城市':city_name,'迁入省份':province_name,'比例':value

})

move_in_data.to_excel('./move_in_data.xlsx')

一、分析网站

首先我们来分析网站,动态爬取与静态爬取有些不同,寻找的数据就不在前端上面找了,而是在加载的文件中寻找

1951345-20200525185612612-1135017129.png

打开网页F12,一般我们先看js文件,如果没有,看看XHR等其他文件。按size排序,从大到小,查找数据

1951345-20200525185947332-671713880.png

点击Preview选项,一个个查找,可以看到这里与前端显示的数据是一样的,接下来我们就要爬取这个数据

二、爬取数据

1、模拟浏览器发送数据

importrequests

url= 'https://huiyan.baidu.com/migration/cityrank.jsonp?dt=country&id=0&type=move_in&date=20200315&callback=jsonp_1590404076900_7186798'rq=requests.get(url)

rq.status_code

html= rq.content.decode('utf-8')

当我们查看rq.status_code状态码时,返回为200,则说明没有设置反爬机制,不用设置header,若设置了反爬机制,状态码为418,就要像上一篇一样,设置header

1951345-20200525193312532-2072479552.png

此刻查看html,已经爬取下来了

2、提取html中数据

html1 = html[28:-1]

data= json.loads(html1)['data']['list']for i inrange(len(data)):

city_name.append(data[i]['city_name']) #赋值给一个列表,.append表示追加

province_name.append(data[i]['province_name'])

value.append(data[i]['value'])

我们想要的是data里面的数据,那么首先就要截取字典,{}里面的东西

1951345-20200525193445327-1472539230.png

有一个 方法是直接截取

html1 = html[28:-2]

28是第28位,-2是倒数二位,意思就是只要从48位到-2位之间的内容

输出html1为(注意{}的首位闭合)

1951345-20200525194053241-34109592.png

然后进行解析

data = json.loads(html1)

json.load(filename)

json.loads(string)

一个从文件加载,一个从内存加载

1951345-20200525195213706-1091991734.png

我们想要的是data里面的内容,可以直接

data = json.loads(html1)['data']

1951345-20200525195443654-229249418.png

读取字典中第一个列表的字段

data['list'][0]['city_name']

1951345-20200525200004878-1236765380.png

3、将数据保存在本地

move_in_data =pd.DataFrame({'迁入城市':city_name,'迁入省份':province_name,'比例':value

})

move_in_data.to_excel('./move_in_data.xlsx')

1951345-20200525201408897-1746562654.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python爬虫是一种程序,可以帮助我们从网页中提取数据,并将其保存为所需的格式。在本例中,我们可以使用Python爬取百度迁徙数据。 步骤如下: 1. 首先,我们需要导入必要的库。使用`import requests`导入`requests`库,这个库可以帮助我们发送HTTP请求并获取网页内容。 2. 然后,我们使用`requests.get()`函数发送一个GET请求,来获取百度迁徙网页的内容。我们将返回的结果保存在一个变量中,比如`response`。 3. 接下来,我们可以使用`response.text`来获取网页的HTML内容。 4. 然后,我们可以使用Python内置的HTML解析库,例如`BeautifulSoup`,来解析HTML内容,并提取我们想要的数据。可以使用`pip install beautifulsoup4`来进行安装。例如,我们可以使用`BeautifulSoup`来找到网页中相应的元素,并提取其文本内容。 5. 最后,我们可以将提取到的数据保存到所需的格式中。例如,我们可以将数据保存为CSV文件,使用`csv`库来进行操作,并将提取到的数据逐行写入CSV文件中。 总结一下,这是爬取百度迁徙数据的一般步骤。但是请注意,爬取网页内容时需要遵守相关的法律法规和网站的使用规定。另外,为了避免给网站造成过大的负担,我们应该合理设置爬取的频率,并遵守网站的robots.txt协议。 ### 回答2: 要使用Python爬取百度迁徙数据,首先需要安装Python的相关库,如requests和beautifulsoup4等。接下来的步骤如下: 1. 导入所需库:在Python代码的开头,导入需要使用的库,如requests和beautifulsoup4。 2. 准备URL:确定要爬取百度迁徙数据所在的URL。可以从百度迁徙网站找到相关的URL。 3. 发送HTTP请求:使用requests库发送HTTP请求,获取百度迁徙网站的HTML代码。 4. 解析HTML代码:使用beautifulsoup4库将获取的HTML代码进行解析,以便提取出需要的数据。 5. 提取数据:根据HTML代码的结构,使用beautifulsoup4库提供的函数提取出需要的数据,如迁徙数据、城市名称等。 6. 存储数据:可以将提取的数据存储到Excel文件、CSV文件或数据库中,以便后续的分析和使用。 7. 循环爬取:如果需要获取多个城市的迁徙数据,可以使用循环来遍历城市列表,不断发送HTTP请求和解析HTML代码,获取并存储数据。 需要注意的是,爬取网站数据要遵守相关的法律法规和伦理道德,尊重网站的服务协议和robots.txt文件,以免引起法律纠纷或侵犯他人的权益。使用爬虫时要尽量减少对网站的访问频率和负荷,以免给网站带来压力。 ### 回答3: Python可以利用第三方库来爬取百度迁徙数据百度迁徙是一个数据平台,可以查看人口迁徙的情况。以下是一个简单的示例代码: ```python import requests import json def get_migration_data(city, start_date, end_date): # 构建请求URL url = 'https://huiyan.baidu.com/migration/cityrank.jsonp?dt=city&id=' + city + '&type=move_in&startDate=' + start_date + '&endDate=' + end_date # 发送请求并获取数据 response = requests.get(url) data = response.text # 处理返回的json数据 data = data[data.index('{'):data.index('}')+1] result = json.loads(data) migration_data = result['data']['list'] # 返回迁徙数据 return migration_data # 示例用法 city = '110000' # 城市ID,以北京市为例 start_date = '20211101' # 开始日期 end_date = '20211110' # 结束日期 migration_data = get_migration_data(city, start_date, end_date) print(migration_data) ``` 以上代码中,使用`requests`库发送HTTP请求,并通过`json`库来处理返回的JSON数据。通过构建请求URL,将城市ID、开始日期和结束日期作为参数,可以获取该城市在指定时间范围内的迁徙数据。示例中的城市ID为北京市的ID,开始日期和结束日期为2021年11月1日至2021年11月10日。 请注意,百度迁徙数据接口可能会有变化,请根据最新的接口文档进行修改。另外,注意遵守网站的使用条款和相关法律法规。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值