实验六:利用request方法获取数据

一、目的

        本次实验通过使用request方法爬取目标数据,再使用pandas对数据进行清洗最后输出CSV保存。

二、实验环境

        Python 3.7(anaconda3 2020.02)

        Pycharm 2020.3.5

三、实验内容

        使用requests库获取腾讯疫情数据。可用到的参考代码:

import requests #导入requests
import pandas as pd #导入pandas
import json #导入json

#定义url
url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=localCityNCOVDataList,diseaseh5Shelf'

#爬取疫情数据
html = requests.get()

#展开数据
data = json.loads(html)['data']
……………………….
………………………..

#清洗数据
data_list = []
for i in data:
    data_dic={}
    data_dic['省份']=i['name']
data_list.append(data_dic)

#转位Dataframe导出为csv
df = pd.DataFrame(data_list).sort_values(by='当日新增',ascending=False)
df.to_csv('当日疫情数据.csv')

四、实验步骤

        1、获取url

        点进腾讯疫情网站(接口公开,可以用 request 方法获取数据),进去之后按键盘上的 F12 按键或者鼠标右键-->检查来打开控制台(这里用的是Edge浏览器)

         这里我们点击网络,再点击清除(为了待会儿方便查询)

        此时刷新网页,点击刚刚清除按钮旁边的查找,这里我们输入重庆二字并搜索,获得以下界面后双击

扫描二维码关注公众号,回复: 14625136 查看本文章

        这个时候在右边会返回一些值,我们点击标头->常规->请求URL,右键他,选择复制值。

        把刚刚复制的 url 在新的网页中打开,注意:我这里用了Edge浏览器的拓展工具“JSON Beauty Formatter”,不然我们新打开的这个网站的代码就会非常杂乱。

        至此,我们便获得了我们需要的 url。

        2、展开数据

        在 url 网页中我们可以看到,我们所要的信息位于 data->diseaseh5Shelf->areaTree 中的第一个子类里面,则我们可以用代码

data = json.loads(html)['data']['diseaseh5Shelf']['areaTree'][0]

        而我们所要获取的重庆区县的数据位于刚刚的 data 中的 children 的第6个子类的 children 中。因此我们可以使用代码

cqqx_data = data['children'][5]['children']

        注意,并不是每次打开都是在同一个位置

        至此,我们已经获取了重庆各区县的疫情信息。

        3、数据清洗

        将 cqqx_data (重庆区县的数据)放进字典,然后在放入 list 中。

data_list = []
for i in cqqx_data:
    data_dic = {}
    data_dic['区县名称'] = i['name']
    data_dic['新增无症状'] = i['today']['wzz_add']
    data_dic['新增确诊'] = i['today']['confirm']
    data_dic['总确诊人数'] = i['total']['nowConfirm']
    data_list.append(data_dic)

        4、 输出CSV保存

df = pd.DataFrame(data_list)
df.to_csv('重庆疫情数据.csv', encoding='utf-8')

#也可以输出Excel文件保存
#df.to_excel('重庆疫情数据.xlsx', encoding='utf-8')

五、代码实现

# 实验六 使用requests库获取腾讯疫情数据
import requests
import pandas as pd
import json

#获取的腾讯疫情的url
URL = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=localCityNCOVDataList,diseaseh5Shelf'

html = requests.get(URL, verify=False).content

#展开数据
data = json.loads(html)['data']['diseaseh5Shelf']['areaTree'][0] # 0代表第一个
cqqx_data = data['children'][5]['children'] # 5代表第6个

#数据清洗
data_list = []
for i in cqqx_data:
    data_dic = {}
    data_dic['区县名称'] = i['name']
    data_dic['新增无症状'] = i['today']['wzz_add']
    data_dic['新增确诊'] = i['today']['confirm']
    data_dic['总确诊人数'] = i['total']['nowConfirm']
    data_list.append(data_dic)

df = pd.DataFrame(data_list)
df.to_csv('重庆疫情数据.csv', encoding='utf-8') #采用'utf-8'格式编码,避免中文乱码

猜你喜欢

转载自blog.csdn.net/nazonomaster/article/details/127934472
今日推荐