香港中小企做市場研究、比較供應商價格、又或者留意行業新聞,最常見嘅做法就係逐個網頁開、逐筆資料抄去 Excel。抄十個八個都仲頂得順,但係要抄一百個、仲要日日更新,就真係嘥時間又易出錯。
呢種「由網頁自動抽取資料」嘅技術,叫做網絡爬蟲(Web Scraping)。用 Python 加兩個免費庫,十幾行 code 就自動將成個網頁嘅標題、價格、連結抽晒出嚟,砌成一張 Excel 表。就算你未寫過 code,跟住做都識。
第一步:安裝兩個庫
我哋會用 requests 負責「下載網頁」,用 BeautifulSoup 負責「分析同抽取資料」。開「命令提示字元」,打以下指令:
pip install requests beautifulsoup4
見到 Successfully installed 就代表得咗。
第二步:個程式會幫你做乜?
呢個程式一次過幫你做三樣嘢:
- 下載網頁 —— requests 將成頁 HTML 原始碼攞落嚟
- 搵出目標資料 —— BeautifulSoup 幫你由幾千行 HTML 入面,精準搵出你指定嘅元素(例如每一條新聞標題)
- 儲存做 CSV —— 將結果寫入一個 Excel 開得到嘅檔案
第三步:寫程式
開一個新檔案 scrape.py(記事本都得),貼入以下 code:
import requests
from bs4 import BeautifulSoup
import csv
URL = "https://news.ycombinator.com/"
resp = requests.get(URL, timeout=10)
soup = BeautifulSoup(resp.text, "html.parser")
rows = []
for item in soup.select("span.titleline a"):
title = item.get_text()
link = item.get("href", "")
rows.append([title, link])
with open("headlines.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["標題", "連結"])
writer.writerows(rows[:20])
print("搞掂!共抓取", len(rows), "條標題")
逐行解釋
- import requests / from bs4 import BeautifulSoup / import csv —— 載入三個工具:下載網頁、分析網頁、寫 CSV。
- URL = "https://news.ycombinator.com/" —— 目標網頁,想抓邊個網站就改呢度。
- resp = requests.get(URL, timeout=10) —— 下載網頁,resp.text 就係成頁 HTML 原始碼。
- soup = BeautifulSoup(resp.text, "html.parser") —— 將 HTML 變成一棵可以搜尋嘅樹。
- soup.select("span.titleline a") —— 用 CSS 選擇器一次過搵出所有新聞標題連結。
- item.get_text() —— 攞出標題文字;item.get("href", "") —— 攞出條連結。
- writer.writerow(...) —— 將頭 20 條寫入 CSV;encoding="utf-8-sig" 令 Excel 開到中文唔會亂碼。
第四步:執行
喺命令提示字元度,切換去 scrape.py 所在位置,打:
python scrape.py
執行完,同一個資料夾會多咗個 headlines.csv,用 Excel 打開就見到所有標題同連結,唔使再人手 Copy。
爬蟲三大守則
爬蟲好方便,但都要用得守規矩,唔係隨時俾人封 IP:
- 睇 robots.txt —— 網站通常有個 robots.txt 檔案,列明邊啲內容唔俾自動抓取,開抓之前要尊重。
- 唔好狂發請求 —— 每次請求之間加少少延遲,一秒一兩次就好。狂轟會拖慢人哋個網站,仲會被當成攻擊。
- 只攞公開資料 —— 唔好爬要登入先睇到嘅內容,或者涉及個人私隱嘅資料。
總結
Python 教學:用十幾行 code 就將「逐個網頁開、逐筆抄去 Excel」呢啲重複功夫交俾電腦,市場調查、價格比較、行業新聞一次過自動收集。用同樣思路,改一改目標網址同選擇器,就可以去抓任何你想要嘅公開資料。