前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一、通过requests库爬取数据并保存为csv文件

一、通过requests库爬取数据并保存为csv文件

作者头像
不温卜火
发布2020-10-28 16:36:08
1.5K0
发布2020-10-28 16:36:08
举报
文章被收录于专栏:不温卜火

此系列第一篇呀

一、选择数据源

网址:https://wp.m.163.com/163/page/news/virus_report/index.html?nw=1&anw=1

好了知道上面的我们就可以准备开始了。

首先我们先导入包和设置代理头

代码语言:javascript
复制
import requests
import pandas as pd
import time 
pd.set_option('max_rows',500)
headers = {  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}
url = 'https://c.m.163.com/ug/api/wuhan/app/data/list-total'   # 定义要访问的地址 
r = requests.get(url, headers=headers)  # 使用requests发起请求

这个时候我们请求以下:

7
7

由上图我们可以看到返回后的内容是一个几十万长度的字符串,由于字符串格式不方便进行分析,并且在网页预览中发现数据为类似字典的json格式,所以我们将其转为json格式。

代码语言:javascript
复制
import json
data_json = json.loads(r.text)
data_json.keys()
8
8

我们可以看出在data中存放着我们需要的数据,因此我们取出数据。

代码语言:javascript
复制
data = data_json['data']
data.keys()
10
10

数据中总共有四个键,每个键存储着不同的内容:

接下来我们开始获取实时数据。

三、整体代码实现

代码语言:javascript
复制
# =============================================
# --*-- coding: utf-8 --*--
# @Time    : 2020-03-27
# @Author  : 不温卜火
# @CSDN    : https://blog.csdn.net/qq_16146103
# @FileName: Real-time epidemic.py
# @Software: PyCharm
# =============================================
import requests
import pandas as pd
import json
import time

pd.set_option('max_rows',500)

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}

url = 'https://c.m.163.com/ug/api/wuhan/app/data/list-total'   # 定义要访问的地址
r = requests.get(url, headers=headers)  # 使用requests发起请求

data_json = json.loads(r.text)
data = data_json['data']
data_province = data['areaTree'][2]['children']
areaTree = data['areaTree']

class spider_yiqing(object):


    # 将提取数据的方法封装成函数
    def get_data(data, info_list):
        info = pd.DataFrame(data)[info_list]  # 主要信息

        today_data = pd.DataFrame([i['today'] for i in data])  # 提取today的数据
        today_data.columns = ['today_' + i for i in today_data.columns]

        total_data = pd.DataFrame([i['total'] for i in data])
        total_data.columns = ['total_' + i for i in total_data.columns]

        return pd.concat([info, total_data, today_data], axis=1)

    

    def save_data(data,name):
        file_name = name+'_'+time.strftime('%Y_%m_%d',time.localtime(time.time()))+'.csv'
        data.to_csv(file_name,index=None,encoding='utf_8_sig')
        print(file_name+'保存成功!')

    if __name__ == '__main__':
        today_province = get_data(data_province, ['id', 'lastUpdateTime', 'name'])
        today_world = get_data(areaTree, ['id', 'lastUpdateTime', 'name'])
        save_data(today_province, 'today_province')
        save_data(today_world, 'today_world')

4、总结

此程序代码有些许混乱,层次感不强。还有可能还有更高效的爬取手段。

  本次的分享就到这里了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、选择数据源
  • 三、整体代码实现
  • 4、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档