我永遠記得第一次為產品發表會追蹤新聞的那種緊張感。當時我桌上三個螢幕、十幾個 Google 新聞分頁全開,腦袋裡一直怕漏掉什麼大事——像是競爭對手突然發新聞稿,或一場突如其來的公關危機。後來才發現,這種焦慮根本不是我一個人的問題。現在網路上每天會冒出超過,這數量多到你一輩子都看不完,更別說在下一杯咖啡喝完前讀完。
如果你在做業務、行銷、營運或公關,這種「新聞焦慮」你一定懂。手動追新聞就像用水管喝水,根本招架不住。所以,學會用 Python 抓取 Google 新聞,等於直接開啟你的超能力:自動收集新聞、彙整分析資料,無論是品牌監控、競爭對手追蹤,還是搶先掌握產業趨勢,關鍵資訊都不會再漏掉。這篇教學會帶你從新手入門,一步步打造出穩定、可重複的 google 新聞爬蟲。內容有程式碼、實戰經驗、最佳實踐,還有一些有趣的小故事。
為什麼商業用戶需要 google 新聞爬蟲?
說真的,商業決策的速度就是新聞標題的速度。不管你是公關、業務還是策略部門,都必須即時掌握外界對你的討論。全球媒體監控工具市場規模已經高達,預計到 2030 年還會翻倍。原因很簡單:沒有人能承受錯過一則可能影響品牌聲譽、銷售或合規的新聞。
自動化抓取 Google 新聞,讓你在辦公室情報戰場上永遠快人一步,以下幾種情境最常見:
手動追新聞?又慢又容易出錯,還常常錯失良機()。自動化爬蟲則能持續提供結構化新聞資訊,讓你不再 FOMO,只剩下可行動的洞察。
新手入門:用 Python 實作網頁爬蟲(基礎範例)
在正式進入 google 新聞爬蟲之前,先用一個超適合練習的網站 來熱身。這個網站專門給爬蟲練習用,不用怕被封鎖或違規。
我們的流程如下:
- 發送請求到首頁。
- 用 BeautifulSoup 解析 HTML。
- 擷取書名與價格。
- 存成 pandas DataFrame 並匯出 CSV。
- 處理分頁與錯誤。
步驟 1:發送請求並解析 HTML
先用 Python 的 requests
套件抓首頁:
1import requests
2url = "http://books.toscrape.com/index.html"
3response = requests.get(url)
4print(response.status_code) # 成功會顯示 200
狀態碼 200 代表請求成功()。
接著解析 HTML:
1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, 'html.parser')
這樣就有一個 soup
物件,可以用 Python 方式操作網頁結構()。
步驟 2:擷取資料並存成 CSV
抓出所有書籍項目:
1books = soup.find_all("li", {"class": "col-xs-6 col-sm-4 col-md-3 col-lg-3"})
2print(f"本頁共找到 {len(books)} 本書")
擷取書名與價格:
1book_list = []
2for item in books:
3 title = item.h3.a["title"]
4 price = item.find("p", class_="price_color").get_text()
5 book_list.append({"Title": title, "Price": price})
用 pandas 存成 CSV:
1import pandas as pd
2df = pd.DataFrame(book_list)
3df.to_csv("books.csv", index=False)
或用內建 csv
模組:
1import csv
2keys = book_list[0].keys()
3with open("books.csv", "w", newline="", encoding="utf-8") as f:
4 writer = csv.DictWriter(f, fieldnames=keys)
5 writer.writeheader()
6 writer.writerows(book_list)
打開 books.csv
,你就能在 Excel 裡看到所有書籍資料。
步驟 3:處理分頁與錯誤
如果想抓所有分頁的書籍,可以這樣寫:
1all_books = []
2for page in range(1, 51): # 共 50 頁
3 url = f"http://books.toscrape.com/catalogue/page-{page}.html"
4 try:
5 res = requests.get(url, timeout=10)
6 if res.status_code != 200:
7 break
8 soup = BeautifulSoup(res.text, 'html.parser')
9 books = soup.find_all("li", {"class": "col-xs-6 col-sm-4 col-md-3 col-lg-3"})
10 for item in books:
11 title = item.h3.a["title"]
12 price = item.find("p", class_="price_color").get_text()
13 all_books.append({"Title": title, "Price": price})
14 except requests.exceptions.RequestException as e:
15 print(f"Request failed: {e}")
16 continue
這個迴圈會自動處理分頁、遇到不存在的頁面就停止,還能捕捉網路錯誤。(小提醒:每次請求間加上 time.sleep(1)
,避免對伺服器造成壓力。)
恭喜你!你已經學會網頁爬蟲的基本功:發送請求、解析、擷取、分頁與錯誤處理。這些技巧同樣適用於 google 新聞爬蟲。
用 Python 抓取 Google 新聞:逐步實作
準備好進階挑戰了嗎?我們要打造一個 google 新聞爬蟲,能自動抓取標題、連結、來源、時間,讓全球新聞變成可分析的結構化資料。
Python 環境準備
請先安裝 Python 3 與以下套件:
1pip install requests beautifulsoup4 pandas
()
另外,建議加上 User-Agent 字串,模擬真實瀏覽器,否則 Google 可能會拒絕你的請求()。
建立 google 新聞爬蟲
分成幾個步驟:
1. 設定搜尋網址與參數
Google 新聞搜尋網址格式如下:
1https://news.google.com/search?q=YOUR_QUERY&hl=zh-TW&gl=TW&ceid=TW:zh-Hant
q
:搜尋關鍵字hl
:語言(如zh-TW
)gl
:國家(如TW
)ceid
:國家:語言(如TW:zh-Hant
)
Python 實作:
1base_url = "https://news.google.com/search"
2params = {
3 'q': '科技',
4 'hl': 'zh-TW',
5 'gl': 'TW',
6 'ceid': 'TW:zh-Hant'
7}
8headers = {
9 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'
10}
()
2. 抓取搜尋結果頁面
1response = requests.get(base_url, params=params, headers=headers)
2html = response.text
3print(response.status_code)
()
3. 解析並擷取新聞資料
解析 HTML 並擷取新聞:
1soup = BeautifulSoup(html, 'html.parser')
2articles = soup.find_all('article')
3news_data = []
4for art in articles:
5 headline_tag = art.find('h3')
6 title = headline_tag.get_text() if headline_tag else None
7 link_tag = art.find('a')
8 link = link_tag['href'] if link_tag else ''
9 if link.startswith('./'):
10 link = 'https://news.google.com' + link[1:]
11 source_tag = art.find(attrs={"class": "wEwyrc"})
12 source = source_tag.get_text() if source_tag else None
13 time_tag = art.find('time')
14 time_text = time_tag.get_text() if time_tag else None
15 snippet_tag = art.find('span', attrs={"class": "xBbh9"})
16 snippet = snippet_tag.get_text() if snippet_tag else None
17 news_data.append({
18 "title": title,
19 "source": source,
20 "time": time_text,
21 "link": link,
22 "snippet": snippet
23 })
()
存成 CSV:
1df = pd.DataFrame(news_data)
2df.to_csv("google_news_results.csv", index=False)
處理缺漏資料
Google 新聞的 HTML 結構不總是固定,擷取前記得檢查標籤是否存在,缺漏就設為 None
或空字串。
多頁抓取與速率限制
Google 新聞是無限捲動,requests
通常只能抓到第一批結果。想抓更多可以:
- 用 RSS feed(可取得更多結果,)
- 用 Selenium、Playwright 等無頭瀏覽器模擬捲動(進階)
- 或定時(如每小時)自動抓取新文章
注意: 抓太快會被 Google 封鎖,10 次快速請求就可能出現 429 錯誤()。避免被封建議:
- 每次請求間加上
time.sleep(random.uniform(2,6))
- 大量抓取時輪換 User-Agent 與 IP
- 偵測 CAPTCHA 或封鎖頁面時自動暫停
讓 google 新聞爬蟲可重複、可分析
重點來了:高品質爬蟲不只是「抓到資料」而已,更要讓資料可重複、可分析。 想讓 BI 儀表板、公關監控或競爭追蹤長期運作,必須控管語言、地區、時間與重複資料。
語言、地區、時間切片
Google 新聞內容高度個人化。為了取得一致結果:
- 用
hl
、gl
、ceid
參數指定語言與地區() - 例如
hl=zh-TW&gl=TW&ceid=TW:zh-Hant
取得台灣新聞,hl=en-IN&gl=IN&ceid=IN:en
取得印度英文新聞
時間切片:
- Google 新聞沒有直接的「過去 24 小時」參數,但結果通常依新舊排序
- 可在抓取後過濾:
time
包含「小時前」、「分鐘前」或「今天」就保留 - 進階可用 RSS 或搜尋運算子(但支援有限)
過濾與去重
重複新聞會影響分析品質。建議:
- 來源/主題白名單: 只保留特定來源或主題。搜尋時可用
source:
運算子(如q=Tesla source:Reuters
)。 - 網址去重: 移除追蹤參數(如
utm_*
),可用:
1import urllib.parse
2clean_link = urllib.parse.urljoin(link, urllib.parse.urlparse(link).path)
()
- 標題去重: 標題相似的只保留一則,可用小寫、去標點比對。
- 追蹤已抓過的文章: 每天抓取時,存下網址 hash,避免重複計算。
這樣你的資料就乾淨又適合後續分析,不會重複計算標題或影響情緒分析()。
方法比較:python 抓取 google 新聞 vs. Google 新聞 API
該自己寫 google 新聞爬蟲,還是用第三方 Google 新聞 API?比較如下:
比較項目 | 自建 Python 爬蟲 | 第三方 Google 新聞 API 服務 |
---|---|---|
實作難度 | 需寫程式、除錯、適應網站變動 | 直接呼叫 API,無需解析 HTML |
彈性 | 欄位、子頁面都能自訂擷取 | 受限於 API 提供的欄位與功能 |
資料掌控 | 完全掌握原始資料 | 資料經過處理,需信任對方解析 |
規模與速度 | 受限於自身 IP/資源,易被封鎖 | 供應商處理代理與封鎖,適合大規模 |
穩定性 | Google 改版或封鎖就會壞 | API 會自動適應變動,穩定性高 |
維護成本 | 需持續更新選擇器、反爬蟲 | 幾乎不用維護,供應商處理 |
成本 | 免費(但需花時間,可能有代理費) | 付費,依請求數或月費計價(價格範例) |
封鎖風險 | 高,Google 可能封 IP | 低,API 會自動處理封鎖與重試 |
資料即時性 | 自己決定抓取頻率,但太頻繁易被封 | 即時,配合高額度方案可大量抓取 |
法律/條款風險 | 需自行遵守 Google 條款,風險自負 | 仍需注意,但 API 通常標榜合理使用(非法律建議) |
小型專案或學習建議自建,想省時省力、穩定大規模運作則建議用 API。(如果想要兩全其美——免寫程式、免維護——可以參考下方 Thunderbit。)
google 新聞爬蟲常見問題與排解
抓取 Google 新聞不總是一帆風順,常見問題與解法如下:
- CAPTCHA 或「異常流量」頁面: 降低請求速度、輪換 User-Agent、必要時用代理。遇到驗證碼就暫停。()
- HTTP 429/503 錯誤: 被限流或封鎖,請實作退避、檢查 robots.txt,避免多線程同時抓取。
- HTML 結構變動: Google 常改版,需重新檢查 HTML 並更新選擇器,擷取時用 try/except 避免程式崩潰。
- 缺漏欄位: 並非每則新聞都有摘要或來源,程式要能彈性處理。
- 重複資料: 依前述方法去重。
- 編碼問題: 存檔時統一用 UTF-8。
- JavaScript 載入內容: 大多數 Google 新聞為伺服器端渲染,若遇到 JS 載入內容可用 Selenium、Playwright(進階)。
更多排解技巧可參考 與 。
google 新聞爬蟲的道德與最佳實踐
來聊聊爬蟲倫理與最佳實踐——能力越大,責任越大:
- 遵守 robots.txt: Google 新聞的 robots.txt 禁止抓取部分路徑(),即使技術上能抓,也建議遵守規範。
- 避免過度請求: 加入延遲,選擇離峰時段,不要對網站造成負擔。
- 合法使用資料: 只用於分析標題、摘要、連結,不要全文轉載()。
- 標註來源: 分享分析時請註明 Google 新聞與原始媒體。
- 定期維護爬蟲: 網站會變動,程式也要跟著調整。
- 隱私與法規遵循: 資料妥善保存,遵守隱私法規。
- 合理使用與速率限制: 適度抓取,若被要求停止請配合()。
總之,做個有禮貌的網路公民,未來的你(還有 IT 部門)都會感謝你。
重點整理與下一步
重點回顧:
- 你學會了 Python 網頁爬蟲的基礎,從靜態網站到 Google 新聞,掌握 requests 與 BeautifulSoup。
- 你打造了可重複的 google 新聞爬蟲流程: 控制語言、地區、時間,去重,讓資料隨時可分析。
- 你比較了自建爬蟲與 API 解決方案: 理解控制權、穩定性與成本的取捨。
- **你學會了排解問題與道德規範,**確保負責任地抓取資料。
接下來呢?把這些技巧應用到你的業務場景——不論是品牌監控、競爭追蹤,還是打造自家新聞儀表板。想再進階?可以嘗試抓取其他新聞網站、自動化資料流程,甚至對標題做情緒分析。
如果你不想再維護 Python 程式(或想省下寶貴時間),可以試試 。Thunderbit 是一款 AI 驅動的網頁爬蟲 Chrome 擴充功能,讓你只需點幾下就能抓取 Google 新聞和其他網站,完全免寫程式。內建「AI 智能欄位建議」、排程爬蟲、子頁面自動導航、一鍵匯出 Excel/Google Sheets,是團隊自動化新聞收集的最佳利器。()
想學更多爬蟲技巧,歡迎瀏覽 ,或參考我們的、、。
祝你抓新聞順利,讓你的資訊永遠比競爭對手快一步、結構化又好分析!
作者:Shuai Guan,Thunderbit 共同創辦人兼執行長。多年來深耕 SaaS、自動化與 AI,最愛把混亂的資訊變成有用的數據。如果你有問題或想交流爬蟲經驗,歡迎聯絡我。
常見問答
1. 為什麼企業要用 Python 抓取 Google 新聞?
自動化抓取 Google 新聞能幫助企業即時收集與品牌、競爭對手或產業相關的新聞。這樣能快速監控公關危機、追蹤競爭動態、獲取業務線索、分析市場趨勢與管理風險。手動追蹤不僅慢,還容易漏掉重要資訊;自動化爬蟲則能持續提供結構化、即時的新聞資料。
2. 用 Python 抓取 Google 新聞的基本步驟是什麼?
流程包含:
- 安裝
requests
、BeautifulSoup
、pandas
等 Python 套件 - 設定 Google 新聞搜尋網址與參數(如關鍵字、語言、地區)
- 發送請求並加上 User-Agent
- 解析 HTML,擷取標題、連結、來源、時間、摘要等欄位
- 將資料存成 CSV 方便分析
- 處理缺漏資料與去重,確保資料乾淨可用
3. 抓取 Google 新聞常見挑戰有哪些?如何解決?
常見挑戰:
- CAPTCHA 或「異常流量」警告:降低請求速度、輪換 User-Agent、必要時用代理
- 速率限制(HTTP 429/503):加延遲,避免多線程同時抓取
- HTML 結構變動:定期更新選擇器,擷取時用 try/except
- 欄位缺漏或不一致:擷取前先檢查標籤是否存在
- 重複資料:依網址或標題去重
- 編碼問題:存檔時統一用 UTF-8
- JavaScript 載入內容:進階可用 Selenium、Playwright
4. 如何讓 google 新聞爬蟲流程可重複、可分析?
建議:
- 用
hl
、gl
、ceid
參數控管語言與地區 - 時間過濾可在抓取後處理,或用 RSS
- 依網址、標題去重
- 追蹤已抓過的文章,避免重複
- 資料妥善保存,並記錄流程方便日後維護
5. 該自建 google 新聞爬蟲還是用第三方 API?
自建爬蟲彈性高、免費(僅需時間與代理費),但需持續維護,遇到 Google 改版易壞,且被封鎖風險較高。第三方 API 穩定、易於大規模使用,會自動處理反爬蟲,但需付費且彈性較低。小型專案或學習建議自建,大型或商用建議用 API。