Skrypt do monitorowania pozycji w Google z 2captcha bez proxy!

1 Star2 Stars3 Stars4 Stars5 Stars (4 ocen, średnia: 5,00 / 5)
Loading...

Monitorowanie pozycji w Google bez proxy jest możliwe. W zasadzie można monitorować bez proxy nawet tysiące fraz dziennie. Stworzymy właśnie taki bezpłatny skrypt do monitorowania pozycji w Google w języku php. Aby było to możliwe musimy dodatkowo skorzystać z usług serwisu 2captcha.com. 

 

Sprawdzanie pozycji strony w Google na konkretną frazę / słowo kluczowe

Monitoring pozycji w Google można zamknąć w kilku linijkach kodu php, bez używania jakichkolwiek dodatkowych bibliotek:

1
2
3
4
5
6
7
8
9
10
11
12
13
$fraza = 'blog seo';

$strona = 'xn--okazwoka-bpb.pl'; //czyli okazwłoka.pl

$content = file_get_contents("https://www.google.pl/search?num=100&start=0&hl=pl&q=".trim(urlencode($fraza))."&gws_rd=cr,ssl&ie=UTF-8&oe=UTF-8");

preg_match_all('|<a href="/url\?q=(.+?)&amp|is',$content,$pozycje);
$i = 1;
foreach ($pozycje[1] as $p) {
if (stristr($p,$strona)) { echo $pozycja = "Strona {$strona} na frazę {$fraza} ma pozycję {$i}"; break; }
$i++;
}
if (!$pozycja) { echo 'Poza 100';}

Zmienna $content wyświetli taką treść:

Wystarczy teraz  zliczyć na której pozycji (w przykładzie za pomocą wyrażeń regularnych) pokaże się poszukiwania domena i mamy wszystko gotowe:

Proste, sprawdzanie pozycji strony na słowo kluczowe jest banalne. I to koniec? Można by tak rzec, jednak spróbuj sobie tym skryptem sprawdzić kilkadziesiąt fraz. Szybko zorientujesz się (maksymalnie po około 30 zapytaniach do wyszukiwarki), że coś się popsuło:

Oznacza to, że wyszukiwarka Google zwyczajnie zbuntowała się. Zwraca kod http 429, co oznacza, że z Twojej maszyny wyszło za dużo zapytań do wyszukiwarki. W praktyce wyszukiwarka Google zaserwowała zabezpieczenie, gdyby przejść po przekierowaniach będzie to taki wynik:

To zabezpieczenie Recaptcha v2. Wyszukiwarka Google każdego dnia musi w jakiś sposób walczyć z automatycznym odpytywaniem, są takich pewnie grube miliony na dzień, a może nawet i na godzinę. Stąd każdy program do monitorowania pozycji w Google musi jakoś omijać nałożone limity. Jakby tego było mało, co jakiś czas zabezpieczenia ulegają zmianie. Nawet niewielka może „położyć” monitoring i sprawić, że skrypt do sprawdzania pozycji w Google trzeba modyfikować.

Jak sprawdzić pozycję w Google w przypadku zablokowania IP? Można poczekać kilka-kilkanaście godzin i zapytania zostaną (albo nie) odblokowane. Ale można rozwiązać zabezpieczenie i sprawdzać pozycje dalej, bez czekania. Nie będziemy jednak implementować ręcznego rozwiązywania Captcha. Przerzucimy tą żmudną robotę na kogoś innego…

Jak ominąć limity na odpytywanie wyszukiwarki Google?

W sumie limitów tych nie da się ominąć, ale skrypt może udać człowieka, który przejdzie przez zabezpieczenia. I właśnie w tym celu zadanie rozwiązywania zabezpieczenia Recaptcha przerzucamy na serwis 2captcha.com. Po poprawnym rozwiązaniu zabezpieczeń przez serwis będzie można kontynuować wysyłanie zapytań do wyszukiwarki Google, mierzenie pozycji znowu będzie odblokowane!

Ile kosztuje automatyczne rozwiązywanie zabezpieczeń z 2captcha.com?

Za każde 1000 rozwiązań Recaptcha v2 zapłacisz 3 dolary (USD), czyli około 12 złotych. Wyszukiwarka blokuje IP średnio raz na 20-30 zapytań. W prostym przeliczeniu możesz tym sposobem odpytać wyszukiwarkę 20-30 tysięcy razy – za 12 złotych. Można więc sprawdzać nawet tysiąc fraz każdego dnia przez cały miesiąc.

Jak założyć konto i jak załadować środki w 2captcha.com?

Dla ułatwienia 2captcha.com ma przygotowaną polską wersję językową, po wejściu na stronę wystarczy przewinąć na sam dół i wybrać odpowiedni język. Niestety nie wszystkie elementy są przetłumaczone, ale da się z tym żyć.

 

W sumie nie ma sensu opisywać krok po kroku jak założyć konto. Formularz jest typowy i dostępny przez przycisk „Zarejestruj się”:

Załadowanie konta środkami może (choć nie powinno) sprawiać problemy. Oto proces ładowania konta krok po kroku:

1. Zaloguj się do swojego konta 2captcha.com.

2. Kliknij „Add Funds”:

3. Wybierz pierwszą opcję „PayPro”:

4. Podaj kwotę (minimum 10$) i kliknij „ADD FUNDS”:

5. Wypełnij swoje dane:

6. Wybierz formę płatności:

Jak widać do wyboru mamy kilka opcji, standardowo najbardziej przydatne będą „Karta kredytowa”, „PayPal” oraz „Przelew bankowy w czasie rzeczywistym”. Opcji karty kredytowej i PayPal nikomu nie trzeba tłumaczyć, jeśli posiada kartę kredytową lub konto PayPal. Natomiast przypadku wybrania opcji „Przelew bankowy w czasie rzeczywistym”, mamy możliwość zrobienia przelewu przez „Przelewy24.pl” lub „Trustly”:

7. Po wybraniu odpowiedniej formy płatności kliknij „Złóż zamówienie”, dokończ płatność i gotowe! Maksymalnie po kilku minutach na Twoim koncie 2captcha.com pojawią się środki (o ile nie wybrałeś opcji „Przelew bankowy”).

Skrypt do sprawdzania pozycji w Google

Wiemy już, że odblokowanie limitu zapytań do wyszukiwarki Google zrealizujemy za pomocą 2captcha.com. Skorzystanie z tej możliwości wiąże się oczywiście ze zmienieniem kodu skryptu zaprezentowanego na samym początku tego artykułu. Zapominamy o nim i budujemy nowy w oparciu o bibliotekę CURL w PHP. Żeby nie bawić się z podstawami biblioteki CURL po prostu skorzystajmy z mojej gotowej, prostej klasy, którą dołączam do skryptu (plik curl.php).

Cały skrypt do sprawdzania pozycji ma 51 linijek kodu wliczając w to komentarze (bez komentarzy jest to zaledwie 41 linii):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
require 'curl.php';
$curl = new curl();
$fraza = ($_GET['fraza']?$_GET['fraza']:'blog o pozycjonowaniu'); //szukana fraza
$strona = ($_GET['strona']?$_GET['strona']:'xn--okazwoka-bpb.pl'); //szukana strona
$_2captchakey = 'API_KEY'; //klucz API 2captcha.com
//wyszukujemy frazę
$response = $curl->get("https://www.google.pl/search?num=100&start=0&hl=pl&q=".trim(urlencode($fraza))."&gws_rd=cr,ssl&ie=UTF-8&oe=UTF-8");
if ($curl->getHttpCode() == 429) {
//jeśli kod odpowiedzi jest 429, oznacza to że zapytania są zablokowane
//pobieramy niezbędne dane recaptcha
$sitekey = $curl->getByXpath("//div/@data-sitekey");
$skey = $curl->getByXpath("//div/@data-s");
$f_action = $curl->getByXpath("//form/@action");
$q_id = $curl->getByXpath("//input[@name='q']/@value");
$f_continue = $curl->getByXpath("//input[@name='continue']/@value");
$pageUrl = $curl->getUrl();
//wysyłam recaptcha do rozwiązania
$retrieve= file_get_contents("http://2captcha.com/in.php?key=".$_2captchakey."&json=1&method=userrecaptcha&googlekey=".$sitekey[0]."&data-s=".$skey[0]."&pageurl=".$pageUrl);
$first = json_decode($retrieve,true);
if ($first['status']!=1) { die('Problem z wysłaniem Recaptcha do 2captcha.com'); }
else { $hello = $first['request']; } //otrzymuję id z 2captcha, potrzebne do późniejszego pobrania g-recaptcha-response }
//przygotowuję adres do odpytania (pobranie rozwiązania)
$con="http://2captcha.com/res.php?key=".$_2captchakey."&json=1&action=get&id=".$hello;
//odczekuję 23 sekundy
sleep(23);
//pobieram odpowiedź
$getting = file_get_contents($con);
$second = json_decode($getting,true);
//dopóku Captcha nie jest gotowa odczekuję po 10 sekund i sprawdzam odpowiedź z 2captcha
while ($second['request'] == 'CAPCHA_NOT_READY') {
sleep(10);
$getting = file_get_contents($con);
$second = json_decode($getting,true);
}
$secondresult = $second['request']; //gotowe, rozwiązanie recaptcha: g-recaptcha-response
//wypełniam formularz i go wysyłam
$curl->referer($contenturl);
$curl->setField('q',$q_id[0]);
$curl->setField('continue',$f_continue[0]);
$curl->setField('g-recaptcha-response',$secondresult);
$curl->setField('submit','');
$curl->post('http://ipv4.google.com/sorry/index');
}
//teraz sprawdzam wynik i szukam strony z pomocą wyrażeń regularnych
preg_match_all('|<a href="/url\?q=(.+?)&amp|is',$curl->content(),$pozycje);
$i = 1;
foreach ($pozycje[1] as $p) {
if (stristr($p,$strona)) { echo $pozycja = "Strona {$strona} na frazę {$fraza} ma pozycję {$i}"; break; }
$i++;
}
if (!$pozycja) { echo 'Poza 100';}

Jak używać ten monitoring?

Pobierz pliki skryptu

Pliki dostępne pod tym linkiem (archiwum zip): php_monitor_google_2captcha

Wypakuj zawartość na dysk

Podaj klucz API z 2captcha.com

Gdzie znaleźć klucz API? Otwórz panel 2captcha.com i zjedź nieco niżej, swój klucz znajdziesz w takim oknie:

Gdzie wkleić? Otwórz plik index.php za pomocą NotePad++ i podaj klucz w linii numer 6:

Upload plików na serwer

Zrób upload plików na serwer z obsługą PHP do wybranego folderu. Ewentualnie odpal pliki na swoim komputerze (np. za pomocą programów takich jak EasyPHP, XAMPP, WampServer lub podobne).

Otwórz plik index.php w przeglądarce

Zlokalizuj skrypt i otwórz go w przeglądarce (Mozilla, Opera, Chrome, IE, Safari itd.):

Jak widać za każdym razem sprawdzana jest fraza „blog o pozycjonowaniu” dla strony okazwłoka.pl. Aby to zmienić dodaj dwa parametry GET do adresu: „strona” oraz „fraza”, na przykład tak:

Dzięki takiemu rozwiązaniu bez edycji pliku można sprawdzać dowolną frazę dla dowolnej domeny.

Podsumowanie

To prosty, szybki i bezproblemowy skrypt do monitorowania pozycji, z którego każdy może dowolnie korzystać.

Normalnie odpowiedź wyszukiwarki jest bardzo szybka. Gdy skrypt będzie się dłużej wykonywał, oznaczać to będzie, że wyszukiwarka zaserwowała Recapcha2 do rozwiązania, z którym to musi się uporać serwis 2captcha.com:

 

Pamiętaj, że automatyczne odpytywanie wyszukiwarki Google jest sprzeczne z „Warunkami korzystania z usług Google”.

1 Star2 Stars3 Stars4 Stars5 Stars (4 ocen, średnia: 5,00 / 5)
Loading...

9 thoughts on “Skrypt do monitorowania pozycji w Google z 2captcha bez proxy!

  • Czerwiec 16, 2020 at 9:55 am
    Permalink

    Myslisz ze dałoby rade to przerobić na sprawdzanie pozycji w wersji mobilnej np. przez manipulacje user agentem?

  • Czerwiec 16, 2020 at 10:02 am
    Permalink

    Oczywiście, wystarczy podać user agent w metodach get/post w curl.php
    A później jeszcze napisać odpowiednie wyrażenie regularne do zliczania pozycji.

  • Czerwiec 16, 2020 at 10:10 pm
    Permalink

    Plus za to, że udostępniasz kod, prezentujesz rozwiązanie za darmo 🙂 Kod spełnia swoje zadanie ale…
    1. Skorzystałbym z biblioteki dostarczonej przez 2captcha https://github.com/2captcha/2captcha-php,
    2. Nie mieszałbym języka polskiego i angielskiego w kodzie. Prawdę mówiąc nie używałbym polskiego w ogóle,
    3. Może wrzuć kod na gist lub utwórz repozytorium na GitHub.

  • Czerwiec 17, 2020 at 8:58 am
    Permalink

    Dzięki za komentarz 🙂 , już tłumaczę:
    1. Działanie skryptu przy łączeniu z 2captcha.com jest zawężone do korzystania z żądań GET, nie korzystamy tu z żadnych dodatkowych parametrów (tu zawsze idzie o rozwiązanie recaptcha2). Korzystanie z takiej biblioteki uznałem za zbędne, to byłoby jak próba ubicia muchy armatą 😉
    2. Yes Sir! 😉 Próbowałem już wiele razy i zawsze ten polski się wkrada 😀
    3. Nie jestem zwolennikiem wrzucania każdego kawałka kodu do gita, ale pewnie kiedyś się przekonam 🙂

  • Sierpień 21, 2020 at 12:19 pm
    Permalink

    Co daje użycie dodatkowego pliku curl.php? Czy jest on potrzebny w przypadku potrzeby korzystania z Capsta?
    Plik poprawnie wypluwa moje pozycje, ale dla kilku fraz /sprawdzane ręcznie i popularnymi narzędziami/ zakłamuje o około 10 pozycji.

  • Sierpień 27, 2020 at 7:24 pm
    Permalink

    curl.php zawiera klasę/instrukcje i bez niego skrypt nie ruszy.

    Dodaj w linii 7 przed $response komendę echo, wtedy zobaczysz czy faktycznie skrypt dobrze oblicza pozycje.

    O różnicach w pozycjach na różnych urządzeniach chyba nie pisałem na blogu, ale jest informacji sporo w sieci.

  • Listopad 16, 2020 at 9:15 pm
    Permalink

    jeszcze pasowałoby rozbudować o:
    – wiecej fraz do sprawdzenia (lista)
    – zapis do pliku
    i mamy wszystko 🙂

  • Listopad 17, 2020 at 12:21 pm
    Permalink

    Można to łatwo zrobić, oczywiście najlepiej byłoby z zapisem do bazy danych, ale można i na plikach.

    Potrzebna do tego jest znajomość odczytu i zapisu pliku (file lub/i file_get_contents). Jedno odświeżenie to sprawdzenie jednej frazy. Kod dodany przed skrypt:

    1
    2
    3
    4
    $frazy = file('frazy.txt');//każda fraza w osobnej linii
    $licznik= file_get_contents('licznik.txt'); //najlepiej utworzyć plik z wartością 0
    $_GET['fraza'] = trim($frazy[$licznik]);
    if (empty($_GET['fraza'])) { die('koniec');}

    I tam gdzie jest wyświetlenie pozycji dajesz zapis frazy i pozycji do pliku oraz zwiększenie o jeden wartości w pliku licznik.txt:

    1
    2
    file_put_contents('licznik.txt',$licznik++);
    file_put_contents('pozycje.txt',$_GET['fraza'].':'.$i."\r\n",FILE_APPEND);

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Title
Caption
File name
Size
Alignment
Link to
  Open new windows
  Rel nofollow