使用 Python 爬取 Google 搜索结果的指南

使用 Python 爬取 Google 搜索结果的指南

谷歌作为主流搜索引擎,是宝贵数据的金矿。然而,自动、大规模地提取 Google 搜索结果是一项具有挑战性的工作。本指南深入探讨了这些挑战、克服这些挑战的方法以及高效获取 Google 搜索结果的技术。

了解 Google 的 SERP

SERP"(搜索引擎结果页面)一词经常出现在有关搜索 Google 的讨论中。它指的是输入搜索查询后显示的页面。与过去简单的链接列表不同,现代的 SERP 包含丰富的各种元素,以增强用户体验。主要元素包括特色片段、付费广告、视频旋转木马、"People also ask "部分、本地包和相关搜索。

谷歌搜索结果的合法性

从 Google SERP 中提取数据的合法性是一个热门话题。一般来说,从公开的互联网数据(包括 Google SERP 信息)中获取信息是合法的。但是,法律依据可能会有所不同,因此建议您咨询具体的法律顾问。

抓取谷歌搜索结果的挑战

谷歌使用多种方法来防止未经授权的数据采集,因此很难区分有害的机器人和无害的刮擦程序。常见的障碍包括

  1. 验证码:Google 使用验证码来区分机器人和人类,如果验证码不通过,会导致 IP 屏蔽。
  2. IP 禁止:如果网站认为搜索活动可疑,可能会触发 IP 禁止。
  3. 非结构化数据:要进行有效分析,刮擦数据必须组织良好。

Oxylabs 谷歌搜索 API 就是为了应对这些挑战而设计的,它能提供结构化的 Google 搜索数据,而无需麻烦地维护刮板。

  1. 抓取 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 的支持团队可通过电子邮件或在线聊天提供帮助。

类似文章