gpt4 book ai didi

python - Google 趋势 - 配额限制 - IP 地址更改器

转载 作者:行者123 更新时间:2023-12-01 03:35:50 25 4
gpt4 key购买 nike

我正在使用非官方 Google Trends API ( https://github.com/GeneralMills/pytrends#trend ) 编写代码,但是在几乎 10 个请求之后,我收到以下错误:超出了 Google 的速率限制。请使用 time.sleep() 来间隔请求。

以下命令似乎无法正确连接到 Google 服务。

  pytrends = TrendReq(google_username, google_password, custom_useragent=None)

因此,我尝试更改我的 IP 地址以及 Tor 浏览器,如下所述:https://stackoverflow.com/a/34516846/7110706

controller = Controller.from_port(port=9151)

def connectTor():
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5 , "127.0.0.1", 9150, True)
socket.socket = socks.socksocket

def renew_tor():
controller.authenticate()
controller.signal(Signal.NEWNYM)

def showmyip():
url = "http://www.showmyip.gr/"
r = requests.Session()
page = r.get(url)
soup = BeautifulSoup(page.content, "lxml")
ip_address = soup.find("span",{"class":"ip_address"}).text.strip()
print('New IP adress is:' + ip_address)

主要问题在于以下代码:

def requestDailydatafromGT(keywords, geography, date):  #parameters must be strings 
from pytrends.request import TrendReq
import time
from random import randint

google_username = "" #put your gmail account
google_password = ""
path = ""

#Connect to google
pytrend = TrendReq(google_username, google_password, custom_useragent=None)

requestdate=str(date)+' 3m'

trend_payload = {'q': keywords,'hl': 'en-US','geo': geography, 'date': requestdate} #define parameters of the request
mes=0

while mes==0:
try:
results= pytrend.trend(trend_payload, return_type='dataframe').sort_index(axis=0, ascending=False) #launch request in Google tren0ds
mes=1

except Exception:
renew_tor()
connectTor()
time.sleep(randint(5,15))
mes=0

return results

随着 IP 地址随时间变化,代码似乎可以正常工作,但我仍然遇到 Google 请求配额限制错误:

Exceeded Google's Rate Limit. Please use time.sleep() to space requests.

New IP address is : 178.217.187.39

Exceeded Google's Rate Limit. Please use time.sleep() to space requests.

New IP address is: 95.128.43.164

你知道有没有办法绕过这个限制?也许 Google 趋势无法获取新的 IP 地址,因为 thor 未正确路由请求。

提前致谢。

最佳答案

您是否已尝试在 while 循环内(重新)连接到 Google?

while mes == 0:
pytrend = TrendReq(google_username, google_password, custom_useragent=None) # Connect to google
try:
results = pytrend.trend(trend_payload, return_type='dataframe').sort_index(axis=0, ascending=False) # Launch request in Google Trends
mes = 1

更新1:正如OP告诉我的,我的解决方案仅在使用随机用户代理时才有效。

因此类似下面的代码应该可以工作:

def random_word(length):
"""Return a random word of 'length' letters."""
return ''.join(random.choice(string.ascii_letters) for i in range(length))

[...]

def requestDailydatafromGT(keywords, geography, date): #parameters must be strings
[...]
while mes == 0:
pytrend = TrendReq(google_username, google_password, custom_useragent=random_word(8)) # Connect to Google
try:
results = pytrend.trend(trend_payload, return_type='dataframe').sort_index(axis=0, ascending=False) # Launch request in Google Trends
mes = 1
[...]

更新 2:每次续订 Tor 时无需进行身份验证。您只需在 Controller 创建后执行一次即可。

controller = Controller.from_port(port=9051)
controller.authenticate(<YOUR_TOR_CONTROL_PASSWORD>)

作为附加信息,标准端口应该是:

托尔:9050 | Tor 控制:9051

Tor 浏览器:9150 | Tor 浏览器控制:9151

在默认 Tor 配置文件中取消注释“ControlPort 9051”(并添加我的散列密码)后,我使用了 9050 和 9051 端口。

关于python - Google 趋势 - 配额限制 - IP 地址更改器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40406458/

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