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();
}
}
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. –
akzeptieren, dass, aber etwas zu messen ist besser als nichts zu messen und gibt uns einen Trend zu überwachen. – hawbsl
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