2013-06-30 13 views
7

Próbuję pobrać dane z trendów Google i po dwóch próbach wystąpił błąd "Osiągnąłeś dzienny limit".Ograniczenie limitu Trendów Google

Czy istnieje sposób obejścia tego? Wiem, że projekty Google API mają specjalne limity przydziału, ale Google Trends nie ma interfejsu API. Czytałem również, że możemy potrzebować przekazać plik cookie, aby wyglądało na to, że jestem zalogowany. Czy ktoś wcześniej miał do czynienia z tym problemem?

Odpowiedz

4

Prawdopodobnie wyłączone pliki cookie, które sprawia, że ​​Google Trends, że jesteś robotem

+1

Pracowałem dla mnie - zostawiłem włączony adblock, który to zrobił. Wyłącz go w domenie i jest w porządku. –

4

jestem zmaga się z tym samym numerze! Od swoje pytanie nie mogę dowiedzieć się, na jakim etapie osiągnąłeś ... Ale tu jest rozwiązanie, które znalazłem:

  1. Należy naśladować przeglądarkę z plików cookie. Myślę, że najlepszym sposobem na to jest użycie biblioteki Mechanize.
  2. Początkowo program powinien „login” za pomocą żądania GET do „https://accounts.google.com/Login?hl=en
  3. Zaraz po tym można uzyskać dostęp do niektórych inne zasoby osobowe, ale nie google trendy!
  4. Po pewnym znaczącym czasie można uzyskać dane trendów google jako CSV.
  5. Wciąż nie odkryłem dokładnego czasu, ale jest to więcej niż 10 minut i mniej niż kilka godzin :). Właśnie dlatego zapisywanie plików cookie do późniejszego wykorzystania jest dobrym pomysłem!

Jeszcze kilka porad:

  • Jeśli tworzysz za pomocą Python/Ruby pod Windows nie zapomnij założyć pakiet CA certyfikatów głównych dla biblioteki OpenSSL. W przeciwnym razie połączenie HTTPS zakończy się niepowodzeniem, a Ty się nie zalogujesz! Zobacz Getting the `certificate verify failed (OpenSSL::SSL::SSLError)` erro with Mechanize object

  • Zalecam zapisywanie plików cookie na zewnętrzny plik przy zamykaniu programu. I przywracając je przy starcie.

  • Nie zapomnij zezwolić na przekierowania, ponieważ Google stale używa przekierowań.

Ruby przykładowy kod:

require 'mechanize' 
require 'logger' 
begin 
    agent = Mechanize.new { |a| 
    a.user_agent = 'Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.16' 

    cert_store = OpenSSL::X509::Store.new 
    cert_store.add_file 'cacert.pem' 
    a.cert_store = cert_store 

    a.log = Logger.new('mech.log') 

    if File.file?('mech.cookies') 
     cookies = Mechanize::CookieJar.new 
     cookies.load('mech.cookies') 
     a.cookie_jar = cookies 
    end 

    a.open_timeout = 5 
    a.read_timeout = 6 
    a.keep_alive = true 
    a.redirect_ok = true 
    } 

    LOGIN_URL = "https://accounts.google.com/Login?hl=en&continue=http://www.google.com/trends/" 
    login_page = agent.get(LOGIN_URL) 
    login_form = login_page.forms.first 
    login_form.Email = * 
    login_form.Passwd = * 
    login_response_page = agent.submit(login_form) 

    page = agent.get(url) 

    # DO SOME TRENDS REQUESTS AFTER SIGNIFICANT PERIOD OF TIME 

ensure 
    if agent 
    agent.cookie_jar.save('mech.cookies') 
    end 
end 
3

myślę, że znalazł sposób na rozwiązanie tego problemu. Po prostu upewnij się, że wywołujesz interfejs Google Trends API z plikiem cookie PREF. Nie musisz logować się na konto Google. Oczywiście nie trzeba emulować przeglądarki. Plik cookie PREF wystarczy.

OK. Skąd pochodzi plik cookie PREF? To bardzo łatwe. Wystarczy otworzyć przeglądarkę i zalogować się na swoje konto Google. Na koniec sprawdź plik cookie PREF w witrynie Google, który znajduje się tuż pod domeną www.google.com. Następnie skopiuj wartość pliku cookie PREF do swojego programu lub skryptu. To wszystko.

W ten sposób nazwałem API Google Trends setki razy w kilka sekund. Powodzenia!

+0

czy możesz mi powiedzieć, jak używać go w java? –

Powiązane problemy