使用 Python 抓取 Google 搜尋結果 ( 2024)
![](https://serpdog.io/wp-content/uploads/2023/06/scraping-google-search-results-using-python.png)
Python程式語言由Guido van Rossum於1991年開發,主要強調程式碼的可讀性和清晰簡潔的語法。
本教學將教我們使用 Python 抓取 Google 搜尋結果。Python 在以下領域獲得了廣泛的流行網頁抓取由於可讀性、可擴展性等優勢,它成為了一個社群。這使得它成為其他程式語言的絕佳替代品,也是網頁抓取任務的完美選擇。
這篇部落格文章不僅將重點放在 Google 資料抓取,還將讓您清楚地了解為什麼 Python 是從 Google 提取資料的最佳選擇,以及從 Google 收集資訊的好處有哪些。
使用 Python 抓取 Google 搜尋結果
我們將使用HTTPX和BS4來抓取和解析原始 HTML 資料。
閱讀本文後,您將對使用 Python 抓取 Google 搜尋結果有基本的了解。您還可以利用這些知識來使用其他程式語言進行未來的網頁抓取專案。
為什麼要用 Python 來抓取 Google 資料?
Python 是一種健全而強大的語言,非常重視其程式碼的可讀性和清晰度。這使得初學者能夠快速輕鬆地學習和實現抓取腳本。它還擁有一個龐大且活躍的開發人員社區,如果您的程式碼出現任何問題,他們可以為您提供幫助。
使用 Python 的另一個優點是,它提供了專門為從 Web 抓取資料而設計的各種框架和程式庫,包括 Scrapy、BeautifulSoup、Playwright 和 Selenium。
總的來說,Python 提供了許多優勢,例如高效能、可擴展性和各種其他抓取資源。這使得它不僅成為從 Google 提取資料的絕佳選擇,而且也適用於其他網頁抓取任務。
使用 Python 抓取 Google 搜尋結果
在這篇文章中,我們將建立一個基本的 Python 腳本來抓取前十個 Google 搜尋結果,包括它們的標題、描述和連結。
設定
對於那些尚未在其設備上安裝 Python 的用戶,請考慮以下影片:
如果你不想看視頻,可以直接從官方安裝Python網站。
安裝庫
現在,讓我們在資料夾中安裝該專案所需的庫。
Beautiful Soup— 用於解析從網站擷取的 HTML 的第三方函式庫。
HTTPX— 用於 Python 的功能齊全的 HTTP 用戶端,用於從網站提取資料。
如果您不想閱讀他們的文檔,請透過執行以下命令來安裝這兩個庫。
pip install httpx
pip install beautifulsoup4
流程
這樣,我們就完成了用於抓取 Google 的 Python 專案的設定。讓我們先導入我們將在本教程中進一步使用的庫。
import httpx
import asyncio
from bs4 import BeautifulSoup
然後,我們將定義一個非同步函數,該函數將從中抓取有機數據網頁。
定義函數後,我們將 headers 變數初始化為使用者代理,以使我們的抓取機器人模仿有機用戶。
用戶代理程式是一個請求標頭,用於標識請求軟體的裝置。
如果您想了解有關標頭的更多信息,請參閱本指南:使用 Python 進行網頁抓取
然後,我們使用非同步上下文管理器來建立 HTTP 用戶端。最後,我們使用該用戶端使用關鍵字對目標 URL 發出帶有指定標頭的 HTTP GET 請求,await以等待伺服器的回應。
現在,在上下文管理器中,我們將建立一個 BeautifulSoup 物件來解析和瀏覽 HTML。
async with httpx.AsyncClient() as client:
response = await client.get("https://www.google.com/search?q=python+tutorial&gl=us&hl=en", headers=headers)
soup = BeautifulSoup(response.content, "html.parser")
建立 Beautiful Soup 物件後,我們將從 HTML 中找到所需元素的標籤。
![](https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/af43b498-b88a-44e0-b79f-85c3ea4b3852/scrape-google-search-results-using-python-2-1536x743.png?t=1705928933)
如果您檢查網頁,您會發現每個自然結果都位於divclass 容器下g。
因此,我們將使用該類別循環遍歷每個div標籤g,以從 HTML 中獲取所需的資訊。
organic_results = []
for el in soup.select(".g"):
然後,我們將找到標題、描述和連結的標籤。
如果你進一步檢查 HTML,或看一下上面的圖片,你會發現標題的標籤是h3,連結的標籤是 .yuRUbf > a,描述的標籤是 .VwiC3b。
organic_results = []
i = 0
for el in soup.select(".g"):
organic_results.append({
"title": el.select_one("h3").text,
"link": el.select_one(".yuRUbf > a")["href"],
"description": el.select_one(".VwiC3b").text,
"rank": i+1
})
i+=1
print(organic_results)
asyncio.run(get_organic_data())
在您的終端機中執行此程式碼。您將能夠從 Google 獲取所需的資料。
[
{
"title": "The Python Tutorial \u2014 Python 3.11.3 documentation",
"link": "https://docs.python.org/3/tutorial/",
"description": "This tutorial introduces the reader informally to the basic concepts and features of the Python language and system. It helps to have a Python interpreter\u00a0...",
"rank": 1
},
{
"title": "Python Tutorial",
"link": "https://www.w3schools.com/python/",
"description": "Learn by examples! This tutorial supplements all explanations with clarifying examples. See All Python Examples. Python Quiz. Test your Python skills with a\u00a0...",
"rank": 2
},
.....
恭喜!
您已經成功製作了一個 Python 腳本來抓取 Google 搜尋結果。
但這種方法仍然不能用於大規模地從 Google 抓取數據,因為這可能會導致您的 IP 被 Google 永久封鎖。相反,你可以嘗試這個Google抓取API從谷歌抓取資料而不被阻止。
使用 Google Search API 抓取搜尋結果
Serpdog 提供了一個簡單且簡化的解決方案,透過其強大的功能來抓取 Google 搜尋結果搜尋引擎結果頁面 API,它還解決了處理代理和驗證碼的問題,以實現順利的抓取過程。除了有機結果之外,它還以整個行業最實惠的價格提供大量額外數據。
![](https://serpdog.io/wp-content/uploads/2023/03/web-scraping-google-search-results-with-php-4-1024x491.png)
Serpdog – Google 搜尋 API
註冊後您還將獲得 1000 個免費 API 積分。
在我們的網站上註冊後,您將獲得一個 API 金鑰。在下面的程式碼中複製您的 API 金鑰,您將能夠輕鬆地使用 Python 快速抓取 Google 搜尋結果。
import requests
payload = {'api_key': 'APIKEY', 'q':'python+tutorial' , 'gl':'us'}
resp = requests.get('https://api.serpdog.io/search', params=payload)
print (resp.text)
結論:
總的來說,Python 是一種優秀的語言,提供與網頁抓取相關的各種功能。然而,使用 Python 時存在某些限制,例如抓取 Google 時的回應速度較慢、缺乏對多執行緒的支持,以及由於大量請求而導致您的 IP 被 Google 封鎖的風險。
建議在與 Google 打交道時實施道德策略。或者,開發人員可以集成 Google抓取API 進入他們的軟體以避免阻塞。
在本教程中,我們學習了使用 Python 抓取 Google 搜尋結果。隨意地給我發短信您需要澄清的任何事情。關注我推特。謝謝閱讀!