iT邦幫忙

2024 iThome 鐵人賽

DAY 29
1

前言

今天我們直接爬蟲實作,今天我們會以 104人力銀行作為範例

安裝 jq 工具

首先我們先進行工具的安裝,jq 小工具,那 jq 是一個常用的指令工具,用於處理 JSON 格式的資料,輕量但功能強大,可以做到從 JSON 資料中擷取、轉換、篩選等操作,也可以簡單用於排版讓 JSON 資料更可讀。

程式碼撰寫

當你安裝好 jq 工具的時候,接下來下一步就可以來撰寫程式碼

sudo nano test.sh
#test.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

撰寫好程式碼後,記得儲存然後就可以來試試看了

sh ./test.sh 軟體工程師 1

就可以看到爬蟲結果,這樣就大功告成拉~~~

Python 爬蟲 跟 Shell Script 爬蟲 差在哪?

Shell Script 爬蟲

Shell script 是一種命令行語言,通常用來自動化系統操作和文件管理。它也可以用來執行爬蟲,特別是在需要使用基本的網絡工具時。

優點:

  • 簡單和快速 => 如果你只是想抓取某些靜態網頁,使用 curl 或 wget 等命令,Shell script 非常簡單和快速。
  • 自動化 => Shell script 在自動化任務方面非常強大,特別適合處理定時執行的腳本或結合操作系統任務計畫器進行爬蟲。
  • 系統整合 => 可以輕鬆整合其他命令行工具來處理數據,比如 grep、sed、awk 等。

缺點:

  • 處理複雜性不足 => Shell script 不擅長處理動態網站、JavaScript 渲染的頁面或需要登入的網站。
  • 不適合大規模抓取 => 當需要進行大量的並行請求或處理大量數據時,Shell script 可能會顯得力不從心。

Python 爬蟲

Python 提供了強大且靈活的爬蟲工具庫,例如 requests、BeautifulSoup、Scrapy、Selenium 等,適合處理各種類型的網頁,包括動態和靜態網頁。

優點:

  • 豐富的爬蟲庫 => Python 有非常多的庫支援網頁爬蟲,如 BeautifulSoup 用來解析 HTML,Selenium 用來處理動態加載的網站,Scrapy 則是一個完整的爬蟲框架。
  • 動態網站處理 => Python 可以處理需要 JavaScript 渲染的網站,通過 Selenium 等工具模擬瀏覽器行為。
  • 擴展性和靈活性 => Python 具有很好的擴展性,適合處理大規模的數據抓取和數據清理工作。
    缺點:
  • 複雜度較高 => 與 Shell script 相比,Python 需要更多的編寫時間和學習成本,特別是在處理簡單的抓取任務時。
  • 系統依賴 => Python 爬蟲有時需要額外安裝庫和依賴。

結論與感想

我只能說雖然兩者的要達成的功能都差不多,但是假如你今天只是突發奇想寫一個很簡易爬蟲的話,我很推薦用 shell script,但假如你想要爬蟲較為豐富的話,個人非常推薦用 python

資料來源

https://homuchen.com/posts/crawler-104-jobs-data-using-shell-scripts-curl-and-jq/#1
https://jqlang.github.io/jq/
https://www.onejar99.com/jq_commands/


上一篇
Day 28 - Linux shell script 做爬蟲
下一篇
Day 30 - Linux 結業式,噹~噹~噹~噹~噹~
系列文
0 到 100 Linux快打旋風30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言