supermetrics/pytrends

Pytrends 是一个 Python 库,允许获取 Google Trends 数据

安装: 77

依赖: 0

建议者: 0

安全: 0

星级: 0

关注者: 0

分支: 812

语言:Python

1.0.11 2023-03-10 11:11 UTC

README

简介

Google Trends 的非官方 API

允许简单的界面来自动下载 Google Trends 的报告。只有在 Google 再次更改其后端之前有效 :-P。当这种情况发生时,请随时贡献!

寻找维护者!

目录

安装

pip install pytrends

要求

  • 为 Python 3.3+ 编写
  • 需要 Requests, lxml, Pandas

回到顶部

API

连接到 Google

from pytrends.request import TrendReq

pytrends = TrendReq(hl='en-US', tz=360)

或者如果您因为 Google 速率限制而被阻止,想要使用代理

from pytrends.request import TrendReq

pytrends = TrendReq(hl='en-US', tz=360, timeout=(10,25), proxies=['https://34.203.233.13:80',], retries=2, backoff_factor=0.1, requests_args={'verify':False})
  • timeout(connect, read)

  • tz

    • 时区偏移量
    • 例如,美国中部标准时间 (CST) 是 '360'(注意 不是 -360,Google 以这种方式使用时区...)
  • proxies

    • 仅通过 https 代理 Google 传递
    • 列表 ['https://34.203.233.13:80','https://35.201.123.31:880', ..., ...]
  • retries

    • 总/连接/读取的重试次数,均表示为一个标量
  • backoff_factor

    • 在第二次尝试之后应用的重试退避因子。urllib3 将睡眠: {退避因子} * (2 ^ ({总重试次数} - 1)) 秒。如果退避因子为 0.1,那么 sleep() 将在重试之间睡眠 [0.0s, 0.2s, 0.4s, …]。它永远不会超过 Retry.BACKOFF_MAX。默认情况下,退避是禁用的(设置为 0)。
  • requests_args

    • 一个字典,包含传递给底层 requests 库的附加参数,例如 verify=False 忽略 SSL 错误

注意:参数 hl 指定访问 Google Trends 的主机语言。注意:仅 https 代理有效,您需要在代理 IP 地址后添加端口号

构建有效负载

kw_list = ["Blockchain"]
pytrends.build_payload(kw_list, cat=0, timeframe='today 5-y', geo='', gprop='')

参数

  • kw_list

    • 必需
    • 获取数据的关键词

回到顶部

API 方法

以下 API 方法可用:

  • 随时间变化的兴趣:返回历史、索引数据,显示了 Google Trends “随时间变化的兴趣”部分中最常搜索的关键词。

  • 历史每小时兴趣:返回历史、索引、每小时数据,显示了 Google Trends “随时间变化的兴趣”部分中最常搜索的关键词。它向 Google 发送多个请求,每次检索一周的每小时数据。这似乎是获取历史、每小时数据的唯一方法。

  • 按地区划分的兴趣:返回数据,显示了 Google Trends “按地区划分的兴趣”部分中最常搜索的关键词。

  • 相关主题:返回数据,显示了 Google Trends “相关主题”部分中与提供的关键词相关的关键词。

  • 相关查询:返回数据,显示了 Google Trends “相关查询”部分中与提供的关键词相关的关键词。

  • 热门搜索:返回Google Trends热门搜索部分显示的最新热门搜索数据。

  • 热门图表:返回Google Trends热门图表部分显示的特定主题数据。

  • 建议:返回一组额外的建议关键词,可用于细化趋势搜索。

回到顶部

常见 API 参数

许多API方法使用以下

  • kw_list

    • 关键词来获取数据:

    • 示例 ['Pizza']

    • 列表中最多五个术语:['Pizza', 'Italian', 'Spaghetti', 'Breadsticks', 'Sausage']

      • 高级关键词

        • 当使用Google Trends仪表板时,Google可能会提供建议的缩小搜索词。
        • 例如,"iron" 将有下拉列表 "Iron Chemical Element, Iron Cross, Iron Man, etc"
        • 使用get_suggestions()函数查找编码的主题,并选择最适合您的一个。
        • 例如: https://www.google.com/trends/explore#q=%2Fm%2F025rw19&cmpt=q
        • "%2Fm%2F025rw19" 是主题 "Iron Chemical Element",用于与pytrends一起使用
        • 您也可以使用 pytrends.suggestions()来自动化此过程。
  • cat

    • 用于缩小结果的类别
    • 通过手动使用Google Trends检查URL来查找可用类别。类别从cat=开始,在下一个&之前结束;或查看此wiki页面,其中包含所有可用类别
    • 例如: "https://www.google.com/trends/explore#q=pizza&cat=71"
    • '71' 是类别
    • 默认为无类别
  • geo

    • 两字母国家缩写
    • 例如,美国是 'US'
    • 默认为世界
    • 通过指定附加缩写可获得州/省的更多详细信息
    • 例如:阿拉巴马是 'US-AL'
    • 例如:英格兰是 'GB-ENG'
  • tz

  • timeframe

    • 开始日期

    • 默认为过去5年,'today 5-y'

    • 一切 'all'

    • 特定日期,'YYYY-MM-DD YYYY-MM-DD' 示例 '2016-12-14 2017-01-25'

    • 特定日期时间,'YYYY-MM-DDTHH YYYY-MM-DDTHH' 示例 '2017-02-06T10 2017-02-12T07'

      • 注意时间组件基于UTC
    • 当前时间减去时间模式

      • 按月: 'today #-m' 其中 # 是从该日期到提取数据的月份数

        • 例如: 'today 3-m' 将获取从今天到3个月前的数据
        • 注意 Google使用UTC日期作为 '今天'
        • 仅适用于1、3、12个月!
      • 每日: 'now #-d' 其中 # 是从该日期提取数据的日期数

        • 例如: 'now 7-d' 将获取上周的数据
        • 仅适用于1、7天!
      • 每小时: 'now #-H' 其中 # 是从该日期提取数据的小时数

        • 例如: 'now 1-H' 将获取上一小时的数据
        • 仅适用于1、4小时!
  • gprop

    • 要过滤到的Google属性
    • 示例 'images'
    • 默认为网络搜索
    • 可以是 imagesnewsyoutubefroogle(用于Google购物结果)

回到顶部

随时间变化的兴趣

pytrends.interest_over_time()

返回pandas.Dataframe

回到顶部

历史每小时兴趣

pytrends.get_historical_interest(kw_list, year_start=2018, month_start=1, day_start=1, hour_start=0, year_end=2018, month_end=2, day_end=1, hour_end=0, cat=0, geo='', gprop='', sleep=0)

参数

  • kw_list

    • 必需
    • 您要获取历史数据的键词列表
  • year_start, month_start, day_start, hour_start, year_end, month_end, day_end, hour_end

    • 您想要获取历史数据的时期
  • 睡眠

    • 如果您受到Google的限制,应该将此参数设置为某个值(例如60),以便在每次API调用之间进行间隔。

返回pandas.Dataframe

回到顶部

按地区划分的兴趣

pytrends.interest_by_region(resolution='COUNTRY', inc_low_vol=True, inc_geo_code=False)

参数

  • 分辨率

    • 'CITY' 返回城市级别的数据
    • 'COUNTRY' 返回国家级别的数据
    • 'DMA' 返回大都市区级别的数据
    • 'REGION' 返回地区级别的数据
  • inc_low_vol

    • True/False(包括低流量国家/地区的Google趋势数据)
  • inc_geo_code

    • True/False(包括数据中的国家ISO代码及其名称)

返回pandas.DataFrame

回到顶部

相关主题

pytrends.related_topics()

返回pandas.DataFrames的字典

回到顶部

相关查询

pytrends.related_queries()

返回pandas.DataFrames的字典

回到顶部

趋势搜索

pytrends.trending_searches(pn='united_states') # trending searches in real time for United States
pytrends.trending_searches(pn='japan') # Japan

返回pandas.DataFrame

回到顶部

顶级图表

pytrends.top_charts(date, hl='en-US', tz=300, geo='GLOBAL')

参数

  • 日期

    • 必需
    • YYYY整数
    • 例如,对于2019年的Top Chart数据,使用2019
    • 注意 Google已取消对每月查询(例如YYYY-MM)的支持
    • 注意 Google不返回当前年份的数据

返回pandas.DataFrame

回到顶部

建议

pytrends.suggestions(keyword)

参数

  • 关键字

    • 必需
    • 用于获取建议的关键字

返回字典

回到顶部

分类

pytrends.categories()

返回字典

回到顶部

注意事项

  • 这不是官方或受支持的API
  • Google可能会更改搜索量非常大或非常小的项目的聚合级别
  • 速率限制不公开知晓,如果您有稳定的估计请告诉我
    • 一位用户报告,在4小时的时间范围内,1,400个连续请求使他们达到限制。(在2个网络中复现)
    • 经过测试,一旦达到限制,每次请求(成功与否)之间60秒的睡眠时间是正确的。
  • 对于某些配置,依赖库certifi需要显式设置和导出环境变量REQUESTS_CA_BUNDLE。此变量必须包含ca证书保存的路径或运行时给出SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]错误。

致谢