如何使用 Python 搜刮 Google Trends 数据

评论: 0

使用 Python 和 Playwright 从谷歌趋势中抓取数据,可以详细检查关键词的流行程度,并监测趋势随时间的变化。这种方法为营销分析提供了重要的洞察力。

先决条件

在深入学习代码之前,请确保安装了以下工具:

  • Python 3.7+;
  • Playwright 图书馆.

您可以使用 pip 安装 Playwright:

pip install playwright

要在异步代码中使用 Playwright,还需要使用 asyncio 库,该库默认包含在 Python 3.7+ 中。

配置 Playwright 以使用 Google Trends

我们将使用强大的浏览器自动化工具 Playwright 来浏览 Google Trends 网站并下载包含趋势数据的 CSV 文件。本教程将指导您完成整个过程。

剧作家装置

首先,确保 Playwright 已安装:

playwright install

如果不想安装所有浏览器,只需使用此命令安装 chromium 浏览器。

playwright install chromium

代理配置

像 Google 这样的平台会主动打击僵尸活动,因此在进行搜索时,使用代理服务器是必不可少的。代理可以实现 IP 轮换,有助于降低被拦截的风险。在我们的脚本中,我们使用私有代理来路由我们的请求。

proxy = {
    "server": "IP:PORT",
    "username": "your_username",
    "password": "your_password"
}

用代理服务器的实际数据替换 IP、端口、用户名和密码变量。

与剧作家合作的逐步过程

在本例中,我们首先浏览 google.com,绕过任何可能的拦截,然后再进入 Google Trends 页面。这样做是为了模仿正常的用户行为,避免被检测到。

步骤 1:准备使用 Google Trends

这一步涉及初步行动,以防止被 Google 标记和屏蔽:

  • 启动浏览器:这包括启动一个配置了代理设置的 Chromium 浏览器实例。使用代理服务器可将刮擦活动伪装成正常的浏览器使用,有助于降低被发现的几率;
  • 谷歌导航:首先访问 google.com,使谷歌的跟踪系统适应新用户的存在。这一简单的导航步骤降低了后续活动被归类为僵尸的可能性,从而避免了立即封杀。
import asyncio
from playwright.async_api import Playwright, async_playwright

async def run(playwright: Playwright) -> None:
    # 使用代理设置启动浏览器
    browser = await playwright.chromium.launch(headless=False, proxy={
        "server": "IP:PORT",
        "username": "your_username",
        "password": "your_password"
    })
    
    # 创建新的浏览器上下文
    context = await browser.new_context()
    
    # 打开新页面
    page = await context.new_page()
    
    # 访问 Google 以模拟正常浏览
    await page.goto("https://google.com")

步骤 2:导航并从 Google Trends 下载数据

接下来,直接导航到所需数据所在的 Google Trends 页面。Google Trends 提供以 CSV 格式直接下载数据的选项,这有助于提取过程。单击 "下载 "按钮开始数据下载的操作可实现自动化。这样就无需人工干预即可提取趋势数据。一旦 "下载 "按钮可见,自动化操作就应继续点击该按钮,开始下载包含所需趋势数据的 CSV 文件。

 # 谷歌趋势导航
    await page.goto("https://trends.google.com/trends/explore?q=%2Fg%2F11bc6c__s2&date=now%201-d&geo=US&hl=en-US")
    
    # 等待并点击下载按钮
    async with page.expect_download() as download_info:
        await page.get_by_role("button", name="file_download").first.click()
    
    # 处理下载
    download = await download_info.value
    print(download.suggested_filename)

步骤 3:保存数据并结束会话

下载的 CSV 文件会自动保存在本地设备的指定目录中。

 # 保存下载的文件
    await download.save_as("/path/to/save/" + download.suggested_filename)

完整代码示例

以下是使用 Playwright 将 Google Trends 数据下载为 CSV 文件的完整代码:

import asyncio
import os
import re
from playwright.async_api import Playwright, async_playwright


async def run(playwright: Playwright) -> None:
   # 使用代理设置启动浏览器
   browser = await playwright.chromium.launch(headless=False, proxy={
       "server": "IP:PORT",
       "username": "your_username",
       "password": "your_password"
   })

   # 创建新的浏览器上下文
   context = await browser.new_context()

   # 打开新页面
   page = await context.new_page()

   # 访问 Google 以避免检测
   await page.goto("https://google.com")

   # 导航至谷歌趋势
   await page.goto("https://trends.google.com/trends/explore?q=%2Fg%2F11bc6c__s2&date=now%201-d&geo=US&hl=en-US")

   # 点击下载按钮
   async with page.expect_download() as download_info:
       await page.get_by_role("button", name=re.compile(r"file_download")).first.click()

   # 保存下载的文件
   download = await download_info.value
   destination_path = os.path.join("path/to/save", download.suggested_filename)
   await download.save_as(destination_path)

   # 关闭上下文和浏览器
   await context.close()
   await browser.close()


async def main() -> None:
   async with async_playwright() as playwright:
       await run(playwright)


asyncio.run(main())

根据本指南,您可以有效下载趋势数据、管理代理轮换和绕过僵尸保护机制。要有效避免拦截,使用可靠的代理服务器至关重要。强烈推荐使用住宅代理服务器,它提供动态 IP 地址,无需轮换配置。另外,静态 ISP 代理服务器也很有效;购买所需的 IP 数量,并在脚本中设置定期 IP 轮换。无论选择哪种方式,都能确保将拦截和验证码风险降至最低,从而更快、更顺利地进行数据搜刮。

评论:

0 评论