簡體   English   中英

Google趨勢-配額限制-IP地址更改器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM