Создать сценарий для попадания в Google раз в день и регистрировать нашу позицию в поисковой выдаче? - PullRequest
2 голосов
/ 14 января 2011

В нашей организации возникла необходимость отслеживать (ежедневно), где наш сайт (как обычный, так и PPC) появляется на странице 1 Google.Также там, где появляется ключевой конкурент.Для некоторых ключевых слов.

В ближайшее время коллега делает это, вручную нажимая на Google и записывая результаты.Да.

Нам кажется, что мы можем написать скрипт (например, используя C #) для этого.

Я знаю, что Analytics скажет нам очень много, но не заметит позицию конкурента.Кроме того, я не думаю, что у него есть другие данные, которые мы хотим.

Вопрос в том, существует ли базовый инструмент, который делает это (я думаю, бесплатно)?И если мы напишем это сами, с чего начать и есть ли очевидные ловушки, которых следует избегать (например, может ли Google обнаруживать и блокировать автоматические запросы?)

Редактировать: На те ответы, предлагающие использовать GoogleAPI - эта публикация на Группы Google может полностью исключить это:

  1. API пользовательского поиска требует, чтобы вы настроили систему пользовательского поиска(CSE), который должен быть настроен для поиска на определенных сайтах, а не во всей сети.

  2. Пользовательские Условия API пользовательского поиска явно запрещают вам делать автоматические запросы, которые были бы ключевыми для "регулярно и«точно» измеряя поисковую выдачу сайта.

Джереми Р. Геердес

Ответы [ 5 ]

2 голосов
/ 14 января 2011

Возможно, поиск в API поиска Google может дать вам подсказку о том, как получить прямой доступ к поиску?

Я сам не пробовал, но это также может быть решением.API .

2 голосов
/ 17 января 2011

Рассматривали ли вы использование статистики из Инструментов для веб-мастеров Google ?

Они предоставляют подробные отчеты о рейтинге ваших сайтов по заданным поисковым фразам среди других полезных функций.

По общему признаниюэти отчеты не отражают позицию ваших конкурентов, поэтому использование Google Search API было бы лучшим способом получить все необходимые данные.

2 голосов
/ 14 января 2011

Вы можете разработать простую программу на C #, используя Html Agility Pack . Это очень хорошая библиотека с открытым исходным кодом для манипулирования HTML, и она очень проста в использовании.

Что касается автоматических запросов на блокировку Google, если вы собираетесь проверять только один раз в день, а проверять не так много ключевых слов, я не думаю, что у вас есть какие-либо проблемы.

1 голос
/ 17 января 2011

Google фактически запрещает очищать своих результатов поиска без "человеческого" взаимодействия (см. 5.3, и здесь ). Я не защищаю тебя. Они утверждают, что из-за того, что слишком много людей занимаются этим, могут возникнуть проблемы (сколько поисковых терминов вы бы искали?), А также, возможно, игровые рейтинги сами.

Сказав это, вы, возможно, могли бы использовать API, чтобы сделать результат поиска и перебрать результаты, как я указал ниже, используя результат html. Или вы можете воспользоваться некоторыми услугами, которые помогут вам сделать это:

http://www.googlerankings.com/

(Примечание: я никоим образом не связан с этим сайтом, это только пример.)

Я уверен, что есть много SEO-компаний, которые также предоставляют эту услугу. Я бы порекомендовал изучить эти варианты, прежде чем приступить к поиску.

Я собрал быстрый класс CS, который извлек бы основную информацию из результатов поиска Google. В этом классе используется упомянутый HTML Agility Pack, довольно изящный инструмент, созданный Microsoft для итерации по веб-страницам, который позволяет использовать XPath для поиска того, что вы ищете на странице. В этом случае "// span // cite" дает вам URL, поэтому в этом примере используется.

Чтобы использовать, сделайте следующее:

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

Это можно поместить в консольное приложение CS, а затем использовать планировщик Windows для запуска консольного приложения. Есть много других способов, которыми это могло бы пойти; это только пример.

Код GoogleRankScrape следующий:

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

}
0 голосов
/ 17 января 2011

Если у вас есть Mac, вы можете использовать Fake. Это невероятно.
http://fakeapp.com/

Если бы у вас были только окна, я бы написал это сам. Лучший способ сделать это - написать jQuery, чтобы получить то, что вы хотите. Это не займет 30 минут, чтобы сделать это с помощью jQuery. Вы можете запустить запланированное задание на своей странице, и у вас будет решение, которое вы хотели.

...