[英]Google Trends - Quota limit - IP address changer
我正在使用非官方Google趨勢API( https://github.com/GeneralMills/pytrends#trend )編寫代碼,但是在幾乎沒有10個請求之后,我遇到了以下錯誤: Exceeded Google's Rate Limit. Please use time.sleep() to space requests.
Exceeded Google's Rate Limit. Please use time.sleep() to space requests.
以下命令似乎無法正確連接到Google服務。
pytrends = TrendReq(google_username, google_password, custom_useragent=None)
因此,我嘗試按照以下說明更改與Tor瀏覽器一起的IP地址: 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
您知道是否有辦法繞過限制嗎? 也許Google趨勢無法獲取新的IP地址,因為請求沒有被正確地路由。
提前致謝。
您是否已嘗試在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.from_port(port=9051)
controller.authenticate(<YOUR_TOR_CONTROL_PASSWORD>)
作為附加信息,標准端口應為:
Tor:9050 | Tor控制:9051
Tor瀏覽器:9150 | Tor瀏覽器控件:9151
在默認Tor配置文件中未注釋“ ControlPort 9051”(並添加了我的哈希密碼)后,我使用了9050和9051端口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.