Skrypt sprawdzający pozycję w wyszukiwarce. SERP checking script

Po bardzo długiej przerwie wracam do bloga.

W mojej nowej pracy jednym z problemów jakimi się zajmuje jest monitorowanie pozycji kilku stron na wybrane słowa kluczowe. Z natury jestem „leniwy” dlatego starałem się ten proces jakoś zautomatyzować. Jest kilka stron (seomoz, sitemapdoc, whatsmyserp, nextserp, seoserp), które pozwalają na kontrolę pozycji (sam używałem 3 pierwszych) ale nie spełniały moich oczekiwań. Najczęściej aby móc sprawdzić kilka stron albo kilka słów kluczowych należy wykupić płatną wersje takiego serwisu (seomoz 99$ miesięcznie). Czasem po prostu uciążliwe jest wpisywanie za każdym razem inny adres albo po prosu są niedokładne.  Postanowiłem poszukać jakiegoś skryptu, który ułatwiłby mi sprawdzanie pozycji. Sądziłem, że znalezienie czegoś takiego będzie bardzo proste, w końcu samo zagadnienie jest popularne a napisanie czegoś takiego nie powinno być trudne. Niestety. Okazało się, ze nie mogę znaleźć nic co by mnie satysfakcjonowało. Dlatego cytując siebie „…a napisanie czegoś takiego nie powinno być trudne” wpadłem na pomysł aby samemu napisać taki skrypt. Z racji stanowiska/oprogramowania jakiego używam w rachubę wchodził w zasadzie tylko Visual Basic Script.

Od razu zastrzegam był to pierwszy skrypt napisany w VBS jednocześnie wersja zamieszczona tutaj jest wersją deep pre alfa 0.03. Obecna wersja, mocno rozbudowana, sczytuje słowa kluczowe z pliku, zapisuje łądnie wszystko do Excela,  tworzy wykresik. Jednocześnie posiada mechanizm ułatwiający rozwiązywanie captcha. Skrypt pozwala na szybką zmianę języka wyszukiwarki, jest uporządkowany w funkcje/procedury i ma kilka innych bajerów. Ostatecznej wersji nie mogę, i nie chcę, opublikować gdyż jest używana w firmie.

Cały listing:

'    The script is provideed "as is"
'    Usage: script_name keyword no_of_pages
'    Author Tomasz Radomski

Option Explicit
Dim args

args = WScript.Arguments.Count

if args <> 2 then
  Wscript.Echo "SERP.vbs Keyword MaxSearchPage"
  wscript.Quit
end if

Dim objIE : Set objIE = CreateObject("InternetExplorer.Application")
Dim j, boolZnalazlem

boolZnalazlem = False

Function Adres(a)
Adres="http://www.google.com/search?hl=en&q="& WScript.Arguments.Item(0) & "&start=" & a
End Function

'GLOWNA FUNKCJA ODPOWIEDIALNA ZA SZUKANIE STRONY W WYNIKACH
Function Szukaj()
 IF NOT(boolZnalazlem) Then
' otwiera strone googla
  objIE.Visible = true
  objIE.Navigate Adres(j*10)
  Do Until objIE.ReadyState = 4
   WScript.Sleep 500
  Loop

  'ustawia szukany url
  Dim RegExp : Set RegExp=CreateObject("VBScript.RegExp")
  RegExp.Pattern="www.exmaple.com"

  Dim objResult, i, intPozycja
  'WYBRANIE WYNIKOW PO TAGU <H3>
  Set objResult = objIE.document.getElementsByTagName("h3")
  intPozycja=0
  For i=0 to objResult.length-1
  'SZUKANIE W WYNIKACH
  If (objResult(i).getAttribute("class")="r") then
    intPozycja=intPozycja+1
    If RegExp.Test(objResult(i).innerHTML) Then
     boolZnalazlem=True
     MsgBox "Strona " & objResult(i).innerText & vbCr & "Adres " &  objResult(i).getElementsByTagName("a")(0).href & vbCr & "jest na pozycji " & j*10 + intPozycja
     Exit for
    End If
  End if
  Next
 End If
 Set objResult = Nothing
End Function

'GLOWNA CZESC PROGRAMU
For j=0 to WScript.Arguments.Item(1)-1
Szukaj

Next
MsgBox "Skonczylem"
objIE.Quit

Trochę opisu aby wiadomo było co się tam dzieje


objIE.Visible = true
objIE.Navigate Adres(j*10)
Do Until objIE.ReadyState = 4
 WScript.Sleep 500
Loop

Otwiera kolejną stronę wyszukania. Zmieniając parametr objIE.Visible na False nie będzie pojawiało się okno IE.

W poniższym fragmencie ustawiamy jakiej domeny/adresu szukamy. Wyrażenie regularne sprawdzi nam później czy taka domena znajduje się w wynikach


Dim RegExp : Set RegExp=CreateObject("VBScript.RegExp")
 RegExp.Pattern="www.exmaple.com"

Teraz najważniejszy fragment kodu, parser wyników wyszukiwarki. Zrobiony na około ale najważniejsze, że działa.

'WYBRANIE WYNIKOW PO TAGU <H3>
objResult = objIE.document.getElementsByTagName("h3")
intPozycja=0
For i=0 to objResult.length-1
'SZUKANIE W WYNIKACH
 IF (objResult(i).getAttribute("class")="r") then
 intPozycja=intPozycja+1
 If RegExp.Test(objResult(i).innerHTML) Then
  boolZnalazlem=True
  MsgBox "Strona " & objResult(i).innerText & vbCr & "Adres " &  objResult(i).getElementsByTagName("a")(0).href & vbCr & "jest na pozycji " & j*10 + intPozycja
  Exit for
 End If
End if
Next

Wybieram elemenety strony po tagu H3, tak  tagowane są wyniki jakie wypluwa Google. Następnie dla każdego z tych wyników sprawdzam jego klasę. Aby pominąć wyniki z adword, obrazków, map i tym podobnych klasa powinna być ustawiona na „r„. Jeżeli w tak wybranym elemencie znajduje się szukany tekst (w tym przypadku http://www.example.com) skrypt informuje nas o tym wypisując odpowiednią formułkę: „Strona <nazwa strony> Adres:  <adres> jest na pozycji <pozycja>” Ustawiana jest zmienna boolZnalazlem i skrypt przestaje dalej szukać.

Jak wspomniałem jest to wczesna wersja tego skryptu obecnie jest troszkę poprawiona i zawiera kilka nowych funkcji. Jeżeli ktoś zacząłby go używać i poprawił proszę o informacje czy mój skrypt okazał się pomocny. Programistycznie na pewno nie jest to arcydzieło np powinienem raczej użyć obiektu MSXML2.ServerXMLHTTP.6.0 zamiast InternetExplorer.Application ale nijak nie mogłem zmusić funkcji szukającej do pracy z drzewem DOM tak stworzonego dokumentu. Wszyscy profesjonalni programiści śmiało mogą wytykać błędy.

 

Pozdrawiam

Advertisements

Informacje Radom
Informatyka jest tak samo nauką o komputerach jak astronomia jest nauką o teleskopach.

One Response to Skrypt sprawdzający pozycję w wyszukiwarce. SERP checking script

  1. Pingback: Javascript i wysyłanie POST „w locie” | Radom blog

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: