supermetrics / pytrends
Pytrends 是一个 Python 库,允许获取 Google Trends 数据
This package is auto-updated.
Last update: 2024-09-12 16:30:44 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)
- 在 requests 文档 中查看解释
-
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)。
- 在第二次尝试之后应用的重试退避因子。urllib3 将睡眠:
-
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
- 时区偏移量(以分钟为单位)
- 有关时区偏移的更多信息,请查看此wiki页面,其中包含有关UTC偏移的信息
- 例如,美国CST是
'360'
-
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'
- 默认为网络搜索
- 可以是
images
、news
、youtube
或froogle
(用于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]错误。
致谢
-
主要的JSON修订想法来自pat310的JavaScript库
-
基于Stack Overflow帖子连接到Google代码
-
借鉴了Matt Reid的Google Trends API的一些想法