📘 Python應用第 9-1 集:❌爬蟲禁入!? ✅Google 搜尋 API 替代方案與操作流程

更新於 發佈於 閱讀時間約 10 分鐘

在寫爬蟲的時候,很多人第一個想法就是:

能不能寫程式自動去抓 Google 搜尋結果?

但其實 Google 搜尋頁面(https://www.google.com)**不開放 API**,也禁止爬蟲直接抓取。這一集我們就來介紹一個「合法、官方、免費」的 Google 搜尋替代方案:Custom Search JSON API


❌ 為什麼不能直接爬 Google 搜尋頁?

  • 搜尋結果是動態 JavaScript 生成的,不是靜態 HTML
  • robots.txt 明確禁止爬蟲訪問 /search
  • 違反使用政策會導致 IP 被封鎖


✅ 替代方案:Google Custom Search JSON API

Google 官方提供的搜尋服務,讓你可以用程式呼叫 API 取得搜尋結果。


🔧 操作步驟詳解:申請金鑰與設定搜尋引擎

步驟 1:建立自訂搜尋引擎(CSE)

  1. 前往:https://programmablesearchengine.google.com/
  2. 點「新增」搜尋引擎
  3. 網站範圍可填 *.edu.twwww.python.org(可選擇搜尋整個網路)
  4. 建立成功後,複製你的搜尋引擎 ID(cx)

步驟 2:申請 API 金鑰

  1. 前往:https://console.cloud.google.com/
  2. 建立專案(若已有可略過)
  3. 啟用 API:「Custom Search JSON API」
  4. 前往「API 和服務 > 認證」新增 API 金鑰
  5. 複製金鑰(key)備用


🧪 程式實作:查詢 "Python 爬蟲"

import requests

api_key = "你的API金鑰"
cx = "你的搜尋引擎ID"
query = "python 爬蟲"

url = "https://www.googleapis.com/customsearch/v1"
params = {
"key": api_key,
"cx": cx,
"q": query
}

r = requests.get(url, params=params)
data = r.json()

for item in data.get("items", []):
print("🔗", item["title"], "→", item["link"])

🔽 輸出範例:

🔗 Python網頁爬蟲實戰 → https://example.com/python-crawler
🔗 BeautifulSoup入門 → https://example.com/tutorial

✅ 延伸任務:

📦 儲存結果為 CSV

import pandas as pd

results = [{"標題": item["title"], "連結": item["link"]} for item in data.get("items", [])]
df = pd.DataFrame(results)
df.to_csv("google_results.csv", index=False, encoding="utf-8")
print("已儲存至 google_results.csv")


🧽 過濾特定來源(例如只保留 medium.com)

filtered = [item for item in results if "medium.com" in item["連結"]]
for f in filtered:
print("📝", f["標題"], "→", f["連結"])


📊 關鍵字頻率分析(統計標題中的熱門詞彙)

from collections import Counter
import re

all_titles = " ".join(item["標題"] for item in results)
words = re.findall(r"\w+", all_titles.lower())
common = Counter(words).most_common(10)
print("🔍 最常見關鍵字:")
for word, count in common:
print(f"{word}{count} 次")

🔽 輸出範例:

🔍 最常見關鍵字:
python:5
爬蟲:4
教學:2
...(其餘略)


🔎 其他搜尋引擎 API 推薦

若你想獲得更多搜尋來源,這些合法 API 也是非常實用的選擇:

🔹 Bing Web Search API(Microsoft)

申請流程簡要:

  1. 前往 https://portal.azure.com/
  2. 建立一個免費帳戶並登入
  3. 點選「建立資源 > AI + Machine Learning > Bing Search v7」
  4. 設定資源名稱與地區後建立服務
  5. 前往「金鑰與端點」頁面,複製 API 金鑰與 endpoint

✅ 使用範例

import requests
import os

subscription_key = "你的Bing API金鑰"
url = "https://api.bing.microsoft.com/v7.0/search"
headers = {"Ocp-Apim-Subscription-Key": subscription_key}
params = {"q": "Python 爬蟲", "count": 5, "mkt": "zh-TW"}

r = requests.get(url, headers=headers, params=params)
data = r.json()

for item in data.get("webPages", {}).get("value", []):
print("🔗", item["name"], "→", item["url"])

🔽 輸出範例:

🔗 用 Python 撰寫網路爬蟲 → https://example.com/article
🔗 如何用 requests + BeautifulSoup → https://example.com/bs4


🔹 DuckDuckGo Instant Answer API

使用方式簡單: 直接使用例如:https://api.duckduckgo.com/?q=python&format=json 可用瀏覽器開即可看到結果,也可搭配 requests 使用。

✅ 使用範例

import requests

url = "https://api.duckduckgo.com/"
params = {"q": "python", "format": "json"}
r = requests.get(url, params=params)
data = r.json()

print("📘 定義:", data.get("AbstractText", "無定義"))

🔽 輸出範例:

📘 定義:Python is an interpreted high-level general-purpose programming language.


🔹 SerpAPI

  • 網址:https://serpapi.com/
  • 可模擬 Google、Bing、Yahoo 搜尋結果
  • 提供整理過的 JSON 結構,非常適合開發者使用
  • 免費帳號有每日次數限制

申請流程簡要:

  1. 前往 https://serpapi.com/signup 註冊帳戶
  2. 登入後至 Dashboard 複製你的 API Key

✅ 使用範例

import requests

params = {
"engine": "google",
"q": "Python 爬蟲",
"api_key": "你的APIKey",
"hl": "zh-tw"
}

r = requests.get("https://serpapi.com/search", params=params)
data = r.json()

for item in data.get("organic_results", []):
print("🔍", item.get("title"), "→", item.get("link"))

🔽 輸出範例:

🔍 Python爬蟲實戰入門 → https://example.com/start
🔍 使用Python打造自己的小爬蟲 → https://example.com/scrapy

🔽 說明:SerpAPI 支援更多進階功能,如自動點擊、分頁、新聞/圖片搜尋等。

這些 API 各有優劣,選擇時可根據你爬取的內容、語言、預算與資料需求來考量 👍

留言
avatar-img
留言分享你的想法!
avatar-img
Dolly的奇妙育兒之旅
16會員
120內容數
Dolly 是個家有亞斯哥和過動妹的媽媽 為了記得那些奇妙的育兒真實故事 決定把我(Dolly)和大亞(爸爸)、端端(亞斯哥)和波妞(過動妹)那些日子發生的事寫成部落格 一串感恩又心累、感謝又荒謬的心路歷程紀錄
2025/07/24
4. 動詞 (Verbs) 動詞是句子的核心,表示主詞的動作、行為或狀態。它是構成完整句子的必要元素。動詞的變化非常豐富,包括時態、語態、語氣等,這些都是多益文法常考的重點。 4.1 動詞種類:及物動詞與不及物動詞 動詞根據其後是否需要接受詞,可分為及物動詞和不及物動詞。
Thumbnail
2025/07/24
4. 動詞 (Verbs) 動詞是句子的核心,表示主詞的動作、行為或狀態。它是構成完整句子的必要元素。動詞的變化非常豐富,包括時態、語態、語氣等,這些都是多益文法常考的重點。 4.1 動詞種類:及物動詞與不及物動詞 動詞根據其後是否需要接受詞,可分為及物動詞和不及物動詞。
Thumbnail
2025/07/22
6. 介系詞 (Prepositions) 介系詞是用來表達名詞或代名詞與句中其他詞之間關係的詞,通常表示時間、地點、方向、方式、原因等。介系詞本身沒有意義,需要搭配名詞或代名詞(即其受詞)才能表達完整概念。 核心概念:介系詞後面永遠接名詞或動名詞 (V-ing)。 6.1 常見介系詞用法
Thumbnail
2025/07/22
6. 介系詞 (Prepositions) 介系詞是用來表達名詞或代名詞與句中其他詞之間關係的詞,通常表示時間、地點、方向、方式、原因等。介系詞本身沒有意義,需要搭配名詞或代名詞(即其受詞)才能表達完整概念。 核心概念:介系詞後面永遠接名詞或動名詞 (V-ing)。 6.1 常見介系詞用法
Thumbnail
看更多
你可能也想看
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
如何用Python將DataFrame中的資料擷取維新的DataFrame?
Thumbnail
如何用Python將DataFrame中的資料擷取維新的DataFrame?
Thumbnail
在這篇教學文章中,我們將展示如何使用 Python 和 pytrends 套件來取得 Google 趨勢(Google Trends)的熱門關鍵詞。我們會詳細說明如何安裝和設定 pytrends,並提供範例程式碼來幫助你輕鬆獲取台灣地區的熱門搜尋趨勢。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Python 和 pytrends 套件來取得 Google 趨勢(Google Trends)的熱門關鍵詞。我們會詳細說明如何安裝和設定 pytrends,並提供範例程式碼來幫助你輕鬆獲取台灣地區的熱門搜尋趨勢。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News