Python 小白的免費爬蟲法 — 用 AI 幫我寫 104 職缺爬蟲

今天要分享的是我的學習心得 — 用 Google Colab 運行 AI 撰寫的 Python 來作為我的免費爬蟲工具。
我想解決的痛點是當想對同樣版型、不同品項的網頁 ( 職缺、人才、商品、社群資料… ) 做大量資料截取 ( > 20 筆 ) 。過去我都是手動完成這類工作,但當我想要擴大自己的作業能力時,首先得要提升的就是獲取資料的效率 — 從手動執行改為半自動化,才有可能升級我的工作流。
我先後評估過 Freemium 型的 Chrome 爬蟲插件 ( Extension ),與在本機安裝 Python 兩種選項,但最後還是決定採用可免費執行 Python 的 Google Colab 作為執行環境,並交錯試用三套對話式 AI 來幫我寫 Code — ChatGPT, Claude.AI, Bard。
決策
Chrome Extension 需要付費與學習
Instant Data Scraper 是我唯一找到的免費插件,但它指定網頁爬取內容的方法十分受限,我會被迫爬取多餘資訊,並為每一次爬取都輸出一次 CSV,操作不方便。
Data Scraper 則是我唯一成功完成設定、並抓取資料的 Freemium 工具,它的系統有些 Old school,但自訂抓取目標的功能彈性更高,每月的抓取任務次數也夠新手的我用來嘗試。但累加多次爬取與輸出的方法我目前找不到,如果要花費數小時做此工具學習的話,我認為直接學習使用 Python 對我的能力會更加分,因此對 Data Scraper 的探索暫停。
Browser.AI 在設定 Scraper 時的體驗十分流暢,其支援輸出至 Spreadsheet, Airtable, Zapier 等主流工具的集成,對我來說也很有吸引力,但一開始就需要直上付費方案,我未來如果爬蟲使用量大、需要更省心力的方法時可能會回來評估它。
花費 2~4 小時輪流試用各家的 Scraper Extension 對我最大的幫助是建立我對爬蟲的運作方式有具體的理解。
安裝本機還是 Colab?
主流的 Python 教學以單機為主,如果是程式開發者的話,在本機完美控制自己的執行環境和寫 Code 工具應該是更有效率的選擇。
但我自己的需要偏向速成、能延用他人寫好腳本就延用、跨裝置執執行 ( 家裡 windows / 公司 Mac ) 、線上導出爬取結果到 Google Spreadsheet,我認為使用 Colab 會更佳,特別是我也在計畫要訂閱 Colab 跑 Stable Diffusion,讓自己更多熟悉 Colab 環境滿足多重目的。
然而使用 Colab 的缺點還是存在的 — 以本次的功能為例,無論是 AI 還是我所參照的教學 ( Mike Ku 的《整合Python Selenium及BeautifulSoup實現動態網頁爬蟲》),Selenium 與其中的 Webdriver 和 2023 年 1 月與 6 月各升級一次的 Colab 產生衝突,AI 們無法替我想出/找到解法,所以我能做的就只是繞過避免使用 Selenium。如果環境是在本機端的話,我可以指定環境的版本來避過問題。
成果
以我為自家公司開的 3 個職缺的 JD 為例,我將它們依次輸入 URL 輸入框,最後輸入「quit」,Python 就會幫我整理出我指定爬取的欄位。
我將此版程式的 Colab 分享於此,提供有興趣的人試玩。
過程
在本次嘗試中,我 80% 的程式碼是由 Claude.ai 產出的,主要不使用 ChatGPT 的原因是 GPT-Plus 目前關閉連網功能,而 Claude.ai 和 Bard 似乎有 2023 年的資料,我期待它們對 Colab 2023 年的狀況較熟,寫得出 Colab 適用的程式碼。而 Claude.ai 的在和我的應對上比 Bard 好一些,解 Bug 也較不會限入 A/B 兩版互換死迴圈的狀態。
ChatGPT 是當我 Claude.ai 用太兇,免費對話量不足時會轉往 ChatGPT,目前 2 套 AI 案給我的感覺差是在 ChatGPT3.5 的反應速度較快,程式能力部分看不出明顯差異。
以下是我歷次的要求 :
1. 要求 AI 照我看到的教學思路,用 Beautiful soup 和 Selenium 爬取動態網頁中我指定的欄位
這個 xml path 是用開發者工具去找到的爬取目標元素在程式碼中的位置,說明部分可參考這篇Teresawang 的教學文章。
Prompt 1 :
我要在 colab 上運行 beautiful soup 和 selenium 以幫我抓取一個動態網頁( https://www.104.com.tw/job/70ey9) 的文字內容 文字內容的 xml path 是”””//*[@id=”app”]/div/div[2]/div/div[1]/div[1]/div[2]/div[1]/p””” 請幫我寫出 Colab 上要載入的 library 與執行的程式碼?
2. 放棄 selenium 與 webdrive
這件事很重要,AI 產給我的 python code 在 colab 中一直執行不起來,我花了 2 小時在不斷丟 error & warning 資訊給 AI,並查詢 stakeoverflow 討論文。還好人類指揮 ( 我 ) 最後想到要放棄,繞過技術關卡,我如下對 AI 要求後,終於第一次成功爬取到目標資料。
Prompt 2:
請用不靠 webdriver 的方法來 PYTHON幫我抓取一個動態網頁( https://www.104.com.tw/job/70ey9) 的文字內容 文字內容的 xml path 是”””//*[@id=”app”]/div/div[2]/div/div[1]/div[1]/div[2]/div[1]/p””” 請幫我寫出 Colab 上要載入的 library 與執行的程式碼
3. 仿 JSON 格式,要求爬取更多項目
前述要爬取的內容,請你多幫我多抓幾項輸出為 JSON,項目名和動態爬取資料各是
“公司”:”//*[@id=”app”]/div/div[1]/div[2]/div/div/div[1]/div/a[1]”;
“職缺名稱”:”//*[@id=”app”]/div/div[1]/div[2]/div/div/div[1]/h1/text()”;
“薪資”:”//*[@id=”app”]/div/div[2]/div/div[1]/div[1]/div[2]/div[3]/div[2]/div/p”;
“URL”:”這個頁面的 URL”;
“年資”:”//*[@id=”app”]/div/div[2]/div/div[1]/div[2]/div[2]/div[1]/div[2]/div”
“工作內容”:”//*[@id=”app”]/div/div[2]/div/div[1]/div[1]/div[2]/div[1]/p”;
“條件”:”//*[@id=”app”]/div/div[2]/div/div[1]/div[2]/div[3]/div/div[2]/div/div/p”;
“地址”:”//*[@id=”app”]/div/div[2]/div/div[1]/div[1]/div[2]/div[5]/div[2]/div/div/span[1]”;
4. 單 URL 爬取已成功了,改成批次作業
我現在希望我有一個 url input 欄位, 每一次輸入都能在輸出 Table 中累爬取的結果 我該怎麼做? 也許 input 與輸出應該要改到 spreadsheet 或是別的網頁中 我不確定
後續挑戰
- 將爬取到的資料改成固定更新同一份 spreadsheet 表格
- 當 Spreadsheet 表格有內容後,如何自動呼叫 ChatGPT 幫我逐項做資料分析、文件撰寫
- 當我要爬資料的內容是一個登入才看得到的資料 ( 如 JIRA ),該導入哪些技術?
結語
本篇文章對我來說是紀錄我終於踏入 Python 世界的里程碑,同時也解鎖「用 AI 寫程式」的技能,和真正學習寫 Python Code 的技術活相比,我應該省下 3~5 倍的時間,這對「不求甚解,只要機制能運作」的我來說就已足夠,希望記錄這段嘗試的過程也會對其他閱讀者有所幫助。感謝閱讀 ~