日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬取丁香园的疫情数据绘制Echarts地图

發布時間:2024/1/8 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取丁香园的疫情数据绘制Echarts地图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2020.2.4更新

完整的項目工程地址https://github.com/Arithmeticjia/wuhan

2020.1.26更新

幾乎每天頁面都在變,放一下最新的爬蟲代碼,由于頁面需要滾動,加入了selenium

def china_wuhan(request):import requestsfrom bs4 import BeautifulSoupfrom selenium import webdrivertry:target = 'https://3g.dxy.cn/newh5/view/pneumonia?scene=2&clicktime=1579579384&enterid=1579579384&from=groupmessage&isappinstalled=0'# req = requests.get(url=target)# req.encoding = 'urf-8'# html = req.textoption = webdriver.ChromeOptions()option.add_argument('headless') # 設置option,后臺運行driver = webdriver.Chrome(chrome_options=option)driver.get(target)js = "var q=document.documentElement.scrollTop=1500"driver.execute_script(js)selenium_page = driver.page_sourcedriver.quit()soup = BeautifulSoup(selenium_page, 'html.parser')cities = soup.find('div', {'class': 'areaBox___3jZkr'})# 每個省protocols = cities.find_all('div')data = {}for i in protocols:try:first = i.find('div', {'class': 'areaBlock1___3V3UU'})content = first.find_all('p')name = content[0].get_text()num = content[1].get_text()if num == "":num = 0data['{}'.format(name)] = numexcept AttributeError as e:continueexcept:data = {}context = {'data': data}return render(request, 'china-wuhan.html', context=context)

?

1、軟件準備

1、Django2.1 2、request 3、bs4

?

import requests from bs4 import BeautifulSouptarget = 'https://3g.dxy.cn/newh5/view/pneumonia?scene=2&clicktime=1579579384&enterid=1579579384&from=groupmessage&isappinstalled=0' req = requests.get(url=target) req.encoding = 'urf-8' html = req.text soup = BeautifulSoup(html, 'html.parser') cities = soup.find('div', {'class': 'areaBox___3jZkr'}) # 每個省 protocols = cities.find_all('div') data = {}for i in protocols:try:first = i.find('div', {'class': 'areaBlock1___3V3UU'})content = first.find_all('p')name = content[0].get_text()num = content[1].get_text()print(num)if num == "":num = 0data['{}'.format(name)] = numprint('疫情:', name, '確診', num, '例')except AttributeError as e:continue print(data)

拿到的數據大概是這樣

{'湖北': '549', '廣東': '53', '浙江': '43', '北京': '26', '上海': '20', '湖南': '9', '安徽': '15', '重慶': '27', '四川': '15', '山東': '9', '廣西': '13', '福建': '5', '江蘇': '9', '河南': '9', '海南': '8', '天津': '5', '江西': '7', '陜西': '3', '貴州': '3', '遼寧': '3', '香港': '2', '黑龍江': '4', '澳門': '2', '新疆': '2', '甘肅': '2', '云南': '2', '臺灣': '1', '山西': '1', '吉林': '3', '河北': '2', '寧夏': '1', '內蒙古': 0}

這是一個字典

然后交給Django返回

def china_wuhan(request):import requestsfrom bs4 import BeautifulSouptarget = 'https://3g.dxy.cn/newh5/view/pneumonia?scene=2&clicktime=1579579384&enterid=1579579384&from=groupmessage&isappinstalled=0'req = requests.get(url=target)req.encoding = 'urf-8'html = req.textsoup = BeautifulSoup(html, 'html.parser')cities = soup.find('div', {'class': 'areaBox___3jZkr'})# 每個省protocols = cities.find_all('div')data = {}for i in protocols:try:first = i.find('div', {'class': 'areaBlock1___3V3UU'})content = first.find_all('p')name = content[0].get_text()num = content[1].get_text()print(num)if num == "":num = 0data['{}'.format(name)] = numexcept AttributeError as e:continuecontext = {'data': data}return render(request, 'china-wuhan.html', context=context)

然后就來到了html,你可以理解為django返回了一個字典格式

對于echarts來說,它需要的數據格式是

var datavirus=[{name:"南海諸島",value: 0},{name: '北京', value: 14},{name: '天津', value: 4},{name: '上海', value: 16},{name: '重慶', value: 9},{name: '河北', value: 1},...... ]

那么從django返回數據就是這樣用

data: [{% for key,value in data.items%}{value:{{ value }}, name:'{{ key }}'},{% endfor %}]

展示鏈接https://www.guanacossj.com/china-wuhan/

下面放一下完整的html代碼,自行修改

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><link rel="shortcut icon" href="/static/images/寫博客.png"><title>武漢加油</title><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/><script src="/static/china/dist/echarts.js"></script><script src="/static/china/map/js/china.js"></script><style>*{margin:0;padding:0}html,body{width:100%;height:100%;}#main{width:850px;height:637.5px;margin: 150px auto;border:1px solid #ddd;}/*默認長寬比0.75*/</style> </head> <body><div id="main"></div><script type="text/javascript">var dataList=[{name:"南海諸島",value: virus(0)},{name: '北京', value: virus(14)},{name: '天津', value: virus(4)},{name: '上海', value: virus(16)},{name: '重慶', value: virus(9)},{name: '河北', value: virus(1)},{name: '河南', value: virus(5)},{name: '云南', value: virus(1)},{name: '遼寧', value: virus(3)},{name: '黑龍江', value: virus(1)},{name: '湖南', value: virus(9)},{name: '安徽', value: virus(9)},{name: '山東', value: virus(6)},{name: '新疆', value: virus(0)},{name: '江蘇', value: virus(1)},{name: '浙江', value: virus(10)},{name: '江西', value: virus(3)},{name: '湖北', value: virus(444)},{name: '廣西', value: virus(5)},{name: '甘肅', value: virus(0)},{name: '山西', value: virus(1)},{name: '內蒙古', value: virus(-1)},{name: '陜西', value: virus(4)},{name: '吉林', value: virus(1)},{name: '福建', value: virus(4)},{name: '貴州', value: virus(3)},{name: '廣東', value: virus(32)},{name: '青海', value: virus(0)},{name: '西藏', value: virus(0)},{name: '四川', value: virus(8)},{name: '寧夏', value: virus(1)},{name: '海南', value: virus(4)},{name: '臺灣', value: virus(1)},{name: '香港', value: virus(1)},{name: '澳門', value: virus(2)}];var datavirus=[{name:"南海諸島",value: 0},{name: '北京', value: 14},{name: '天津', value: 4},{name: '上海', value: 16},{name: '重慶', value: 9},{name: '河北', value: 1},{name: '河南', value: 5},{name: '云南', value: 1},{name: '遼寧', value: 3},{name: '黑龍江', value: 1},{name: '湖南', value: 9},{name: '安徽', value: 9},{name: '山東', value: 6},{name: '新疆', value: 0},{name: '江蘇', value: 1},{name: '浙江', value: 10},{name: '江西', value: 3},{name: '湖北', value: 444},{name: '廣西', value: 5},{name: '甘肅', value: 0},{name: '山西', value: 1},{name: '內蒙古', value: 0},{name: '陜西', value: 4},{name: '吉林', value: 1},{name: '福建', value: 4},{name: '貴州', value: 3},{name: '廣東', value: 32},{name: '青海', value: 0},{name: '西藏', value: 0},{name: '四川', value: 8},{name: '寧夏', value: 1},{name: '海南', value: 5},{name: '臺灣', value: 1},{name: '香港', value: 1},{name: '澳門', value: 2}];var myChart = echarts.init(document.getElementById('main'));function randomValue() {return Math.round(Math.random()*1000);}function virus(num){if (num === 0){return 0;}else if(num >= 1 && num <= 9){return 2;}else if(num >=10 && num <= 100){return 3;}else if(num > 100){return 4;}elsereturn 1;}option = {backgroundColor: '#404a59',title: {text: '武漢',x: 'center',textStyle: {//主標題文本樣式{"fontSize": 18,"fontWeight": "bolder","color": "#333"}fontSize:28,color: '#fff'},},tooltip: {formatter:function(params,ticket, callback){return params.seriesName+'<br />'+params.name+':'+params.value}//數據格式化},visualMap: {min: 0,max: 50,align: 'auto',{#type: 'piecewise', //是否連續#}left: 'left',top: 'bottom',text: ['高','低'], //取值范圍的文字{#categories: [#}{# '0','1','2','3','4','5','6','7','8','9','10','14','16','32','444',#}{#],#}inRange: {color: ['#fdfff8','#f0a23f','#dd5340','#dd292f','#DD2020'],{#color: {#}{# '0':'#fcffde',#}{# '1':'#ffaa2a',#}{# '2':'#ffaa2a',#}{# '3':'#ffaa2a',#}{# '4':'#ffaa2a',#}{# '5':'#ffaa2a',#}{# '6':'#ffaa2a',#}{# '7':'#ffaa2a',#}{# '8':'#ffaa2a',#}{# '9':'#ffaa2a',#}{# '10':'#f06a5c',#}{# '14':'#f06a5c',#}{# '16':'#f06a5c',#}{# '32':'#f06a5c',#}{# '444':'#dd292f',#}//取值范圍的顏色},show:false//圖注},geo: {map: 'china',roam: false,//不開啟縮放和平移zoom:1.23,//視角縮放比例label: {normal: {show: true,fontSize:'10',color: 'rgba(0,0,0,0.7)'}},itemStyle: {normal:{borderColor: 'rgba(0, 0, 0, 0.2)'},emphasis:{areaColor: '#53adf3',//鼠標選擇區域顏色shadowOffsetX: 0,shadowOffsetY: 0,shadowBlur: 20,borderWidth: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}},series : [{name: '確診人數',type: 'map',geoIndex: 0,data: [{% for key,value in data.items%}{value:{{ value }}, name:'{{ key }}'},{% endfor %}]}]};myChart.setOption(option);myChart.on('click', function (params) {alert(params.name+"確診人數"+params.data['value']);});/* setTimeout(function () {myChart.setOption({series : [{name: '信息量',type: 'map',geoIndex: 0,data:dataList}]});},1000)*/</script> </body> </html>

?

總結

以上是生活随笔為你收集整理的python爬取丁香园的疫情数据绘制Echarts地图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。