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