zoukankan      html  css  js  c++  java
  • python 爬虫json数据解析——实例搜狗新型肺炎疫情数据爬取

    1.首先登录搜狗网http://sa.sogou.com/new-weball/page/sgs/epidemic?type_page=pcpop

    2.刷新找到数据https://lspengine.map.sogou.com/coronavirus/epidemic/search/area/info(爬取时填写的url)

    3.分析json数据结构:

     4.清洗数据保存:

     异常数据1:有的市没有“confirmedCount”,“suspectedCount”等属性

     异常数据2:特别行政区不存在“cities”属性

     源代码:

    import requests                     #用于请求网页获取网页数据
    import csv
    import os
    import json
    
    #创建csv
    outPath = 'D://yiqing_data.csv'
    if (os.path.exists(outPath)):
        os.remove(outPath)
    else:
        fp = open(outPath, 'wt', newline='', encoding='utf-8')  # 创建csv
        writer = csv.writer(fp)
        writer.writerow(('provinceName', 'cityName', 'confirmedCount', 'curedCount', 'deadCount', 'suspectedCount'))
    #定义获取json数据的函数
    def get_info(url):
        # 加入请求头
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
        }
        res = requests.get(url, headers=headers)
        # 将 JSON 对象转换为 Python 字典
        json_data = json.loads(res.text)
        return json_data
    
    #处理json数据
    def parse_data(data):
        for item in data['area']:
            print(item['provinceName'])
            writer.writerow((item['provinceName'], item['provinceName'], item['confirmedCount'], item['curedCount'],
                             item['deadCount'], item['suspectedCount']))
            if('cities' in item.keys()):
                for city in item['cities']:
                    print(city['cityName'])
                    if("suspectedCount" in city.keys()):#如果有确诊的,一定会有疑似的;那么没有疑似的则一定也没有确诊的
                        writer.writerow((item['provinceName'], city['cityName'], city['confirmedCount'], city['curedCount'],
                                         city['deadCount'], city['suspectedCount']))
                    else:
                        writer.writerow((item['provinceName'], city['cityName'], '0', '0', '0', '0'))
            else:#排除类似特别行政区的
                pass
    
    #程序主入口
    if __name__ == '__main__':
        url = 'https://lspengine.map.sogou.com/coronavirus/epidemic/search/area/info'
        data=get_info(url)
        '''
        for dict_data in data['area']:
            print(dict_data)
        '''
        parse_data(data)

    生成csv截图:

  • 相关阅读:
    第六周学习总结
    20165227 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
    第五周学习总结
    20165227 20165228结对学习感想
    第四周课堂测试补做
    第四周作业
    20165227第三周学习总结
    第二周学习总结
    20165304《JAVA程序设计》第四周学习总结
    20165304 2017-2018-2 《Java程序设计》第3周学习总结
  • 原文地址:https://www.cnblogs.com/sengzhao666/p/12335379.html
Copyright © 2011-2022 走看看