利用linux curl爬取網站數據

  1. 看到一個看球網站的以下截圖紅色框數據,想爬取下來,通常爬取網站數據一般都會從java或者python爬取,但本人這兩個都不會,只會shell腳本,於是硬着頭皮試一下用shell爬取,方法很笨重,但旨在結果嘛,呵呵。

    wKiom1eDjyGhzXJ6AAClFJ6IwqA557.png

2.首先利用curl工具後者wget工具把整個網站數據爬取下來


curl 網址 >wangzhan.txt


3.查看wangzhan.txt文件,找出規則,看到數據是存放在哪個地方,本人是把txt文件拷到本機上用UE打開方便查看。通過查看文件,我發現數據是存儲在“var automultiMatchList”與 “var setSingleMulti”這間的所有行,每個行後面的},結束代表一行:

wKiom1eDj2WTw66XAADlIP-6g9E618.png

4. 截取所需的數據我是通過以下5個步驟

wKioL1eDkyjDG1YyAAA2ryB_RQ4314.png

shell腳本分析:

(1)sed -n '/var automultiMatchList/,/var setSingleMulti/p' wangzhan.txt 

這步是指從wangzhan.txt文件中查找到包含“var automultiMatchList”的行與包含“var setSingleMulti”的行之間的所有行:

wKioL1eDk-Swwg88AACUwGjXNS0566.png···

···

wKiom1eDk_uAwvMqAABXG2kKVeE645.png

(2)sed '$d' 是指刪除最後一行的內容,因爲這不是我們需要的數據。

(3)awk 'NR<2' 是指把第一行取出來做特殊處理,因爲第一行包含不要的數據(紅色線框的內容)

wKiom1eDlD-Ccn1pAABNEJ1ZDkk886.png(4)awk -F'= {' '{print $2}' 是指通過 ={ 分隔域,輸出$2就把上步紅色線框的內容去掉了

wKiom1eDlHnxTytOAABX_8Wb3RA974.png

(5)>1.txt 把第一行的數據輸出到1.txt文件中

(6)第二條shell腳本中的awk '/[0-9]/{print $0}' 就是把最後的空行都去掉

wKioL1eDlKKDLpnUAABXG2kKVeE718.png去掉最後的空行變成:

wKioL1eDlMiTzzEFAABJy_ahXlY853.png

(7)第二條shell腳本中的awk 'NR>=2' >2.txt 是指把第二行及以下的所有行都輸出到2.txt腳本

(8)awk 1 1.txt 2.txt>3.txt 這條命令是指把第一行和第二行及以下的所有行合併3.txt文件中,因爲之前把第一行單獨處理了,所以現在需要在合併到一塊,相當於sql中union all。

(9)awk '{a=match($0,"\"3\"");print substr($0,a)}' 3.txt  這條命令,因爲通過wangzhan.txt文件發現,我們需要的內容都是在“3”這個字符之後:

wKiom1eDlP3gW3r6AACCvHERK7k051.png

這裏用了awk的match和substr函數,就是找到“3”在這一行的所在位置之後,再截取需要的內容,這裏不用過awk函數的同學可以複習一下awk函數。到這一步,我們要截取的數據的雛形就出來了。

wKiom1eDlTKBDBVoAAB5p3xO20I172.png(10)tr -d ' ' 是指把空格都去掉

wKioL1eDlYuxgim9AAB7pib2Ml0863.png(11)awk -F',' '{print $1" "$2" "$3" "$4" "$5" "$6" "$7}'>data.txt  是指通過逗號分隔域,然後再通過空格隔開:

wKioL1eDla-w3e9AAACbHFnb2Po929.png(12)sed 's/"[[:alnum:]]\+"://g' 是指把冒號前面的數據都去掉,例如"3": 這種數據:

wKiom1eDldWgr7uXAACKNo_62lM281.png(13)awk '{print $1,$2,$3,$4,$5,$6}' 是指只打印我們需要的6個域:

wKioL1eDlfqi1_JRAACEUIrHCkk247.png(14)xargs -n3 是指按照每3列輸出,我們執行下第5條命令,然後33.txt的數據,就是我們要的數據:

wKioL1eDlizxiSOkAABSXm-EPCY145.png


總結:用shell爬取網站數據,需要熟悉sed,grep,awk等文本操作工具以及還運用到正則表達式,需要了解的內容比較多,比較繁瑣複雜,

不知道用時下比較熱門的python爬取數據是不是so easy。


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