Python爬蟲實戰,requests+pyecharts模塊,Python實現新冠疫情數據可視化(附源碼)

前言

今天給大家介紹的是Python爬取新冠疫情數據並實現數據可視化,在這裏給需要的小夥伴們代碼,並且給出一點小心得。

首先是爬取之前應該儘可能僞裝成瀏覽器而不被識別出來是爬蟲,基本的是加請求頭,但是這樣的純文本數據爬取的人會很多,所以我們需要考慮更換代理IP和隨機更換請求頭的方式來對疫情網站數據進行爬取。

在每次進行爬蟲代碼的編寫之前,我們的第一步也是最重要的一步就是分析我們的網頁。

通過分析我們發現在爬取過程中速度比較慢,所以我們還可以通過禁用谷歌瀏覽器圖片、JavaScript等方式提升爬蟲爬取速度。

開發工具

Python版本: 3.8

相關模塊:

requests模塊

lxml模塊

openpyxl模塊

pandas模塊

pyecharts模塊

環境搭建

安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。

思路分析

瀏覽器中打開我們要爬取的頁面
按F12進入開發者工具,查看我們想要的疫情數據在哪裏
這裏我們需要頁面數據就可以了

代碼實現

Epidemic crawler.py

import requests
from lxml import etree
import json
import openpyxl

#通用爬蟲
url = 'https://voice.baidu.com/act/newpneumonia/newpneumonia'
headers = {
    "User-Agent": "換成自己瀏覽器的"
 }
response = requests.get(url=url,headers=headers).text
 #在使用xpath的時候要用樹形態
html = etree.HTML(response)
 #用xpath來獲取我們之前找到的頁面json數據  並打印看看
json_text = html.xpath('//script[@type="application/json"]/text()')
json_text = json_text[0]
print(json_text)


#用python本地自帶的庫轉換一下json數據
result = json.loads(json_text)
print(result)
#通過打印出轉換的對象我們可以看到我們要的數據都要key爲component對應的值之下,所以現在我們將值拿出來
result = result["component"]
#再次打印看看結果
print(result)
#獲取國內當前數據
result = result[0]['caseList']
print(result)


#創建工作簿
wb = openpyxl.Workbook()
#創建工作表
ws = wb.active
#設置表的標題
ws.title = "國內疫情"
#寫入表頭
ws.append(["省份","累計確診","死亡","治癒"])
#獲取各省份的數據並寫入
for line in result:
     line_name = [line["area"],line["confirmed"],line["died"],line["crued"]]
     for ele in line_name:
         if ele == '':
             ele = 0
     ws.append(line_name)
 #保存到excel中
wb.save('./china.xls')

User-Agent如何獲取

遇到的問題Excel xlsx file; not supported解決辦法

原因:xlrd1.2.0之後的版本不支持xlsx格式,支持xls格式

辦法一:

卸載新版本 pip uninstall xlrd

安裝老版本:pip install xlrd=1.2.0 (或者更早版本)

方法二:

將xlrd用到的excel版本格式修改爲xls(保險起見,另存爲xls格式)

疫情數據效果展示

Visualization.py

 #可視化部分
import pandas  as pd
from pyecharts.charts import Map,Page
from pyecharts import options as opts

#設置列對齊
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#打開文件
df = pd.read_excel('china.xls')
#對省份進行統計
data2 = df['省份']
data2_list = list(data2)
data3 = df['累計確診']
data3_list = list(data3)
data4 = df['死亡']
data4_list = list(data4)
data5 = df ['治癒']
data5_list = list(data5)

c = (
    Map()
       .add("治癒", [list(z) for z in zip(data2_list, data5_list)], "china")
      .set_global_opts(
         title_opts=opts.TitleOpts(),
         visualmap_opts=opts.VisualMapOpts(max_=200),
     )
)
c.render()

Cumulative = (
     Map()
     .add("累計確診", [list(z) for z in zip(data2_list, data3_list)], "china")
        .set_global_opts(
       title_opts=opts.TitleOpts(),
        visualmap_opts=opts.VisualMapOpts(max_=200),
    )
)
 
death = (
    Map()
      .add("死亡", [list(z) for z in zip(data2_list, data4_list)], "china")
     .set_global_opts(
        title_opts=opts.TitleOpts(),
        visualmap_opts=opts.VisualMapOpts(max_=200),
     )
)
 
cure = (
     Map()
        .add("治癒", [list(z) for z in zip(data2_list, data5_list)], "china")
         .set_global_opts(
      title_opts=opts.TitleOpts(),
      visualmap_opts=opts.VisualMapOpts(max_=200),
    )
)
 
page = Page(layout=Page.DraggablePageLayout)
page.add(
          Cumulative,
          death,
          cure,
)
#先生成render.html文件
page.render()

疫情數據數據可視化

最後

今天的分享到這裏就結束了 ,感興趣的朋友也可以去試試哈

對文章有問題的,或者有其他關於python的問題,可以在評論區留言或者私信我哦

覺得我分享的文章不錯的話,可以關注一下我,或者給文章點贊(/≧▽≦)/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章