2011-01-14 7 views
2

In unserer Organisation besteht die Notwendigkeit, täglich (auf der Seite 1 von Google) zu prüfen, wo unsere Website (sowohl organische als auch PPC) erscheint. Auch dort, wo ein wichtiger Konkurrent auftritt. Für bestimmte Schlüsselwörter.Produzieren Sie ein Skript, um Google einmal am Tag zu treffen und unsere SERP-Position zu protokollieren?

Kurzfristig tut dies ein Kollege, indem er Google manuell schlägt und die Ergebnisse notiert. Ja.

Es kommt uns vor, dass wir ein Skript (z. B. mit C#) schreiben können, um dies zu tun.

Ich weiß, Analytics wird uns eine Menge erzählen, aber es merkt nicht die Position des Konkurrenten, und ich glaube nicht, dass es andere Daten haben, die wir wollen.

Frage ist, gibt es ein vorhandenes Basiswerkzeug, das dies tut (kostenlos, denke ich)? Und wenn wir es selbst schreiben, wo ich anfangen soll und gibt es offensichtliche Fehler zu vermeiden

Edit: Um diese Antworten mit der Google API darauf hindeutet - Beitrag über (zum Beispiel kann Google erkennen und zu blockieren automatisierte Anfragen?) auf Google Groups scheint, dass völlig auszuschließen:

  1. die Custom Search API erfordert, dass Sie eine benutzerdefinierte Suchmaschine (CSE) einzurichten, die eingestellt werden müssen Websites, anstatt die gesamte Bahn insbesondere zur Suche .

  2. Das verbieten Sie Custom Search API TOS hiermit ausdrücklich von automatisierte Abfragen machen, die Schlüssel wäre „regelmäßig und genau“ die SERP einer Website zu messen.

Jeremy R. Geerdes

+0

gut, ist es eine Sache: es als (einzige) „Ranking“, die Tatsache nicht so etwas ist, dass Sie * * eine Webseite „Rang“ sehen für Eine Abfrage in einem Google SERP sagt nicht viel über die Tatsache aus, was jemand anderes in der SERP derselben Abfrage sieht. Die Rankings unterscheiden sich von Mensch zu Mensch, von Computer zu Computer, von Rechenzentrum zu Rechenzentrum, von Ort zu Ort und von anderen Faktoren, die wir nicht einmal kennen. Wenn man die verschrottete Ranking- und Webseiten-Performance vergleicht, ist das wie eine Diskussion über die globale Erwärmung, basierend auf dem, was man außerhalb des Fensters sieht. –

+0

akzeptieren, dass, aber etwas zu messen ist besser als nichts zu messen und gibt uns einen Trend zu überwachen. – hawbsl

+0

3 verschiedene Lösungen werden hier beantwortet :: http://stackoverflow.com/questions/22657548/is-it-ok-to-scrape-dato-from-google-results/22703153#22703153 Es gibt viele Möglichkeiten um das ganz einfach zu erledigen. – John

Antwort

1

Google tatsächlich prohibit scraping ihrer Suchergebnisse ohne "menschliche" Interaktion (siehe 5.3 und here). Ich befürworte das nicht. Die Sorge, die sie angeben, ist, dass zu viele Leute Probleme verursachen könnten (nach wie vielen Suchbegriffen würden Sie suchen?), Sowie möglicherweise die Ranglisten selbst spielen.

Having said that, könnten Sie möglicherweise die API verwenden, um ein Suchergebnis und durchlaufen die Ergebnisse wie ich unten, mit dem HTML-Ergebnis. Oder Sie könnten einige der Dienste, versuchen zu helfen, dies zu tun:

http://www.googlerankings.com/

(. Hinweis: Ich bin in keiner Weise mit dieser Website verbundenen, es ist nur ein Beispiel)

I bin sicher, es gibt viele SEO-Unternehmen, die dies auch als Service bieten würde. Ich würde empfehlen, diese Optionen zu erkunden, bevor Sie in Kratzen gehen.

Ich ging voran und warf eine schnelle CS-Klasse zusammen, die grundlegende Informationen aus einem Google-Suchergebnis abrufen würde. Diese Klasse verwendet das erwähnte HTML Agility Pack, ein hübsches raffiniertes Tool, das Microsoft für das Iterieren von Webseiten entwickelt hat und das es Ihnen ermöglicht, mit XPath nach dem zu suchen, was Sie auf der Seite suchen. In diesem Fall gibt "// span // cite" die URL, also verwendet dieses Beispiel diese URL.

nutzen zu können, gehen Sie wie folgt vor:

GoogleRankScrape.Do(
    "google scraping", 
    "C:\\rankings\\", 
    "//span//cite", 
    new string[] {"stackoverflow.com","wikipedia.org","okeydoke.org"}, 
    100 
); 

Diese in eine CS-Konsole app gewickelt werden könnte und dann die Windows-Scheduler verwenden, um die Konsolenanwendung auszuführen. Es gibt viele andere Möglichkeiten, wie dies gehen könnte; Dies ist nur ein Beispiel.

Der GoogleRankScrape Code folgt:

using System; 
using System.IO; 
using System.Text; 
using HtmlAgilityPack; 

class GoogleRankScrape 
{ 
    public static void Do(string query, string dest, string path, string[] matches, int depth) 
    { 
     Directory.SetCurrentDirectory(@dest); 

     string url = "http://www.google.com/search?q=" + query + "&num=" + depth; 

     string rp = "rankings.txt"; 

     DateTime dt = DateTime.Now; 

     string dtf = String.Format("{0:u}", dt); 
     string dtfr = String.Format("{0:f}", dt); 
     dtf = dtf.Replace("-", ""); 
     dtf = dtf.Replace(" ", ""); 
     dtf = dtf.Replace(":", ""); 

     string wp = "page" + dtf + ".html"; 
     string op = "output" + dtf + ".txt"; 

     FileInfo r = new FileInfo(rp); 
     if (!File.Exists("rankings.txt")) 
     { 
      StreamWriter rsw = r.CreateText(); 
      rsw.Close(); 
     } 

     StreamWriter rs = new StreamWriter(r.Name, true); 

     rs.WriteLine("Date: " + dtfr); 
     rs.WriteLine("Date: " + dtf); 
     rs.WriteLine("Depth: " + depth); 
     rs.WriteLine("Query: " + query); 

     HtmlWeb hw = new HtmlWeb(); 
     HtmlDocument d = hw.Load(url); 
     d.Save(wp); 

     FileInfo o = new FileInfo(op); 
     StreamWriter os = o.CreateText(); 

     HtmlDocument HD = new HtmlDocument(); 
     HD.Load(wp); 

     string check = ""; 
     string checkblock = ""; 

     var SpanCite = HD.DocumentNode.SelectNodes(path); 
     if (SpanCite != null) 
     { 
      int rank = 1; 
      foreach (HtmlNode HN in SpanCite) 
      { 
       String line = ""; 
       if (HN.InnerText.ToString().IndexOf("/") > 0) 
       { 
        line = HN.InnerText.ToString().Substring(0, HN.InnerText.ToString().IndexOf("/")); 
       } 
       else if (HN.InnerText.ToString().IndexOf(" ") > 0) 
       { 
        line = HN.InnerText.ToString().Substring(0, HN.InnerText.ToString().IndexOf(" ")); 
       } 
       else 
       { 
        line = HN.InnerText.ToString(); 
       } 
       os.WriteLine(line); 
       os.WriteLine(rs.NewLine); 

       for (int i = 0; i < matches.Length; i++) 
       { 
        checkblock = "[" + matches[i] + "]"; 
        if (line.Contains(matches[i]) && !check.Contains(matches[i])) 
        { 
         rs.WriteLine("Rank: " + rank.ToString() + ", " + matches[i]); 
         check += checkblock; 
        } 
       } 

       rank++; 
      } 

      for (int i = 0; i < matches.Length; i++) 
      { 
       checkblock = "[" + matches[i] + "]"; 
       if (!check.Contains(matches[i])) 
       { 
        rs.WriteLine("Rank: not ranked" + ", " + matches[i]); 
       } 
      } 
     } 

     os.Close(); 

     rs.WriteLine("=========="); 
     rs.Close(); 
    } 

} 
2

Sie könnten ein einfaches C# -Programm mit Html Agility Pack entwickeln. Es ist eine sehr gute Open-Source-Bibliothek, um HTML zu manipulieren, und es ist sehr einfach zu benutzen.

In Bezug auf automatische Google Blocking-Anfragen, wenn Sie nur einmal pro Tag überprüfen und es gibt nicht viele Keywords zu überprüfen, ich glaube nicht, dass Sie ein Problem haben.

2

Vielleicht gibt Ihnen ein Blick in die Google-Such-API einen Hinweis, wie Sie direkt auf Suchen zugreifen können?

Ich habe es selbst nicht versucht, aber es könnte auch eine Lösung sein .. siehe search API.

+0

+1 Der bevorzugte Ansatz anstelle von screenscraping die Ergebnisseite. – Filburt

+0

hast du es versucht? siehe meine Bearbeitung - völlig ausgeschlossen, es sei denn, das Zitat ist völlig falsch – hawbsl

2

Haben Sie darüber nachgedacht, die Statistiken von Google Webmaster Tools zu verwenden?

Sie bieten detaillierte Berichte über Ihre Websites Ranking für bestimmte Suchbegriffe neben anderen nützlichen Funktionen.

Zugegebenermaßen stellen diese Berichte keine Position für Ihre Wettbewerber dar, daher wäre die Verwendung der Google Search API der beste Weg, um alle benötigten Daten zu erhalten.

+0

danke. aber die API - siehe meine Bearbeitung - muss vollständig ausgeschlossen werden, es sei denn, das Zitat ist völlig falsch – hawbsl

0

Wenn Sie einen Mac haben, dann können Sie Fake verwenden. Es ist unglaublich.
http://fakeapp.com/

Wenn Sie nur Windows haben, dann würde ich es selbst schreiben. Der beste Weg, es zu tun wäre, jQuery zu schreiben, um zu schnappen, was Sie wollen. Es würde nicht 30 Minuten dauern, es mit jQuery zu machen. Sie können eine geplante Aufgabe für Ihre Seite ausführen, und Sie haben die gewünschte Lösung.