全球地震 Python 爬虫可视化,最频发的地方是这里!
不知道各位有沒有發現,近期世界各地的地震頻率很頻繁,微博上時常報到哪里哪里又發生地震了。不知道地球是咋了,不過自然會聯想到一個問題:這些地震之間有沒有什么聯系?
url:http://news.ceic.ac.cn/index.html
在該網站可以查看最新的全球地震信息,還支持地圖顯示地震信息,歷史查詢等。
毫無疑問,這句是我們需要的網站,那么我們接下來就來實現最近一年全球所有的地震信息爬取。
網站分析
首先,根據我們設計的需求,我們需要爬取最近一年的所有地震信息,我們找到快捷查詢,按時間選擇最近一年內地震,即可顯示最近一年地震信息。
可以看到一共有59頁,所以我們需要分析翻頁URL。
試著點擊第二頁,第三頁或尾頁,我們可以發現網站的URL是固定不變的,我們大概率可以確定這些數據的加載來源都是通過后臺js加載得到的,我門進行再次驗證。
我們f12進入谷歌開發者模式,查看選擇第二頁對應的Elements模塊的內容,可以看出 href="javascript:void (0)",很明顯是通過js加載的。
我們還可以把網頁設置啟用或禁用JavaScript,可通過瀏覽器設置,也可以通過谷歌瀏覽器插件實現,推薦一下我使用的插件Toggle JavaScript。
比如,我們點一下這個插件便簽然后再刷新網站試試,根據頁面顯示內容足以證明我們的猜想。
接下來,我們就需要找到它的加載js內容文件或者使用最直接的selenium進行實現。
我們在開發者模式中選擇Network模塊點擊XHR,然后點擊第二頁,第三頁,多點幾頁,在這個過程中你會發現每點擊一頁增加一個文件。
可以基本確定,這就是我們需要的,點擊進去查看,Response有需要的內容,把鏈接復制到瀏覽器打開查看。
可以明顯看出,這就是我們需要的數據,那么我們可以知道,每一頁就是一個這個文件內容,我們只要構造59個這樣的URL鏈接進行爬取即可。
URL鏈接為:
http://www.ceic.ac.cn/ajax/speedsearch?num=6&&page=1&&callback=jQuery18009545762559523003_1565244345462&_=1565244347921
http://www.ceic.ac.cn/ajax/speedsearch?num=6&&page=2&&callback=jQuery18009545762559523003_1565244345462&_=1565244352936
http://www.ceic.ac.cn/ajax/speedsearch?num=6&&page=3&&callback=jQuery18009545762559523003_1565244345462&_=1565244355966
_是動態的就是可變的,其他都是不變的,看到這一串東西,如果有經驗一看就知道是時間戳了,我們來驗證下。
我們可以試著把1565244347921 這串數據變成當前時間看看,這就是我剛剛登錄的時間。
分析到這里,我們可以構造爬取URL了,接下來我們進行爬蟲代碼實現吧。
小提示,其實根據我的驗證:
http://www.ceic.ac.cn/ajax/speedsearch?num=6&&page=1&&callback=jQuery18009545762559523003_1565244345462&_=1565244347921
http://www.ceic.ac.cn/ajax/speedsearch?num=6&&page=1
這兩個URL返回的內容是完全一樣的,所以我要說啥,你懂得!
爬蟲代碼實現
爬蟲實現的基本三步:
發起請求,獲取網頁
解析提取網頁內容
數據存儲
驗證是否可獲得內容,requests發起請求,cchardet的作用是判斷編碼類型。
第一步,requests發起請求,進行網頁下載。主要定義了ua用戶代理,處理了編碼類型問題,做了個網頁狀態碼驗證是否為200成功,成功則返回頁面內容信息。
第二步,進行返回內容解析,很簡單,直接把它轉為字典形式,根據key提取value即可完成內容解析工作。
第三步,進行數據保存為csv文件格式。
最后,構造59頁URL進行爬取即可。
爬取結果如下:
其實還有個更方便直接的方法,就是這個網站還是很友好的,他可以直接保存數據到本地,下載xls數據文件。
不過,這樣的話有些信息就得不到了,根據個人所需選擇數據獲取方式即可。當然這里只是爬取了最近一年的全球地震數據,你也可以根據自己定義時間爬取更多,方式是一樣的,授人以魚不如授人以漁,“漁“已經教給你了,接下來就很容易了。下圖就是歷史查詢,根據自己定義時間等進行數據顯示后進行爬取即可。
數據可視分析
首先,查看一下數據。
近一年全球震級級別最高的十個地方
先來看一看近一年全球震級級別最高的十個地方是哪些,關鍵代碼編寫如下:
結果可視化如下圖:
可以看到,地震級別最高的分別是斐濟群島地區和秘魯北部分別達到了8.1級和7.8級,值得一說的是第三名也是斐濟群島地區,地震級別同樣高達7.8級,其他就是近一年全球地震級別top10都是外國地區。
近一年每個月份發生地震數量對比情況
先來看一看近一年每個月份發生地震數量都是多少,關鍵代碼編寫如下:
結果可視化如下圖:
可以看到,除去前面的不看,最少發生地震的9月份也達到了70次,最高的6月份和8月份分別達到了恐怖的144和143次之多,也就是等于每一天發生4.8次左右。其中,可以得到近一年中每月平均發生100次左右,平均每天發生3.3次左右。
統計近一年中同一地方發生地震的次數
先來看一看近一年中同一地方發生地震的次數都是多少,關鍵代碼編寫如下:
結果可視化如下圖:
可以看到,近一年同一地方發生地震次數最多的前十名有9個都是我國的地區,看來我國真是地震高發區啊,而且前兩名都是中國四川的,希望地震少點,傷亡少點。
統計近一年中地震級別高低具體的次數
先來看一看近一年中地震級別高低具體的次數都是多少,關鍵代碼編寫如下:
結果可視化如下圖:
可以看到,最近一年地震級別的占比來看,低級別地震占大多數,而且3.0級地震占了近一年的10.9%,前10名中都不會超過6級地震,大多數圍繞在3級左右。
制作近一年地震高頻地區詞云分析圖
關鍵代碼如下:
詞云實現圖為:
以上,我們爬取并分析了近一年全球的地震信息,讓你感受下地震到底離你有多近,中國在地震高頻地區top10中占了9個位置。
文中完整代碼和素材,在后臺回復:地震 即可獲得。
總結
以上是生活随笔為你收集整理的全球地震 Python 爬虫可视化,最频发的地方是这里!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: surging 基于流媒体服务如何集群分
- 下一篇: 新智云助力西门子杨浦楼宇能源开放实验室