大家好,接下來我們用python爬蟲技術爬取中國各省疫情確診人員數據,得到數據後自動生成中國地圖可視化界面。
可視化界面運用pyecharts模塊、selenium中的webdriver
第一:首先分析要爬取的網頁(百家號不可粘貼具體地址,見圖吧)
爬取思路:
通過分析網頁的原始碼,發現此網頁是動態生成的數據,所以這裡用webdriver來自動化地取動態網頁數據,獲取真正的網頁原始碼。然後通過正則來取我們需要的數據,即中國各省確診人數和省的名稱。最後通過pyecharts可視化地圖來展示我們的數據。接下來具體操作吧。
導入需要的庫文件:
from selenium import webdriverimport timeimport refrom pyecharts.charts import Mapfrom pyecharts import options as opts
第二:利用webdriver來自動化獲取動態的數據
要想自動獲取動態數據,我們應該要下載一個chromedriver.exe驅動文件,網上有很多,自己可以下載,放在一個地方,然後引用它就可以用了。如下:
driver=webdriver.Chrome(executable_path=r"D:\mySpider\jianshu\chromedriver\chromedriver.exe")
接下來就是通過這個驅動打開一個網頁,就是我們需要的網頁:
res=driver.get(urls)
此時打開一個網頁,就需要數據了,但網頁打開很慢的時候,我們取的數據可能為空,這時需要我們等網頁加載完之後再取數據,這裡我們用:
time.sleep(0.5)
好了,接下來就是取我們的真正的源文件了,通過page_source獲取。如下:
source=driver.page_source
第三:利用正則來獲取我們需要的數據,這裡是各省的名稱和各省的確診人數
代碼如下:
datalist=re.findall(r'<tr data-v-a1a493c8=""><th data-v-a1a493c8=""><p data-v-a1a493c8=""><span data-v-a1a493c8="">(.*?)</span></p><p data-v-a1a493c8=""></p></th><td data-v-a1a493c8=""><p data-v-a1a493c8="">(.*?)</p>',source)
這裡的datalist就是我們取的數據了,它的格式是多個字符串組成的tuple的一個列表
得到這個數據之後,我們通過pyecharts展示地圖可視化界面
第四:用pyecharts展示可視化界面
map=Map(opts.InitOpts(width='1024px',height='600px')).add(series_name='中國各省疫情分布',data_pair=datalist,maptype='china',is_map_symbol_show=False,)#設置配置項map.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) #不顯示國家名稱#設置圖例map.set_global_opts(title_opts=opts.TitleOpts(title='中國各省疫情情況'), #設置圖標題visualmap_opts=opts.VisualMapOpts(max_=400,is_piecewise=True))map.render('中國疫情分布.html')
最後通過render生成一個html,這時在你們目錄裡面就有一個html文件了,打開它,就可以看到效果了。效果如下: