跳到内容

如何通过抓取谷歌趋势来解锁超能力

Google 免费提供的趋势工具提供了一个搜索数据金矿,可以为您的企业带来优势。通过大规模抓取这些数据,您可以获得宝贵的情报,从而在竞争中取胜。这份综合指南将教您如何使用 Python 来利用 Google 趋势抓取的超能力。

谷歌趋势通过民主化对聚合搜索量数据的访问来创造公平的竞争环境。精明的企业越来越多地利用趋势来获得独特的见解,为高影响力的决策提供信息:

  • 89%的数字营销者 根据最近的调查,依靠趋势进行关键词研究。搜索量数据有助于优化内容和 SEO 策略。

  • 趋势有所帮助 Spotify 发现尚未开发的市场 根据音乐搜索模式扩展到罗马尼亚和克罗地亚。

  • Hedgeye 等金融公司 使用搜索兴趣作为信号来抓取零售品牌的趋势数据来预测经济表现。

  • 风险投资和初创公司 使用趋势来量化产品发布前的市场需求并发现新的商机。

  • 趋势甚至 预测新冠病例激增 通过识别特定地区对症状搜索的兴趣激增。

应用程序无穷无尽,但手动查找数据缓慢且有限。这就是网络抓取的用武之地,它可以实现流程自动化并释放趋势的真正力量。

设置 Python Web Scraper

在抓取之前,让我们先了解一下关键的先决条件和工具:

学习Python

熟练掌握 Python 是实现爬虫的必要条件。我建议首先完成有关 Python 基础知识和面向对象概念的在线课程。一些好的入门资源是:

Python 丰富的库和简单的语法使其成为网络抓取的完美选择。

爬虫库

这些 Python 库提供了抓取功能:

  • 要求 – 发送 HTTP 请求以下载网页。比 Selenium 更轻量。

  • 美丽汤 – 使用 CSS 选择器和正则表达式解析 HTML 和 XML 文档以提取数据。

  • – 启动并控制 Chrome 和 Firefox 等浏览器以实现自动化。可以绕过 JavaScript 渲染问题。

  • Scrapy – 使用蜘蛛、管道、缓存等工具的大型抓取项目的完整框架。

对于 Google Trends,我建议使用 Requests 来获取页面并使用 BeautifulSoup 来解析 HTML。对于单站点抓取工具来说,Scrapy 太过分了。

代理

要屏蔽抓取工具流量,请通过以下方式路由请求 住宅代理服务器 来自 BrightData、SmartProxy 或 Oxylabs 等提供商。这使得每个请求都来自不同的住宅 IP 地址。

使用 Py 等 Python 库在请求中配置代理Socks:

import requests
import socks 

proxy = "PROXY_HOST:PORT"

socks.set_default_proxy(socks.SOCKS5, proxy)
socket.socket = socks.socksocket

requests.get(‘http://www.example.com‘)

轮换代理是稳定、长期运行的抓取的关键。

虚拟环境

使用 虚拟环境 将 scraper 依赖项和设置与主 Python 安装隔离。常见的选择是 virtualenv, pipenv 和蟒蛇。

例如:

pip install virtualenv
virtualenv myscraperenv
source myscraperenv/bin/activate

现在让我们看看实际构建刮刀!

趋势 Web 应用程序向内部 API 发出请求以获取搜索数据。我们需要对这些数据在 HTML 中的位置进行逆向工程并提取它。

让我们逐步了解一下:

获取页面 HTML

首先,我们将使用 Requests 下载页面 HTML:

import requests

url = ‘https://trends.google.com/trends/explore?date=all&q=python‘ 

response = requests.get(url)
html = response.text

我们还可以在这里集成 Selenium 浏览器自动化来渲染 JavaScript。

使用 BeautifulSoup 进行解析

接下来我们将解析 HTML 并使用 BeautifulSoup 浏览 DOM 树:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, ‘html.parser‘)

soup 现在包含结构化文档。

提取 JSON 数据

趋势图表数据位于名为的 JavaScript 变量中 window.DATA。我们需要提取原始 JSON 字符串:

data = soup.find(‘script‘, text=lambda t: t.startswith(‘window.DATA‘))
data_string = data.text.split(‘window.DATA = ‘)[1].rstrip(‘;‘) 

然后我们可以将其转换为嵌套的Python字典:

import json

data_json = json.loads(data_string)

解析时间序列

我们关键字的主要搜索量时间序列位于 data_json[‘timelineData‘]。让我们提取它:

import pandas as pd 

df = pd.DataFrame(data_json[‘timelineData‘])
print(df.head())

这将打印包含日期、搜索频率和格式化日期的前几行。

瞧!我们现在可以无限制地以编程方式访问任何关键字的 Google 趋势数据。

手动提取一个关键字的数据很有用,但真正的力量来自于抓取数千个术语。

要查询多个关键字的趋势,我们只需将抓取工具封装在一个循环中:

keywords = [‘python‘, ‘java‘, ‘c++‘] 

dataframes = []

for kw in keywords:

  url = f‘https://trends.google.com/trends/explore?date=all&q={kw}‘

  # Fetch HTML, extract JSON 
  # ...

  df = pd.DataFrame(data_json[‘timelineData‘])

  # Append each keyword‘s dataframe
  dataframes.append(df)

# Merge all data  
trends_data = pd.concat(dataframes, keys=keywords)

我们还可以在请求和错误处理之间添加延迟,以负责任地进行抓取:

import time
from random import randint

for kw in keywords:

  try:
    # Scraper code

    time.sleep(randint(3,5))

  except Exception as e:
    print(f‘Error: {e}‘)

    # Pause on failure
    time.sleep(60) 

这会以合理的速度查询 Google,以避免服务器超载。代理将进一步分发请求。

绕过验证码和区块

试图提取大量数据的抓取者可能会遇到验证码和机器人检测措施。以下是经过验证的绕过它们的技术:

住宅代理

通过路由请求 住宅IP 使您的流量显得更加人性化,因为它源自家庭网络。顶级代理提供商包括:

  • 亮数据 – 40M IP,正常运行时间为 97%,并自动解决验证码。价格起价约为 500 美元/月。
  • 智能代理 – 10 万个 IP,带有特殊的 Instagram 和运动鞋代理。每月最低约 700 美元。
  • 氧实验室 – 15M 个住宅 IP。支持高并发和大容量。大约每月 500 美元。

使用 Py 等库在 Python 中配置旋转代理Socks、请求和 Scrapy。

浏览器自动化

可以驱动真正的 Chrome 或 Firefox 浏览器渲染 JavaScript 并绕过寻找无头工具的保护。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True 

driver = webdriver.Chrome(options=options)

driver.get(url)
html = driver.page_source

driver.quit() 

对于大多数防御来说,这看起来像是一个真实的浏览器会话。

验证码解决服务

像工具一样 反验证码2Captcha 可以通过将验证码路由给人类解算器来自动解决验证码。价格起价约为每 2 个验证码 1000 美元,具体取决于速度和准确性需求。

Python集成示例:

import twocaptcha

api_key = ‘YOUR_API_KEY‘

solver = twocaptcha.TwoCaptcha(api_key)

try:
  result = solver.recaptcha(sitekey=‘SITE_KEY‘, url=‘URL‘)

except twocaptcha.APIError as e:
  print(e)

结合使用代理、浏览器和验证码解算器将有助于避免几乎任何阻塞。

通过自动化数据提取,让我们看看存储、分析和可视化的选项:

结构化数据格式

为了在 Python 中快速分析,我建议将抓取的趋势数据转换为 熊猫数据框。这提供了带有时间戳、搜索量和其他相关元数据的表格结构。

我们还可以将数据框导出为如下格式 CSV or JSON 为了便于携带:

trends_df.to_csv(‘trends_data.csv‘, index=False)

加载到数据库中

对于更高级的 SQL 查询和与其他数据源的连接,请将抓取的数据加载到关系数据库中,例如 PostgreSQL的 or MySQL的:

CREATE TABLE trends_data (
  date DATE,
  keyword VARCHAR(255), 
  search_volume INT  
);

# Insert dataframe rows 
trends_df.to_sql(‘trends_data‘, engine, if_exists=‘append‘, index=False)

NoSQL 数据库,例如 MongoDB的 也适用于灵活的 JSON 存储。

商业智能工具

要构建交互式仪表板和可视化,请将趋势数据集成到诸如 画面, 旁观者 or Power BI。它们直接连接到数据库和电子表格格式。

带有图表的 Tableau 仪表板示例

Tableau 让您可以轻松发现趋势和模式。

统计分析和建模

将趋势数据加载到 Python 和 Pandas 中后,我们可以使用以下库进行时间序列分析 统计模型先知:

from prophet import Prophet

model = Prophet()
model.fit(trends_df)

future = model.make_future_dataframe(periods=365)
forecast = model.predict(future)

先知根据历史模式预测未来趋势。

我们甚至可以构建 ML 模型,例如 有马LSTM 在数据集之上生成见解。可能性是无止境!

本指南向您展示了如何:

  • 使用 Requests、Selenium、Beautiful Soup 设置 Python 抓取器
  • 通过解析JSON提取搜索量时间序列数据
  • 使用循环和代理抓取数千个关键字
  • 将趋势数据存储在 Pandas、CSV、数据库中
  • 分析和可视化数据以获得见解

通过抓取,您可以按需访问 Google 强大的趋势工具,解锁独特的竞争情报。

相同的技术可以应用于任何站点。借助分析堆栈中的趋势数据,您可以洞察竞争对手所缺乏的未来机遇和风险。fetcherviewergefessdger ilnkd tffavfwa

我总是很乐意回答有关高级抓取和代理的任何其他问题。道德地使用您新发现的网络抓取超能力,让数据指导您的业务!

加入谈话

您的电邮地址不会被公开。 必填带 *