gpt4 book ai didi

python - 无需包装器或使用 API : Python 即可访问 Google 趋势数据

转载 作者:行者123 更新时间:2023-12-02 05:10:59 26 4
gpt4 key购买 nike

我正在尝试编写一个 Python 程序来从 Google Trends (GT) 收集数据 - 具体来说,我想自动打开 URL 并访问折线图中显示的特定值:

enter image description here

我很乐意下载 CSV 文件,或者通过网络抓取值(根据我对 Inspect Element 的阅读,清理数据只需要简单的拆分或两次)。我想要进行很多搜索(很多不同的关键字)

我正在创建许多网址来从 Google 趋势收集数据。我使用了测试搜索中的实际 URL。 URL 示例:https://trends.google.com/trends/explore?q=sports%20cars&geo=US在浏览器上实际搜索该 URL 会显示相关的 GT 页面。当我尝试通过程序访问它时,问题就出现了。

我看到的大多数回复都建议使用 Pip 的公共(public)模块(例如 PyTrends 和“非官方 Google Trends API”) - 我的项目经理坚持认为我不使用不是由网站直接创建的模块(即:API 是可以接受,但仅限官方 Google API)。只有 BeautifulSoup 被批准为插件(不要问为什么)。

下面是我尝试过的代码示例。我知道这是基本的,但在我收到的第一个请求中:

HTTPError: HTTP Error 429: unknown": too many requests.

对其他问题的一些答复提到了 Google Trends API - 这是真的吗?我找不到任何有关官方 API 的文档。

这是另一篇文章,概述了我尝试过但对我不起作用的解决方案:

https://codereview.stackexchange.com/questions/208277/web-scraping-google-trends-in-python

url = 'https://trends.google.com/trends/explore?q=sports%20cars&geo=US'

html = urlopen(url).read()

soup = bs(html, 'html.parser')

divs = soup.find_all('div')

return divs

最佳答案

它使用的是您可以在网络选项卡中找到的 API

import requests
import json

r = requests.get('https://trends.google.com/trends/api/widgetdata/multiline?hl=en-GB&tz=-60&req=%7B%22time%22:%222018-05-29+2019-05-29%22,%22resolution%22:%22WEEK%22,%22locale%22:%22en-GB%22,%22comparisonItem%22:%5B%7B%22geo%22:%7B%22country%22:%22US%22%7D,%22complexKeywordsRestriction%22:%7B%22keyword%22:%5B%7B%22type%22:%22BROAD%22,%22value%22:%22sports+cars%22%7D%5D%7D%7D%5D,%22requestOptions%22:%7B%22property%22:%22%22,%22backend%22:%22IZG%22,%22category%22:0%7D%7D&token=APP6_UEAAAAAXO-yaYekqJ7Tf2nuoLBAigMSW7axoLTL&tz=-60')
data = json.loads(r.text.lstrip(")]}\',\n"))

for item in data['default']['timelineData']:
print(item['formattedAxisTime'], item['value'])

我们可以取消对 url 的引用,以便更好地了解正在发生的情况:

import urllib.parse

url = 'https://trends.google.com/trends/api/widgetdata/multiline?hl=en-GB&tz=-60&req=%7B%22time%22:%222018-05-29+2019-05-29%22,%22resolution%22:%22WEEK%22,%22locale%22:%22en-GB%22,%22comparisonItem%22:%5B%7B%22geo%22:%7B%22country%22:%22US%22%7D,%22complexKeywordsRestriction%22:%7B%22keyword%22:%5B%7B%22type%22:%22BROAD%22,%22value%22:%22sports+cars%22%7D%5D%7D%7D%5D,%22requestOptions%22:%7B%22property%22:%22%22,%22backend%22:%22IZG%22,%22category%22:0%7D%7D&token=APP6_UEAAAAAXO-yaYekqJ7Tf2nuoLBAigMSW7axoLTL&tz=-60'
print(urllib.parse.unquote(url))

这会产生:

'https://trends.google.com/trends/api/widgetdata/multiline?hl=en-GB&tz=-60&req={"time":"2018-05-29+2019-05-29","resolution":"WEEK","locale":"en-GB","comparisonItem":[{"geo":{"country":"US"},"complexKeywordsRestriction":{"keyword":[{"type":"BROAD","value":"sports+cars"}]}}],"requestOptions":{"property":"","backend":"IZG","category":0}}&token=APP6_UEAAAAAXO-yaYekqJ7Tf2nuoLBAigMSW7axoLTL&tz=-60'

您需要探索如何从中转移元素。

例如,我查看了搜索词banana,结果如下:

未加引号:

'https://trends.google.com/trends/api/explore?hl=en-GB&tz=-60&req={"comparisonItem":[{"keyword":"banana","geo":"US","time":"today+12-m"}],"category":0,"property":""}&tz=-60'

引用:

'https://trends.google.com/trends/api/explore?hl=en-GB&tz=-60&req=%7B%22comparisonItem%22:%5B%7B%22keyword%22:%22banana%22,%22geo%22:%22US%22,%22time%22:%22today+12-m%22%7D%5D,%22category%22:0,%22property%22:%22%22%7D&tz=-60'

关于python - 无需包装器或使用 API : Python 即可访问 Google 趋势数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56340866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com