Googleでは、実際には「人間」の対話なしで検索結果のprohibit scrapingを返します(5.3、およびhereを参照)。私はそうすることを主張していません。彼らが言いたいのは、これをやる人が多すぎると問題が発生する可能性があるということです(いくつの検索語を探しますか?)。
これがあったとしたら、html結果を使用して、以下のように検索結果を繰り返して結果を繰り返し処理するAPIを使用できます。私は
:
http://www.googlerankings.com/
(私はこのウェブサイトと提携しない方法で、これは一例でいます(注)。)それとも、あなたはこれを行うために利用できるサービスの一部を試みることができますこれもサービスとして提供するSEO企業がたくさんあることは確かです。スクラップに入る前にこれらのオプションを調べることをおすすめします。
私は先に進み、Googleの検索結果から基本情報を引き出すクイックCSクラスを投げました。このクラスでは、前述のHTML Agility Packを使用しています。このツールは、XPathを使用してページ内で探しているものを見つけることを可能にするWebページを反復処理するためにMicrosoftが作成した非常に素晴らしいツールです。この場合、 "// span // cite"はあなたにURLを与えるので、この例ではURLを使用しています。使用するには
、次の手順を実行します。
GoogleRankScrape.Do(
"google scraping",
"C:\\rankings\\",
"//span//cite",
new string[] {"stackoverflow.com","wikipedia.org","okeydoke.org"},
100
);
これは、CSコンソールアプリに包まれ、その後、コンソールアプリケーションを実行するために、Windowsのスケジューラを使用することができます。これには他にも多くの方法があります。これは一例にすぎません。
GoogleRankScrapeコードは以下の通りです:あなたは*のために1つのWebページ「ランク」を参照してください*(シングル)、「ランキング」というようなものはありません。うまく
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();
}
}
、一つのことがありますgoogle SERPのクエリは、他の人が同じクエリのSERPで見ていることについてはあまり言及していません。ランキングは、人から人へ、コンピュータからコンピュータ、データセンターからデータセンター、場所から、そしてわからない他の要因からも異なります。スクラップされたランキングとウェブページのパフォーマンスを相関させることは、あなたのウィンドウの外に見えるものに基づいて地球温暖化について話すようなものです。 –
それを受け入れますが、何かを測定することは何も測定しないことよりも優れており、監視する傾向があります。 – hawbsl
ここでは3つの解決策が回答されています:: http://stackoverflow.com/questions/22657548/is-it-ok-to-scrape-data-from-google-results/22703153#22703153 それを非常に簡単に行うために。 – John