
如何使用 Python 抓取 Google 的“People Also Ask”
在本文中,我将带你了解如何使用 Python 抓取 PAA,提取有价值的信息,并存储数据以供分析。你需要具备基础的 Python 知识,包括 requests 库和 BeautifulSoup。我还会介绍一些技巧,帮助你在抓取时避免被 Google 封锁。
什么是 Google 的 People Also Ask?
Google 的“People Also Ask”功能对搜索结果页面很有帮助。它会显示与用户初始搜索相关的问题。每个问题都可以展开并显示简短答案,帮助用户快速了解相关主题。这对 SEO 非常有价值,因为它有助于识别受众经常搜索的热门问题。
最佳付费解决方案
要自动收集这些数据,你可以使用 Bright Data 的搜索引擎 API 或 Google Search Autocomplete API 等工具来收集搜索建议。你还可以将这些工具与 Google Sheets 连接起来,便于整理和分析。
可以查看我关于 最佳 5 个搜索引擎 API 的文章。我与该文中列出的任何服务都没有关联。
分步教程:如何使用 Python 抓取 Google People Also Ask
第 1 步:设置环境
首先,你需要设置 Python 环境并安装必要的库。本教程需要使用 requests 来处理 HTTP 请求,并使用 BeautifulSoup 来解析 HTML 内容。打开命令提示符或终端,并输入以下命令:
pip install requests beautifulsoup4
安装完成后,这些库可以让你请求 Google 的搜索结果页面,并解析 HTML 以获取 PAA 问题。
第 2 步:连接到 Google 搜索结果页面
在你的项目文件夹中创建一个名为 main.py 的文件。然后,导入所需的库,并设置一个基本的 Google 搜索函数。
下面是构建该函数的方法:
import requests
from bs4 import BeautifulSoup
def google_search(query):
query = query.replace(' ', '+')
url = f"https://www.google.com/search?q={query}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
print("Connection successful!")
return BeautifulSoup(response.text, "html.parser")
else:
print(f"Error: Unable to fetch the search results. Status code: {response.status_code}")
return None
这段代码设置了一个名为 google_search 的函数,它以查询词作为输入。它会将查询词格式化为可用于 URL 的形式,并设置合适的请求头来模拟浏览器请求。如果连接成功,HTML 内容会使用 BeautifulSoup 进行解析。
第 3 步:定位 PAA 问题
准备好 HTML 页面后,下一步是识别并提取 PAA 问题。通过检查 Google 的页面源代码,你会发现 PAA 问题通常包含在某个特定的 HTML 类中。我们来构建一个函数,用于定位并提取这些问题。
在 main.py 中将以下代码添加到前一个代码片段下方:
def extract_questions(soup):
questions = []
if soup:
for question in soup.select('span.CSkcDe'):
questions.append(question.get_text())
return questions
在这个函数中,soup.select 用于定位所有带有 span.CSkcDe 类的元素,该类通常是 PAA 问题的容器。如果 Google 的 HTML 结构发生变化,可能需要进行调整,因此如果遇到问题,请务必检查页面源代码。
第 4 步:保存结果
提取问题后,保存数据以便进一步分析非常重要。JSON 是存储结构化数据的合适格式,因为它易于读取,并且可以用于数据管道或与分析工具集成。
将 Data Journal 的文章发送到你的收件箱
免费加入 Medium,获取这位作者的更新。
记住我,以便更快登录
下面是如何带时间戳保存结果:
import json
import os
from datetime import datetime
def save_results(query, questions):
results = {
"date": datetime.now().strftime("%Y-%m-%d"),
"query": query,
"questions": questions
}
if os.path.exists("results.json"):
with open("results.json", "r", encoding="utf-8") as file:
data = json.load(file)
else:
data = []
data.append(results)
with open("results.json", "w", encoding="utf-8") as file:
json.dump(data, file, indent=4)
print("Results saved to results.json")
这个函数会检查 results.json 文件是否存在。如果存在,函数会追加新的结果;否则,它会创建一个新文件。每条记录都包含当前日期、查询词和问题列表。通过对数据进行结构化,你可以分析随时间变化的历史趋势。
第 5 步:运行脚本
完成基础函数后,你可以将它们组合起来,创建最终成品。下面是完整脚本:
def main(query):
soup = google_search(query)
questions = extract_questions(soup)
save_results(query, questions)
query = "how to start a blog"
main(query)
该脚本会执行 Google 搜索、提取并保存 PAA 问题。在终端中运行 main.py 会输出结果,你可以在 results.json 文件中查看。
成功抓取的额外提示
-
避免让 Google 服务器过载:Google 的反机器人机制可能会封锁过多请求,因此请在请求之间加入延迟。可以考虑使用 time.sleep() 添加间隔。
-
轮换用户代理和代理:对多个请求使用单一用户代理或 IP 可能会导致被封锁。可以考虑使用动态代理,并变换 user-agent 字符串来模拟真实用户行为。
-
设置定期运行:由于 PAA 问题会随时间变化,自动化该脚本并定期运行可以揭示不断演变的搜索趋势。使用 cron(适用于 Linux/macOS)或任务计划程序(适用于 Windows)等工具进行调度非常有效。
-
考虑第三方解决方案:对于高容量或专业需求,使用 Bright Data 的搜索引擎 API 或 Google Search Autocomplete API 等 API 可以简化并优化数据收集流程,尤其适用于大型项目。
结论
使用 Python 抓取 Google 的“People Also Ask”(PAA)部分,可以深入了解用户正在搜索的内容,帮助创建更有针对性的内容并提升 SEO。借助本指南中的 Python 代码,你可以自动从 PAA 部分收集数据,将其以有组织的格式存储,并跟踪随时间变化的趋势。
将 API 和其他工具加入你的设置,可以让数据更加有用,尤其适用于大规模项目。在抓取时,请遵循 Google 的使用政策,并使用代理和轮换用户代理来避免封锁并保持请求限制。随着时间推移,这种方法可以构建一个有价值的数据集,用于指导内容策略、紧跟热门话题并提升 SEO。
有任何问题吗?请在评论中告诉我!
对其他网页抓取指南感兴趣?
-
使用 Scrapy 进行网页抓取
-
使用 Selenium 进行网页抓取
-
用于网页抓取的 JavaScript 与 Python 对比
-
使用 Python lxml 进行网页抓取
-
使用 Excel 进行网页抓取
-
使用 C# 进行网页抓取
-
抓取亚马逊畅销商品
-
使用 Google Sheets 进行网页抓取
-
为网页抓取绕过 Cloudflare
-
请求限流指南
更多精彩文章,请访问我的个人主页 — Data Journal ❤️
346



被折叠的 条评论
为什么被折叠?



