python爬取丁香园的疫情数据绘制Echarts地图
生活随笔
收集整理的這篇文章主要介紹了
python爬取丁香园的疫情数据绘制Echarts地图
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2020.2.4更新
完整的項(xiàng)目工程地址https://github.com/Arithmeticjia/wuhan
2020.1.26更新
幾乎每天頁(yè)面都在變,放一下最新的爬蟲(chóng)代碼,由于頁(yè)面需要滾動(dòng),加入了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') # 設(shè)置option,后臺(tái)運(yùn)行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'})# 每個(gè)省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、軟件準(zhǔn)備
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'}) # 每個(gè)省 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)拿到的數(shù)據(jù)大概是這樣
{'湖北': '549', '廣東': '53', '浙江': '43', '北京': '26', '上海': '20', '湖南': '9', '安徽': '15', '重慶': '27', '四川': '15', '山東': '9', '廣西': '13', '福建': '5', '江蘇': '9', '河南': '9', '海南': '8', '天津': '5', '江西': '7', '陜西': '3', '貴州': '3', '遼寧': '3', '香港': '2', '黑龍江': '4', '澳門(mén)': '2', '新疆': '2', '甘肅': '2', '云南': '2', '臺(tái)灣': '1', '山西': '1', '吉林': '3', '河北': '2', '寧夏': '1', '內(nèi)蒙古': 0}這是一個(gè)字典
然后交給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'})# 每個(gè)省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)然后就來(lái)到了html,你可以理解為django返回了一個(gè)字典格式
對(duì)于echarts來(lái)說(shuō),它需要的數(shù)據(jù)格式是
var datavirus=[{name:"南海諸島",value: 0},{name: '北京', value: 14},{name: '天津', value: 4},{name: '上海', value: 16},{name: '重慶', value: 9},{name: '河北', value: 1},...... ]那么從django返回?cái)?shù)據(jù)就是這樣用
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/寫(xiě)博客.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;}/*默認(rèn)長(zhǎng)寬比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: '內(nèi)蒙古', 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: '臺(tái)灣', value: virus(1)},{name: '香港', value: virus(1)},{name: '澳門(mén)', 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: '內(nèi)蒙古', 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: '臺(tái)灣', value: 1},{name: '香港', value: 1},{name: '澳門(mén)', 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: {//主標(biāo)題文本樣式{"fontSize": 18,"fontWeight": "bolder","color": "#333"}fontSize:28,color: '#fff'},},tooltip: {formatter:function(params,ticket, callback){return params.seriesName+'<br />'+params.name+':'+params.value}//數(shù)據(jù)格式化},visualMap: {min: 0,max: 50,align: 'auto',{#type: 'piecewise', //是否連續(xù)#}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,//不開(kāi)啟縮放和平移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',//鼠標(biāo)選擇區(qū)域顏色shadowOffsetX: 0,shadowOffsetY: 0,shadowBlur: 20,borderWidth: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}},series : [{name: '確診人數(shù)',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+"確診人數(shù)"+params.data['value']);});/* setTimeout(function () {myChart.setOption({series : [{name: '信息量',type: 'map',geoIndex: 0,data:dataList}]});},1000)*/</script> </body> </html>?
總結(jié)
以上是生活随笔為你收集整理的python爬取丁香园的疫情数据绘制Echarts地图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 工信部、公安部、交通部:拟将自动驾驶汽车
- 下一篇: bcdedit用法详解