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

Getter Chen
7 min readJul 29, 2023

--

圖片來源 — Unsplash

今天要分享的是我的學習心得 — 用 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 或是別的網頁中 我不確定

後續挑戰

  1. 將爬取到的資料改成固定更新同一份 spreadsheet 表格
  2. 當 Spreadsheet 表格有內容後,如何自動呼叫 ChatGPT 幫我逐項做資料分析、文件撰寫
  3. 當我要爬資料的內容是一個登入才看得到的資料 ( 如 JIRA ),該導入哪些技術?

結語

本篇文章對我來說是紀錄我終於踏入 Python 世界的里程碑,同時也解鎖「用 AI 寫程式」的技能,和真正學習寫 Python Code 的技術活相比,我應該省下 3~5 倍的時間,這對「不求甚解,只要機制能運作」的我來說就已足夠,希望記錄這段嘗試的過程也會對其他閱讀者有所幫助。感謝閱讀 ~

Sign up to discover human stories that deepen your understanding of the world.

--

--

Getter Chen
Getter Chen

Written by Getter Chen

Getter, a product design expert with 10+ years in SaaS, EC, and Ads. Pre-design lead, now an IC focused on AIGC, data, and no-code to supercharge design impact.

No responses yet

Write a response