2011-01-14 11 views
2

Googleのページ1に、私たちのサイトが現れている場所(オーガニックとPPCの両方)を(毎日)監視する必要性が組織内で発生しました。また、主要な競合会社が現れる場所。特定のキーワードについてGoogleに1日に1回ヒットし、SERPの記録を記録するスクリプトを作成しますか?

短期間で、同僚はGoogleを手動で入力して結果を書き留めてこれを実行しています。うん

これを行うには、スクリプトを書くことができます(たとえば、C#を使用して)。

アナリティクスは非常に多くのことを教えてくれるが、競合他社の立場には言及していないし、私たちには他のデータがないと思う。

質問は、これを行う既存の基本的なツールがありますか(無料ですか?)そして、私たちはどこ避けるために落とし穴を開始し、明らかに存在し、それを自分自身を記述した場合(たとえばGoogleが自動化された要求を検出し、ブロックすることができますか?)

編集:GoogleのAPIを使用して示唆それらの答えに - これが終わっ投稿Google Groupsに完全にそれを排除するように見えるでしょう:

  1. カスタム検索APIではなくウェブ全体よりも、特定の サイトを検索するように設定する必要がありますカスタム検索エンジン(CSE) を設定する必要があります。

  2. カスタム検索API TOSは、明示的に サイトのSERPを測定 「を定期的かつ正確」への鍵となり 自動化されたクエリを、作るからあなたを禁止しています。

ジェレミーR. Geerdes

+0

、一つのことがありますgoogle SERPのクエリは、他の人が同じクエリのSERPで見ていることについてはあまり言及していません。ランキングは、人から人へ、コンピュータからコンピュータ、データセンターからデータセンター、場所から、そしてわからない他の要因からも異なります。スクラップされたランキングとウェブページのパフォーマンスを相関させることは、あなたのウィンドウの外に見えるものに基づいて地球温暖化について話すようなものです。 –

+0

それを受け入れますが、何かを測定することは何も測定しないことよりも優れており、監視する傾向があります。 – hawbsl

+0

ここでは3つの解決策が回答されています:: http://stackoverflow.com/questions/22657548/is-it-ok-to-scrape-data-from-google-results/22703153#22703153 それを非常に簡単に行うために。 – John

答えて

1

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(); 
    } 

} 
2

あなたはHtml Agility Packを使用して簡単なC#のプログラムを開発することもできます。 HTMLを操作するための非常に優れたオープンソースライブラリです。使い方はとても簡単です。

Googleの自動化されたリクエストをブロックすることについては、1日に1回だけチェックし、チェックするキーワードがあまりない場合は、問題はないと思います。

2

おそらく、Google検索APIを見れば、検索に直接アクセスする方法のヒントが得られるでしょうか?

私は自分で試していませんが、解決策でもあります。search APIを参照してください。

+0

+1結果ページをスクリーンキャプチャするのではなく、好ましい方法です。 – Filburt

+0

試しましたか?私の編集を参照してください - 全く引用が間違っていない限り、完全に除外されています – hawbsl

2

Google Webmaster Toolsの統計情報を使用することを検討しましたか?

これらは、他の便利な機能の中でも特定の検索フレーズのサイトランキングに関する詳細なレポートを提供します。

これらの報告は、競合他社のポジションを提供していないと思われるため、Google検索APIを使用すると、必要なデータをすべて取得するのに最適な方法です。

+0

ありがとうございます。見積もりがまったく間違っていない限り、私の編集を参照してください - APIは完全に除外されなければなりません – hawbsl

0

Macをお使いの場合は、Fakeを使用できます。それは信じられないです。
http://fakeapp.com/

ウィンドウがある場合は、自分で作成してください。それを行う最善の方法は、あなたが望むものを奪うためにjQueryを書くことです。 jQueryを使って30分かかることはありません。あなたのページに対してスケジュールされたタスクを実行することができますし、あなたが望むソリューションを持っています。

関連する問題