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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值