看啥推荐读物
专栏名称: 、Edgar
目录
相关文章推荐
今天看啥  ›  专栏  ›  、Edgar

从新浪微博上获取疫情最新信息

、Edgar  · 掘金  ·  · 2020-02-03 06:48
阅读 10

从新浪微博上获取疫情最新信息

# -*- coding:utf-8 -*-
"""
Author: Edgar
Created time:2/1/2020 12:06 PM
爬取新浪微博中的相关信息
"""
import os
import json
import requests
import pymysql


class Virus(object):
    def __init__(self):
        super(Virus, self).__init__()
        self.url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json"
        self.header = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"}

    def get_json(self):
        """获取加载出来的json"""
        response = requests.get(self.url, self.header)
        try:
            response.raise_for_status()
        except:
            print("获取json文件失败")
        else:
            return response.json()

    def download_json(self, filename='data.json'):
        """下载json文件"""
        flag = True
        json_ = self.get_json()
        print(json_)

        if not os.path.exists(filename):
            with open(filename, "w") as file:
                json.dump(json_, file)
        else:
            while flag:
                answer = input("该目录已经存在文件 %s,是否删除该文件(y/n):  " % filename)
                if answer in ['y', 'Y']:
                    with open(filename, 'w') as file:
                        json.dump(json_, file)
                    flag = False
                elif answer in ['n', 'N']:
                    return
                else:
                    print("输入错误,请重新输入: ")

    @staticmethod
    def create_table():
        connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')
        cursor = connect.cursor()
        # 创建一个表来保存每个省市的信息
        sql = "CREATE TABLE IF NOT EXISTS Virus_province(name VARCHAR(60) NOT NULL, ename varchar(20), value varchar(20), susNum varchar(20), deathNum varchar(20), cureNum varchar(20), city TEXT)"
        cursor.execute(sql)
        # 创建一个表来保存所有相关城市的相关信息
        sql = "CREATE TABLE IF NOT EXISTS Virus_city(province VARCHAR(20),name VARCHAR(20) NOT NULL ,conNum VARCHAR(20), susNum VARCHAR(20), cureNum VARCHAR(20), deathNum VARCHAR(20))"
        cursor.execute(sql)
        # 保存全球疫情信息
        sql = "CREATE TABLE IF NOT EXISTS Virus_world(name VARCHAR(20), value VARCHAR(20), susNum VARCHAR(20), deathNum VARCHAR(20), cureNum VARCHAR(20))"
        cursor.execute(sql)
        sql = "CREATE TABLE IF NOT EXISTS Virus_timeline(url varchar(100), title varchar(200), media varchar(40), date varchar(30));"
        cursor.execute(sql)
        connect.commit()
        cursor.close()
        connect.close()

    @staticmethod
    def insert_city(city):
        connect = pymysql.connect("localhost", 'root', "Edgar", 'virus')
        cursor = connect.cursor()
        sql = 'INSERT INTO virus_city(province,name, conNum, susNum, cureNum, deathNum) VALUES ("%s", "%s", "%s","%s","%s", "%s")' % (
            city.get("province"),
            city.get("name"),
            city.get("conNum"),
            city.get("susNum"),
            city.get("cureNum"),
            city.get("deathNum"))
        cursor.execute(sql)
        connect.commit()
        cursor.close()
        connect.close()

    @staticmethod
    def insert_province(province):
        connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')
        cursor = connect.cursor()
        sql = 'INSERT INTO virus_province(name, ename, value, susNum, deathNum, cureNum, city) VALUES("%s","%s","%s","%s","%s","%s","%s")' % (
            province.get("name"),
            province.get("ename"),
            province.get("value"),
            province.get("susNum"),
            province.get("deathNum"),
            province.get("cureNum"),
            ",".join([i.get("name") for i in province.get("city")])
        )
        cursor.execute(sql)
        connect.commit()
        cursor.close()
        connect.close()

    @staticmethod
    def insert_world(world):
        connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')
        cursor = connect.cursor()
        sql = 'INSERT INTO virus_world(name, value, susNum, deathNum, cureNum) VALUES ("%s","%s","%s","%s","%s")' % (
            world.get("name"), world.get("value"), world.get("susNum"),
            world.get("deathNum"), world.get("cureNum"))
        cursor.execute(sql)
        connect.commit()
        cursor.close()
        connect.close()

    @staticmethod
    def insert_timeline(data):
        connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')
        cursor = connect.cursor()
        sql = "INSERT INTO virus_timeline(url, title, media, date) VALUES('%s','%s','%s','%s')" % (
            data.get("url"), data.get("title"), data.get("media"),
            data.get("date"))
        cursor.execute(sql)
        connect.commit()
        cursor.close()
        connect.close()

    def upload_data(self):
        data_json = self.get_json()
        data = data_json.get("data").get("list")
        for i in data:
            self.insert_province(i)
            for city in i.get("city"):
                city["province"] = i.get("name")
                self.insert_city(city)

        for world in data_json.get("data").get("worldlist"):
            self.insert_world(world)
        self.get_timeline()

    def refresh_data(self):
        connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')
        cursor = connect.cursor()
        sql = 'TRUNCATE TABLE virus_province;'
        cursor.execute(sql)
        sql = "TRUNCATE TABLE virus_city;"
        cursor.execute(sql)
        sql = "TRUNCATE TABLE virus_world;"
        cursor.execute(sql)
        sql = "TRUNCATE TABLE virus_timeline;"
        cursor.execute(sql)
        connect.commit()
        cursor.close()
        connect.close()
        self.upload_data()

    def get_timeline(self):
        """获取timeline中的信息"""
        url = "https://interface.sina.cn/wap_api/wap_std_subject_feed_list.d.json?component_id=_conf_13|wap_zt_std_theme_timeline|http://news.sina.cn/zt_d/yiqing0121&page={}"
        count = 0
        while True:
            response = requests.get(url.format(count), headers=self.header)
            try:
                response.raise_for_status()
            except:
                return
            else:
                data = response.json().get("result").get("data").get("data")
                if data:
                    count += 1
                    for i in data:
                        self.insert_timeline(i)
                else:
                    return


if __name__ == '__main__':
    virus = Virus()
    # virus.create_table()
    # virus.download_json()

    # virus.upload_data()
    virus.refresh_data()
    # virus.get_timeline()

复制代码

爬取部分内容如下: virus_world:

namevaluesusNumdeathNumcureNum
中国1441119544304328
德国8300
西班牙1000
俄罗斯2000
柬埔寨1000
印度2000
阿联酋5000
斯里兰卡1000
泰国198407
韩国15000
日本20001
新加坡18000
菲律宾23110
马来西亚8400
越南7000
美国8001
澳大利亚12002
墨西哥0600
巴西0100
哥伦比亚0100
英国2500
意大利2200
加拿大4602
芬兰1000
尼泊尔1200
法国6000
科特迪瓦0100
瑞士0200
以色列0200
厄瓜多尔0100
瑞典1000

virus_city:

provincenameconNumsusNumcureNumdeathNum
北京海淀区41000
北京怀柔区1000
北京丰台区16000
北京大兴区22000
北京东城区3000
北京昌平区12000
北京西城区22000
北京朝阳区35000
北京石景山区5000
北京通州区13000
北京顺义区6000
北京门头沟区2000
北京房山区2000
北京外地来京人员11000
湖北武汉41090178224
湖北黄冈100202715
湖北孝感7490214
湖北荆门329037
湖北咸宁246010
湖北荆州333044
湖北襄阳441000
湖北随州384033
湖北十堰212020
湖北鄂州2780213
湖北黄石252082
湖北宜昌353001
湖北恩施州105040
湖北仙桃140003
湖北天门99007
湖北潜江35001
湖北神农架林区7020
广东广州179030
广东深圳207050
广东佛山43010
广东珠海47010
广东惠州23010
广东中山21000
广东阳江10000
广东东莞27000
广东湛江14010
广东汕头15000
广东清远6020
广东揭阳6000
广东肇庆7010
广东韶关5000
广东梅州7000
广东茂名3000
广东河源1000
广东汕尾4000
广东江门3000
广东潮州4000
浙江杭州110020
浙江宁波66010
浙江温州2650100
浙江湖州6000
浙江嘉兴19000
浙江绍兴27010
浙江金华34030
浙江衢州13000
浙江舟山7010
浙江台州100070
浙江丽水14010
河南郑州市65050
河南开封市11000
河南洛阳市7000
河南平顶山市14000
河南安阳市24000
河南鹤壁市8000
河南新乡市21000
河南焦作市7000
河南濮阳市3000
河南许昌市13000
河南漯河市16000
河南三门峡市7000
河南南阳市62012
河南商丘市36000
河南周口市40010
河南信阳市88040
河南驻马店市46000
河南滑县1000
河南长垣市2000
河南永城市8000
河南邓州市14000
湖南长沙市112020
湖南衡阳市30030
湖南株洲市25000
湖南湘潭市16000
湖南邵阳市49010
湖南岳阳市53000
湖南常德市42000
湖南张家界市3000
湖南益阳市27000
湖南郴州市18010
湖南永州市22020
湖南怀化市31010
湖南娄底市29010
湖南湘西自治州6010
重庆长寿11000
重庆武隆1000
重庆万州44000
重庆江津3000
重庆涪陵1000
重庆渝中9000
重庆黔江2000
重庆大渡口6000
重庆江北13000
重庆九龙坡11001
重庆沙坪坝2000
重庆南岸4000
重庆渝北12000
重庆巴南1000
重庆合川9000
重庆永川3010
重庆綦江4000
重庆大足4000
重庆璧山8000
重庆铜梁4000
重庆潼南2000
重庆荣昌3000
重庆开州16000
重庆梁平3000
重庆城口1000
重庆丰都5010
重庆垫江12000
重庆忠县15000
重庆云阳18010
重庆奉节8000
重庆巫山6030
重庆巫溪11000
重庆石柱10000
重庆秀山1010
重庆两江新区12000
安徽阜阳59000
安徽合肥59020
安徽马鞍山27000
安徽芜湖16010
安徽铜陵16000
安徽安庆43000
安徽亳州30020
安徽黄山9000
安徽滁州6000
安徽六安13010
安徽宿州14000
安徽蚌埠26000
安徽淮南6000
安徽宣城4010
安徽淮北6000
安徽池州6000
四川成都73031
四川南充23000
四川广安20010
四川绵阳14010
四川内江11000
四川德阳10000
四川自贡9000
四川攀枝花9000
四川达州9000
四川巴中8000
四川宜宾7000
四川泸州6000
四川广元5000
四川遂宁5000
四川雅安5000
四川甘孜州5000
四川凉山州5000
四川乐山2000
四川眉山2000
四川资阳2000
四川阿坝州1000
山东济南19000
山东青岛24010
山东淄博12000
山东枣庄15000
山东烟台20000
山东潍坊11000
山东济宁14010
山东泰安9000
山东威海24020
山东日照11000
山东临沂24000
山东德州19010
山东聊城9000
山东滨州10000
山东菏泽9000
吉林长春13010
吉林吉林3000
吉林松原2000
吉林四平1000
吉林公主岭1000
吉林通化1000
吉林延边2000
福建福州443800
福建莆田272100
福建漳州12500
福建泉州29700
福建三明111200
福建厦门18700
福建南平81300
福建龙岩1400
福建宁德9100
江西南昌89010
江西赣州34010
江西宜春31010
江西九江55000
江西抚州24000
江西上饶19010
江西新余43030
江西吉安12010
江西景德镇3010
江西萍乡15010
江西鹰潭8000
江苏南京35020
江苏无锡19000
江苏徐州30000
江苏常州15000
江苏苏州38030
江苏南通17000
江苏连云港13010
江苏淮安13010
江苏盐城15000
江苏扬州13000
江苏镇江3000
江苏泰州17000
江苏宿迁8000
上海外地来沪人员74000
上海浦东35000
上海静安9000
上海长宁7000
上海奉贤5000
上海徐汇7000
上海闵行9000
上海青浦2000
上海虹口5000
上海黄浦5000
上海宝山8000
上海嘉定2000
上海金山1000
上海松江7000
上海杨浦2000
上海普陀3000
上海崇明1000
广西南宁16000
广西柳州12000
广西桂林23000
广西北海23000
广西河池6000
广西防城港8010
广西玉林7000
广西梧州5010
广西百色2000
广西钦州2000
广西贵港4000
广西贺州3000
海南海口11000
海南三亚17020
海南儋州6000
海南万宁8000
海南琼海6000
海南东方1000
海南临高4000
海南定安1000
海南昌江1000
海南澄迈2001
海南陵水5000
海南琼中1000
海南乐东1000
陕西西安47000
陕西安康16000
陕西铜川6000
陕西咸阳9000
陕西汉中15000
陕西渭南5000
陕西宝鸡7000
陕西延安7000
陕西商洛2000
陕西榆林1000
陕西韩城1000
河北石家庄13000
河北廊坊11010
河北沧州19001
河北邯郸11000
河北保定13020
河北邢台10000
河北衡水4000
河北承德2000
河北唐山11000
河北张家口9000
河北秦皇岛1000
黑龙江哈尔滨34020
黑龙江齐齐哈尔3000
黑龙江牡丹江7000
黑龙江佳木斯11000
黑龙江大庆8000
黑龙江鸡西4000
黑龙江双鸭山4000
黑龙江七台河6000
黑龙江鹤岗1000
黑龙江绥化14002
黑龙江大兴安岭2000
黑龙江黑河1000
辽宁沈阳17000
辽宁大连11010
辽宁本溪3000
辽宁丹东6000
辽宁锦州7000
辽宁营口1000
辽宁阜新3000
辽宁辽阳2000
辽宁铁岭2000
辽宁朝阳6000
辽宁盘锦6000
辽宁葫芦岛5000
云南昆明31000
云南临沧1000
云南丽江6000
云南保山8000
云南德宏州3000
云南西双版纳12000
云南曲靖5010
云南玉溪11000
云南红河州5010
云南大理州7010
云南昭通6000
云南普洱4000
天津河北区9000
天津河东区9000
天津外地来津4000
天津河西区3000
天津和平区4000
天津南开区2000
天津宝坻区5000
天津西青区2000
天津宁河区3000
天津红桥区2000
天津滨海新区2000
天津东丽区3000
山西太原6010
山西晋城3000
山西朔州3000
山西晋中13000
山西运城10010
山西忻州3000
山西阳泉1000
山西大同8000
山西长治3000
山西临汾1000
山西吕梁5000
甘肃张掖2000
甘肃陇南3000
甘肃金昌1000
甘肃天水3000
甘肃平凉1000
甘肃甘南1000
甘肃兰州23000
甘肃临夏2000
甘肃定西3000
甘肃白银1000
内蒙古呼和浩特2000
内蒙古包头5200
内蒙古呼伦贝尔2010
内蒙古兴安盟1000
内蒙古通辽1000
内蒙古赤峰2000
内蒙古锡林郭勒2000
内蒙古鄂尔多斯6200
内蒙古巴彦淖尔3100
内蒙古乌兰察布2000
内蒙古乌海1000
贵州铜仁3010
贵州黔东南州4000
贵州遵义5000
贵州贵阳6010
贵州六盘水8000
贵州毕节4000
贵州黔南州5000
贵州黔西南州1000
贵州安顺2000
西藏拉萨1000
青海西宁11000
新疆乌鲁木齐8000
新疆伊犁州5000
新疆吐鲁番1000
新疆阿克苏1000
新疆第七师1000
新疆石河子1000
新疆第九师4000
宁夏银川16000
宁夏吴忠7000
宁夏中卫2100
宁夏固原2000
宁夏宁东1000

最新代码见 GitHub




原文地址:访问原文地址
快照地址: 访问文章快照