Produire un script de frapper Google une fois par jour et connectez-vous notre position de SERP?

StackOverflow https://stackoverflow.com/questions/4689671

  •  11-10-2019
  •  | 
  •  

Question

Il est apparu au sein de notre organisation à surveiller (sur une base quotidienne) où notre site apparaît (à la fois organique et PPC) sur la page 1 de Google. Aussi lorsqu'un concurrent clé apparaît. Pour certains mots clés.

À court terme immédiatement un collègue fait cela en appuyant sur Google manuellement et griffonner les résultats. Yep.

Il se produit à nous, nous pouvons écrire un script (par exemple en utilisant C #) pour le faire.

Je sais Analytics nous dire énormément, mais il ne note pas la position du concurrent, plus je ne pense pas qu'il a d'autres données que nous voulons.

La question est, est-il un outil de base existant qui fait cela (gratuitement, je suppose)? Et si nous écrivons nous-mêmes, où commencer et sont là des pièges évidents à éviter (par exemple Google peut détecter et bloquer les requêtes automatisées?)

Edit: Pour ces réponses suggérant en utilisant l'API Google - ce post sur le Google Groupes semblerait exclure complètement que:

  
      
  1. L'API de recherche personnalisée vous oblige à mettre en place un moteur de recherche personnalisé (CSE)   qui doit être mis à la recherche particulière   des sites plutôt que l'ensemble du Web.

  2.   
  3. La recherche personnalisée API TOS vous interdire explicitement la prise   requêtes automatisées, ce qui serait la clé   à « régulièrement et avec précision »   la mesure de la SERP d'un site.

  4.   
     

Jeremy R. Geerdes

Était-ce utile?

La solution

Google ne fait grattage de interdisent leurs résultats de recherche sans interaction "humaine" (voir 5.3, et ). Je ne suis pas Préconisez-vous le faire. Le souci est que leur état d'avoir trop de gens qui font cela pourrait causer des problèmes (nombre de termes de recherche chercheriez-vous?), Ainsi que peut-être jouer avec le classement eux-mêmes.

Cela dit, vous pouvez éventuellement utiliser l'API pour faire un résultat de recherche et itérer à travers les résultats que j'ai ci-dessous, en utilisant le résultat html. Ou, vous pouvez essayer quelques-uns des services disponibles pour vous aider à faire ceci:

http://www.googlerankings.com/

(Note:. Je suis en aucun cas affilié à ce site, il est seulement un exemple)

Je suis sûr qu'il ya beaucoup d'entreprises SEO qui fournirait également cela comme un service. Je recommande d'explorer ces options avant d'entrer dans le grattage.

je suis allé de l'avant et a jeté ensemble une classe CS rapide qui rassemblerait les informations de base d'un résultat de recherche Google. Cette classe utilise le HTML Agility pack mentionné, un outil très astucieux Microsoft créé pour itérer sur les pages Web qui vous permet d'utiliser XPath pour trouver ce que vous cherchez dans la page. Dans ce cas, « // // durée cite » vous donne l'URL, de sorte que cet exemple utilise que.

Pour utiliser, procédez comme suit:

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

Cela pourrait être enveloppé dans une application console CS puis utilisez le planificateur Windows pour exécuter l'application de la console. Il y a beaucoup d'autres façons que cela pourrait aller; c'est seulement un exemple.

Le code GoogleRankScrape suit:

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

}

Autres conseils

Vous pourriez développer un programme simple, C # en utilisant Html Agility pack . Il est une très bonne bibliothèque open source pour manipuler HTML, et il est très facile à utiliser.

En ce qui concerne les requêtes automatisées de blocage google, si vous n'allez vérifier une fois par jour et il n'y a pas beaucoup de mots-clés pour vérifier, je ne pense pas que vous avez un problème.

Peut-être un coup d'oeil dans l'API de recherche Google pourrait vous donner un indice sur la façon de recherches d'accès directement?

Je n'ai pas essayé moi-même, mais il pourrait aussi être une solution .. voir recherche API .

Avez-vous envisagé en utilisant les statistiques de Google Webmaster Tools ?

Ils fournissent des rapports détaillés sur vos sites de classement pour les expressions de recherche données parmi d'autres fonctions utiles.

Il est vrai que ces rapports ne fournissent pas votre position de concurrents si vous utilisez l'API Google Search serait la meilleure façon d'obtenir toutes les données dont vous avez besoin.

Si vous avez un Mac, vous pouvez utiliser faux. Il est incroyable.
http://fakeapp.com/

Si vous avez seulement les fenêtres alors je l'écrire moi-même. La meilleure façon de le faire serait d'écrire jQuery pour arracher ce que vous voulez. Il ne faudrait pas 30 minutes pour le faire en utilisant jQuery. Vous pouvez exécuter une tâche planifiée contre votre page et vous aurez la solution que vous vouliez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top