当前位置:首页 > Web开发 > 正文

color= ‘ #5d7092 ‘

2024-03-31 Web开发

爽性用django+pyecharts实现疫情数据可视化web页面:

要爬的数据来自丁香园、搜狗及百度的疫情实时动态展示页

先看看劳动成就:

导航栏:

技术图片

疫情地舆热力图:

技术图片

治愈/死亡折线图

技术图片

舆论词云:

技术图片

丁香园要爬的数据,这些数据用在阿谁地舆热力图上:

丁香园疫情实时动态(超链接)

技术图片

百度要爬的数据,历史数据,用在治愈/死亡折线图上:

百度疫情实时动态

技术图片

搜狗要爬的数据,用在导航栏那几个统计的总数:

搜狗疫情实时动态

技术图片

还有这里,用于获取媒体的文章。制作词云~

搜狗

技术图片

emmm...

正文:

爬虫:

爬这些数据其实很简单,需要的数据都在html源码里,直接用requests请求链接后用re匹配就行,而且这些网站甚至都不用伪造请求头来访谒。。。

爬虫代码:

import requests import json import re import time from pymongo import MongoClient def insert_item(item, type_): ‘‘‘ 插入数据到mongodb,item为要插入的数据,type_用来选择collection ‘‘‘ databaseIp=127.0.0.1 databasePort=27017 client = MongoClient(databaseIp, databasePort) mongodbName = dingxiang db = client[mongodbName] if type_ == dxy_map: # 更新插入 db.dxy_map.update({id: item[provinceName]}, {$set: item}, upsert=True) elif type_ == sogou: # 直接插入 db.sogou.insert_one(item) else: # 更新插入 db.baidu_line.update({},{$set: item}, upsert=True) print(item,插入告成) client.close() def dxy_spider(): ‘‘‘ 丁香园爬取,获取各省份简直诊数,用来做地舆热力图 ‘‘‘ url = https://ncov.dxy.cn/ncovh5/view/pneumonia r = requests.get(url) r.encoding = utf-8 res = re.findall(tryTypeService1 =(.*?)}catch, r.text, re.S) if res: # 获取数据的改削时间 time_result = json.loads(res[0]) res = re.findall(getAreaStat =(.*?)}catch, r.text, re.S) if res: # 获取省份确诊人数数据 all_result = json.loads(res[0]) for times in time_result: for item in all_result: if times[provinceName] == item[provinceName]: # 因为省份确诊人数的部分没有时间,这里将时间整合进去 item[createTime] = times[createTime] item[modifyTime] = times[modifyTime] insert_item(item,dxy_map) def sogou_spider(): ‘‘‘ 搜狗爬虫,获取所有确诊数、治愈数等,用在导航栏直接显示 ‘‘‘ url = r = requests.get(url=url) sum_res = re.findall("domesticStats":({"tim.*?}}),r.text) if sum_res: sum_result = json.loads(sum_res[0]) # 增加一个爬取时间字段 sum_result[crawl_time] = int(time.time()) insert_item(sum_result,sogou) def baidu_spider(): ‘‘‘ 百度爬虫,爬取历史数据,用来画折线图 ‘‘‘ url = https://voice.baidu.com/act/newpneumonia/newpneumonia r = requests.get(url=url) res = re.findall("degree":"3408"}],"trend":(.*?]}]}),r.text,re.S) data = json.loads(res[0]) insert_item(data,baidu_line) if __name__ == __main__: dxy_spider() sogou_spider() baidu_spider()

词云的数据筹备则麻烦一点,中文分词可是个麻烦事...

所以选了个精度还不错的pkuseg(pkuseg官方测试~)

技术图片

代码:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30163.html