【发布时间】:2016-11-03 16:16:07
【问题描述】:
我正在使用非官方 Google 趋势 API (https://github.com/GeneralMills/pytrends#trend) 编写代码,但是在几乎 10 次请求后,我收到以下错误:Exceeded Google's Rate Limit. Please use time.sleep() to space requests.
以下命令似乎没有正确连接到 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 请求配额限制错误:
超出了 Google 的速率限制。请使用 time.sleep() 来分配请求空间。
新的 IP 地址是:178.217.187.39
超出了 Google 的速率限制。请使用 time.sleep() 来分配请求空间。
新的 IP 地址是:95.128.43.164
你知道是否有办法绕过限制吗?可能由于 thor 未正确路由请求,Google Trends 没有获得新的 IP 地址。
提前致谢。
【问题讨论】:
-
他们不是在抱怨 IP 本身,而是你在请求之间访问 API 的速度有多快。调用 time.sleep() 的提示是有效的。如果您要发出多个请求,请尝试将它们间隔至少一秒钟,而不是每秒连续多次点击。
标签: python python-3.x web-scraping tor google-trends