使用 Python 爬取 Google 搜索结果的指南
谷歌作为主流搜索引擎,是宝贵数据的金矿。然而,自动、大规模地提取 Google 搜索结果是一项具有挑战性的工作。本指南深入探讨了这些挑战、克服这些挑战的方法以及高效获取 Google 搜索结果的技术。
了解 Google 的 SERP
SERP"(搜索引擎结果页面)一词经常出现在有关搜索 Google 的讨论中。它指的是输入搜索查询后显示的页面。与过去简单的链接列表不同,现代的 SERP 包含丰富的各种元素,以增强用户体验。主要元素包括特色片段、付费广告、视频旋转木马、"People also ask "部分、本地包和相关搜索。
谷歌搜索结果的合法性
从 Google SERP 中提取数据的合法性是一个热门话题。一般来说,从公开的互联网数据(包括 Google SERP 信息)中获取信息是合法的。但是,法律依据可能会有所不同,因此建议您咨询具体的法律顾问。
抓取谷歌搜索结果的挑战
谷歌使用多种方法来防止未经授权的数据采集,因此很难区分有害的机器人和无害的刮擦程序。常见的障碍包括
- 验证码:Google 使用验证码来区分机器人和人类,如果验证码不通过,会导致 IP 屏蔽。
- IP 禁止:如果网站认为搜索活动可疑,可能会触发 IP 禁止。
- 非结构化数据:要进行有效分析,刮擦数据必须组织良好。
Oxylabs 谷歌搜索 API 就是为了应对这些挑战而设计的,它能提供结构化的 Google 搜索数据,而无需麻烦地维护刮板。
- 抓取 Google 搜索结果的基本 Python 库
要开始本教程,使用 Python 从 Google 搜索中提取数据,请确保您具备以下前提条件:
- Oxylabs SERP API 的访问凭证
- 安装 Python
- 请求库
首先,注册 Oxylabs 的 Google 搜索结果 API 以获取用户名和密码,这在本教程中至关重要。然后,从 Python 官方网站安装 Python(3.8 或更高版本)。最后,您将需要 Requests 库,该库以能够轻松处理 HTTP 请求而闻名。使用以下命令安装它:
适用于 macOS/Linux:
$python3 -m pip install requests
适用于 Windows:
d:amazon>python -m pip install requests
2. 构建有效载荷并执行 POST 请求
创建一个新的 Python 脚本并输入以下代码:
import requests
from 打印 import 打印
有效载荷 = { 'source': 'google'、 url': 'https://www.google.com/search?hl=en&q=newton' # 搜索 "牛顿 "的示例 }response = requests.request( 'POST'、 https://realtime.oxylabs.io/v1/queries'、 auth=('USERNAME', 'PASSWORD')、 json=payload、 )pprint(response.json())
该脚本将得到类似以下的响应:
{
"结果":[
{
"content": "......",
"创建时间": "年-月-日-时-分-秒",
"更新时间": "年-月-日-时-分-秒",
"页": 1,
"url": "https://www.google.com/search?hl=en&q=newton",
"job_id": "1234567890123456789",
"状态代码": 200
}
]
}
请注意,有效负载中的 URL 代表了谷歌搜索结果中的 "牛顿 "页面。
3. 自定义查询参数
有效载荷字典可根据您的刮擦需求进行定制。例如
有效载荷 = {
来源: 谷歌,
'url'(网址: 'https://www.google.com/search?hl=en&q=newton'
}
在这里,"来源 "是一个关键参数,默认为 Google,URL 指定 Google 搜索页面。还有其他各种参数,如 "google_ads"、"google_hotels "等,详见 Oxylabs 文档。
在配置有效载荷时,请记住使用 "google_search "作为源时不允许使用 URL 参数。不过,您可以针对不同的数据类型使用多个参数,而不需要多个 URL。
要进一步完善结果,您可以在有效载荷中添加 "域名"、"地理位置 "和 "本地 "等参数。例如
有效载荷 = {
来源: 谷歌搜索,
查询: 牛顿,
域名: de,
地理位置: 德国,
本地: 'en-us'(中文
}
此配置从 google.de 抓取美式英语结果,如在德国所见。您还可以使用 "start_page"、"pages "和 "limit "参数来控制结果的数量。例如,从第 11 页和第 12 页获取结果,每页 20 个结果:
有效载荷 = {
开始页: 11,
页面: 2,
限制: 20,
... # 附加参数
}
4.搜索谷歌搜索数据的最终 Python 脚本
综合所有元素,下面是一个完整的脚本示例:
import requests
from 打印 import 打印
有效载荷 = { 'source': 'google_search'、 query': 'shoes'、 domain': 'de'、 geo_location': 'Germany'、 locale':en-us'、 解析':true、 start_page': 1、 页面':5, limit': 10、 }response = requests.request( 'POST'、 https://realtime.oxylabs.io/v1/queries'、 auth=('USERNAME', 'PASSWORD')、 json=payload、 )if response.status_code != 200: print("Error - ", response.json()) exit(-1)pprint(response.json())
5. 将数据导出为 CSV
Oxylabs 的谷歌 Scraper API 可以将 HTML 页面转换为 JSON,从而无需使用 BeautifulSoup 或类似库。例如
有效载荷 = {
来源: 谷歌搜索,
查询: 阿迪达斯,
解析: True,
}
结果以 JSON 格式返回,使用 Pandas 库可以有效地对其进行规范化处理:
import pandas as pd
data = response.json()
df = pd.json_normalize(data['results'])
df.to_csv('export.csv', index=False)
6.错误和异常处理
遇到网络问题或参数无效等问题时,可使用 try-except 块:
try:
response = requests.request(
POST,
'https://realtime.oxylabs.io/v1/queries',
auth=(用户名, 密码),
json=payload、
)
except requests.exceptions.RequestException as e:
print("Error:", e)
if response.status_code != 200:
print("Error - ", response.json())
结论
本指南旨在向您传授以下知识 爬取谷歌 使用 Python 有效地搜索结果。如需进一步帮助或咨询,Oxylabs 的支持团队可通过电子邮件或在线聊天提供帮助。