想要抓取網路上的資料,大家可能都會想到python爬蟲,但有時並不需要那麼麻煩, linux command line tool就有許多好用的工具, 今天以104人力網站的為例,示範如何只使用shell script,就可以開始抓取資料!
前言
這邊假設大家已經有網路爬蟲的基本概念了,一般大家寫爬蟲最多人用的就是python, 流程就是到目標網站上操作,並且一邊觀察chrome dev tool,將http requests用python的requests套件重現, 之後將response回來的資料做parse,最後存起來,可能是存到檔案或是資料庫裡。
前面三個步驟是觀察,後面要進行動作,共有三個主要的動作, 分別為: 發起HTTP請求、處理HTTP回應的資料,將處理好的資料存起來。
而這三個動作,分別都有好用的command line tool可以直接使用,分別為:
- Make HTTP requests: curl
- Parse JSON response data: jq
- Save data: redirect »
curl
curl是個HTTP client,相當於python的requests套件,想要在104上搜尋軟體工程師第1頁的結果, 可以使用下列的指令,有兩個querystring的參數: keyword及page。
其他還有許多篩選條件像是地區,年資,有興趣的去104網站自己按按就知道該使用哪些參數囉,這裡就不再多做描述。
1
curl -H 'Referer: https://www.104.com.tw/jobs/search' https://www.104.com.tw/jobs/search/list?keyword=軟體工程師&page=1
對HTTP message或curl的使用還不熟的,可以參考我之前寫過的文章:
jq [1]
成功取得回應後,可以看到terminal上噴出一堆密密麻麻的資訊,難以去閱讀,今天為例的104 API, 回傳的是application/json的資料格式,可以將這坨資料pipe到jq[1]指令上,他可以幫我們parse JSON格式的資料, 也可以做其他的動作,包括選擇我們要的欄位、map、filter、transform等等,詳細的使用方法可以到官網看他們的文件。
104的api回傳JSON格式的資料很方便,但很多網站沒有或是找不到這種API可以使用,就必須處理html的解析, 我有找到一個工具pup[2],看起來也蠻好用的,如果你知道其他更好用的方法,也歡迎留言跟大家分享唷~
redirect
處理好回應後,最後將資料導到file裡存起來就好囉~ 如果寫到同一份檔案當中,記得使用», 才不會把先前的資料給蓋掉唷。
完整程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh
if [ -z $1 ] || [ -z $2 ]; then
echo ""
echo " Usage:"
echo " sh ./`basename $0` \$keyword \$page"
echo ""
echo " Example:"
echo " sh ./`basename $0` 軟體工程師 1"
echo " sh ./`basename $0` 專案管理 2"
echo ""
exit
fi
keyword=$1
page=$2
curl \
-H 'Referer: https://www.104.com.tw/jobs/search' \
https://www.104.com.tw/jobs/search/list\?\&keyword\=$keyword\&page\=$page \
| jq
前面為防呆的檢查,確保使用者有輸入關鍵字及頁數,用起來就像這樣:
1
sh ./104.sh 軟體工程師 1
得到的結果如下:
如果只想要資料的list,可以再pipe到jq做進一步的處理:
1
sh ./104.sh 軟體工程師 1 | jq .data.list
得到的結果如下:
結語
有時只想要簡易的爬蟲,不想要大張旗鼓地寫個python時,就可以寫個shell script,加上crontab就能去抓取資料。
比如我只是想記錄某個keyword資料量的每天趨勢變化,就可以
1
sh ./104.sh 軟體工程師 1 | jq .data.totalCount >> data.csv
一天跑個一次,一份csv檔案,就可以達到我們想要目的。
感謝你閱讀到這邊~希望以上的內容對你有一丁點的幫助,掰掰~ 👋
Comments powered by Disqus.