Мониторинг позиций своими руками

  • Tutorial

Делаем мониторинг позиций запросов в поисковой системе, начало.


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

Наш инструмент будет состоять из 2-х частей:
  • скрипт для парсинга поисковой выдачи, с помощью Curl и lxml
  • веб-интерфейс для управления и отображения, на Django


Узнаем у yandex.ru нашу позицию по запросу.


Хочу сразу уточнить, в данной статье будет описаны самые азы и сделаем самый простой вариант, который в дальнейшем будем усовершенствовать.

Для начала сделаем функцию которая по урлу возвращает html.

Загружать страницу будем c помощью pycurl.
import pycurl    
c = pycurl.Curl()

Установим url который будем загружать
url = 'ya.ru'
c.setopt(pycurl.URL, url)

Для возврата тела страницы curl использует callback функцию, которой передает строку с html.
Воспользуемся строковым буфером StringIO, на вход у него есть функция write(), а забирать все содержимое из него мы сможем через getvalue()
from StringIO import StringIO

c.bodyio = StringIO()
c.setopt(pycurl.WRITEFUNCTION, c.bodyio.write)
c.get_body = c.bodyio.getvalue

На всякий случай сделаем наш curl похожим на броузер, пропишем таймауты, юзерагента, заголовки и т.д.
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.CONNECTTIMEOUT, 60)
c.setopt(pycurl.TIMEOUT, 120)
c.setopt(pycurl.NOSIGNAL, 1)
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0')
httpheader = [
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
    'Accept-Charset:utf-8;q=0.7,*;q=0.5',
    'Connection: keep-alive',
    ]
c.setopt(pycurl.HTTPHEADER, httpheader)

Теперь загружаем страницу
c.perform()

Вот и все, страница у нас, мы можем прочитать html страницы
print c.get_body()

Так-же можем прочитать заголовки
print c.getinfo(pycurl.HTTP_CODE)

И если получили получили какой-то отличный от 200 ответ сервера, то сможем его обработать. Сейчас мы просто выкинем исключение, обрабатывать исключения будем в следующих статьях
if c.getinfo(pycurl.HTTP_CODE) != 200:
	raise Exception('HTTP code is %s' % c.getinfo(pycurl.HTTP_CODE))


Обернем все что получилось в функцию, в итоге у нас получилось
import pycurl

try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO

def get_page(url, *args, **kargs):
    c = pycurl.Curl()
    c.setopt(pycurl.URL, url)
    c.bodyio = StringIO()
    c.setopt(pycurl.WRITEFUNCTION, c.bodyio.write)
    c.get_body = c.bodyio.getvalue
    c.headio = StringIO()
    c.setopt(pycurl.HEADERFUNCTION, c.headio.write)
    c.get_head = c.headio.getvalue
    
    c.setopt(pycurl.FOLLOWLOCATION, 1)
    c.setopt(pycurl.MAXREDIRS, 5)
    c.setopt(pycurl.CONNECTTIMEOUT, 60)
    c.setopt(pycurl.TIMEOUT, 120)
    c.setopt(pycurl.NOSIGNAL, 1)
    c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0')
    httpheader = [
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
        'Accept-Charset:utf-8;q=0.7,*;q=0.5',
        'Connection: keep-alive',
        ]
    c.setopt(pycurl.HTTPHEADER, httpheader)
    
    c.perform()
    if c.getinfo(pycurl.HTTP_CODE) != 200:
        raise Exception('HTTP code is %s' % c.getinfo(pycurl.HTTP_CODE))

    return c.get_body()

Проверим функцию
print get_page('ya.ru')


Выберем из страницы поисковой выдачи список сайтов с позициями

Сконструируем поисковый запрос,
на yandex.ru/yandsearch нам нужно послать 3 GET параметра,
'text'-запрос, 'lr'-регион поиска, 'p'-страница выдачи
import urllib
import urlparse

key='кирпич'
region=213
page=1
params = ['http', 'yandex.ru', '/yandsearch', '', '', '']
params[4] = urllib.urlencode({
	'text':key, 
    'lr':region,
    'p':page-1,
})
url = urlparse.urlunparse(params)

Выведем url и проверим в броузере
print url 

Получим через предыдущую функцию страницу с выдачей
html = get_page(url)

Теперь будем ее разбирать по dom модели с помощью lxml
import lxml.html

site_list = []
for h2 in lxml.html.fromstring(html).find_class('b-serp-item__title'):
    b = h2.find_class('b-serp-item__number')
    if len(b):
        num = b[0].text.strip()
        url = h2.find_class('b-serp-item__title-link')[0].attrib['href']
        site = urlparse.urlparse(url).hostname
        site_list.append((num, site, url))

Поподробнее напишу что тут происходит
lxml.html.fromstring(html) — из html строки мы делаем обьект html документа
.find_class('b-serp-item__title') — ищем по документу все теги, которые содержат класс 'b-serp-item__title', получаем список элементов H2 которые содержат интерсующую нас информацию по позициям, и проходим по ним циклом
b = h2.find_class('b-serp-item__number') — ищем внутри найденого тега H2 элемент b, кторый содержит номер позиции сайта, если нашли то дальше собираем позицию b[0].text.strip() сайта и строчку c url сайта
urlparse.urlparse(url).hostname — получаем доменное имя

Проверим получившийся список
print site_list

И соберем все получившееся в функцию
def site_list(key, region=213, page=1):
    params = ['http', 'yandex.ru', '/yandsearch', '', '', '']
    params[4] = urllib.urlencode({
        'text':key, 
        'lr':region,
        'p':page-1,
    })
    url = urlparse.urlunparse(params)
    html = get_page(url)
    site_list = []
    for h2 in lxml.html.fromstring(html).find_class('b-serp-item__title'):
        b = h2.find_class('b-serp-item__number')
        if len(b):
            num = b[0].text.strip()
            url = h2.find_class('b-serp-item__title-link')[0].attrib['href']
            site = urlparse.urlparse(url).hostname
            site_list.append((num, site, url))
    return site_list

Проверим функцию
print site_list('кирпич', 213, 2)


Найдем наш сайт в списке сайтов

Нам потребуется вспомогательная функция, которая отрезает 'www.' в начале сайта
def cut_www(site):
    if site.startswith('www.'):
        site = site[4:]
    return site


Получим список сайтов и сравним с нашим сайтом
site = 'habrahabr.ru'
for pos, s, url in site_list('python', 213, 1):
	if cut_www(s) == site:
		print pos, url

Хм, на первой стрнице выдачи по 'python' хабра нету, попробуем пройти выдачу в цикле в глубину,
но нам нужно поставить ограничение, max_position — до какой позиции мы будем проверять,
заодно и обернем в функцию, а на случай, если ничего не найдется будем возвращать None, None
def site_position(site, key, region=213, max_position=10):
    for page in range(1,int(math.ceil(max_position/10.0))+1):
        site = cut_www(site)
        for pos, s, url in site_list(key, region, page):
            if cut_www(s) == site:
                return pos, url
    return None, None

Проверяем
print site_position('habrahabr.ru', 'python', 213, 100)


Вот собственно мы и получили нашу позицию.

Напишите пожалста, интересна ли данная тема и нужно-ли продолжать?

Про что написать в следующей статье?
— сделать вебинтерфейс к этой функции с табличками и графиками и повесить скрипт на cron
— сделать обработку капчи для этой функции, и вручную и через специальные api
— сделать скрипт мониторинга чего-нить с многопоточностью
— описать работу с директом на примере генерации и заливки обьявлений через api или управления ценами
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 55

    +1
    У нас эта подобная вещь реализована с помощью xml.yandex.ru/. Тот же запрос, только не надо подделываться под браузер, не надо ломать капчи и ответ приходит в удобном XML, из которого проще вытащить позицию нужного сайта по данному запросу. Единственный минус данного подхода — ограничение количества запросов в сутки до 1000, то есть мониторить большое количество запросов и сайтов не получится с одного IP-адреса.
      +1
      Вот только проблема в том что XML выдача частенько отличается от обычной выдачи.
        +1
        Да, есть такой момент. Но в целом, если можно пренебречь парой пунктов, то вполне подходящий вариант. Ну и по нашей статистике, все таки, в большинстве позиции схожи.
        –1
        а также нередкое различие между выдачей реальной и xml.yandex.ru
        а также невозможность сделать региональный поиск/парсинг
          +1
          Региональный возможно передачей соответствующего параметра.
          +1
          Недостатков у xml.yandex.ru много.
          Во первых, нужен статичный IP, а у большинства провайдеров динамические внешние IP.
          Во вторых, ограничения по количеству, 1000 в сутки — это вообще ничто, для того-го формирования вайт-листа под ссылочное нужно под миниллион запросов сделать на средний проект.
          В третьих, для регистрации и получения xml-ки нужно затратить больше усилий и написать больше кода.

            0
            Про первые два пункта с Вами согласен, про третий совсем нет. Зарегистрировать яндекс-аккаунт и подтвердить номер телефона дело 10 минут, и кода для работы через api пишется прилично меньше, чем для эмуляции браузера, разбора html, который к слову может внезапно измениться в отличии от xml, и для распознавания каптч.
              +1
              По третьему пункту я описал исключительно свое мнение.
              Вполне возможно, что кому-то проще с подтверждением заморачиваться, чем 10-20 строк скопипастить.

                0
                Понимаете в чем проблема, html-выдача может внезапно измениться, каптча может внезапно измениться, могут появиться другие способы защиты от роботов, которые Вы не предполагали при написании кода. Т.е. вся система сбора позиций может взять и рухнуть, а Вы в этот момент можете находиться в отпуске, на выходных, спать и так далее. Т.е. все это требует неусыпного контроля. API же предназначен для работы с ним роботами, написав скрипт сбора один раз, его можно повесить в какой-нибудь cron и наслаждаться жизнью. О любых изменениях в правилах выдачи XML Вас предупредят заранее и Вы сможете спокойно внести необходимые изменения, хотя к слову, ни одного такого изменения в XML я не припомню.
                  0
                  Про спать спокойно согласен.

                  Но исключительно для поддержания дискуссию поспорю =)
                  Пару аргументов:
                  1 «Спать спокойно» и «поддержка инструмента» — взаимоисключающие понятия.
                  2 Раз в 3 месяца изменить 2 строчки проще, чем регистрировать 100 IP и покупать 100 симок.
                  3 О любых изменениях верстки меня предупредит письмо от скрипта, а простой в пару дней из-за смены верстки — это нормально.
                    0
                    1. А если инструментов будет 100? Вы вообще спать перестаните?:) Нет, я считаю, что код должен быть написан так, что бы до минимума сократить возможные внеурочные часы работы над ним

                    2. Я немного не пойму, зачем Вам 100 IP? У нас висит порядка 30 сайтов в среднем на каждом по 50 запросов мониторим, с учетом того, что поисковые запросы у некоторых сайтов пересекаются, мы можем узнать позицию сразу нескольких сайтов, делаю всего один запрос к яндексу. Таким образом мы спокойно умещаемся в 1000 положенных запросов к яндексу в день.

                    3. Для нас простой в два дня очень критичен, статистика должна собираться каждый день. От этого зависит сколько клиенты нам заплатят.
                      0
                      Отвечу по пунктам:
                      1. Есть мои инструменты и инструменты на заказ. Все свои инструменты у меня через 1 интерфейс работают, то-есть сколько-бы не было у меня инструментов, все равно они будут спрашивать список сайтов с одного и того-же локального сокета. Для чужих инструментов, чем больше внимания клиенту, тем ему приятнее, если-б яндекс каждый день менял выдачу, я бы только порадовался.

                      2. К сожалению, у меня не получается в 1 IP уложиться. Есть проекты и 10 000 запросов. А при 30 запросах я-бы и руками мог собрать статистику =)

                      3. Статистика обычно нужна только при апах. Но, не зная вашей бизнес-модели, не буду лезть с советами.
                        0
                        1. Внимание клиенту и сбой в работе инструментов это все таки немного разные понятия. Я бы лучше улучшал функционал инструмента за это время, чем подстраивал его под разные выдачи.

                        2. 50 запросов на 30 сайтов… ~1500 позиций отследить руками, ИМХО, не реально каждый день.

                        3. У нас люди платят за конкретные позиции каждый день. Да и если вдруг позиции резко упадут или поднимутся, будет сразу видно и можно будет предпринять необходимые действия.
                          0
                          1. Если что-то описано в ТЗ как нюанс поведения и согласованно с заказчиком, то называть это сбоем в принципе нельзя.
                          Прежде чем выбирать способ анализа какой-то информации, я всегда считаю все за и против, и согласовываю с заказчиком. И всегда выбираю самый удобный и простой под конкретную задачу способ, я-же не враг себе. Если клиент говорит, что ему проще 100 ip и симок купить, так я-же только рад буду. Но обычно все клиенты хотят поменьше сложностей для себя, и пару дней простоя в год для них не критично.

                          2. А веть есть конторы, где до сих пор руками собирают

                          3. Тут не могу вам ничего посоветовать
                            0
                            Ну что могу сказать, есть разные задачи с разными условиями. Для нас важна стабильность работы инструмента, по этому мы выбираем xml. Вам важнее кол-во запросов и Вы можете пренебречь стабильностью, выбираете парсинг html. Каждой задаче — свое решение
                    0
                    К тому-же, я описал всего-лишь один из возможных способов.
                    И я не утверждал что он лучше. =)

                    Для каждого конкретного случая лучше свой конкретный способ. Способ с xml тоже в каком-то случае будет самым лучшим.
                      0
                      Конечно, Ваш способ имеет право на жизнь, это бесспорно. Для каждой задачи должен быть свой инструмент.
            +1
            Увеличение клиентов — это здорово, главное не перестераться, а то клиенты лопаться начнут!
              +1
              Начнете лопаться, присылайте лишних мне.
              0
              А почему бы не использовать готовый белый и пушистый API от яндекса?
              api.yandex.ru/webmaster/features.xml

              Конкурентов мониторите?
                0
                Где возможно, там используем готовое, но к сожалению не везде возможно.
                И конкурентов тоже мониторим.

                  0
                  а есть в api метод который покажет позиции сайта по конкретному региону и по конкретному запросу?
                  +1
                  Пиши еще!
                    0
                    Спасибо
                    +1
                    конечно продолжайте!!!
                      0
                      Спасибо
                      +2
                      Как решили вопрос с куками яши? Или капчу ломаете?

                      Есть _готовый_ сервис, описанный вами, только парсинг выдачи регекспами (каюсь)
                      На джанге. Поддерживает работу с базой проксей и тор.
                      Если интересно, могу его на гитхаб положить, ибо сам его совсем забросил.
                      Даже на домене красивом висит :)
                        0
                        С кукисами по разному решаю, в зависимости от задачи.
                        От простого копирования ручками из броузера в curl, до автоматического, с авторизацией в яндексе и разбора капчи.
                        –1
                        Вместо связки голых pycurl и lxml рекомендую использовать Grab: grablib.org — это по сути и есть связки pycurl и lxml с приятным интерфейсом.
                          0
                          По мне, так удобнее напрямую работать.
                          Лучше разбираться с одной библиотекой, чем сразу с двумя, вашей и основной.

                          У вас, если не ошибаюсь, дополнительного функционала особо и нету, только оболочка над существующим?

                          Но вполне допускаю, что кому-то проще с вашей библиотекой разобраться, чем lxml, и пользоваться только вашей оболочкой.

                          В любом случае, чем больше выбор инструментов, тем лучше =)
                            0
                            Не, чтобы с моей библиотекой разобраться, желательно знать lxml, иначе будут некоторые вещи непонятны. Я вообще придерживаюсь мнения, что фреймворки лучше начинать использовать после освоения вещей, лежащих в их основе.

                            > У вас, если не ошибаюсь, дополнительного функционала особо и нету, только оболочка над существующим?

                            Дополнительного функционала достаточно много, вплоть до работы с антикапча-сервисами.

                            Вы там пишите

                            >Обернем все что получилось в функцию, в итоге у нас получилось

                            Потом вам захочется прикрутить прокси, задавать рефереры и юзерагенты с помощью аргумента, смотреть куки. Вот так и получился Grab :o)
                              0
                              Свой велосипед ближе к телу =)
                            0
                            А мне Граб понравился.
                            Удобный, чего уж там.
                            Но как сажусь писать — тут же беру curl. Оттчего так — неясно.
                            Привык наверное.
                              0
                              Видимо, вам некомфортно от того, что граб делает что-то там сам, а когда вы видите голый curl, то это даёт вам ощущение контроля.
                                0
                                Там, на самом деле много багов. По мере их появления, устраняю. Сейчас ещё на каждый баг тест пишу.
                                  0
                                  Ну скорее всего почти так.
                                  Каждый раз — задача разная, и когда скрипт пишешь фактически под определенный тип запроса — то в curl, уверен на 100%. Осознаешь, что это твои ошибки, а вот когда обертка — то такая уверенность пропадает, и начинаешь дергаться туда-сюда. Был у меня один сервер такой с тройной авторизацией. Еле отловил в firebug все хапросы которые отправлялись не пойми куда(
                                  Но был твердо уверен, что это я не все до конца понял, а не curl виноват.
                                  В итоге пишешь на курле, и в голове откладывается — «Задача решена на curl»
                              0
                              Пользуемся API от яндекса. Метод, описанный Вами, конечно хорош, но правда как обходите капчу? Экстенсивным(за счёт увеличения интервалов парсинга, «рабочей силы», задержек) или интенсивным (китайцы капчу разгадывают, собственный модуль распознавания)?
                                0
                                Самый простой способ — использование множества прокси-серверов.
                                  0
                                  Методов на самом деле множество.
                                  Например, самые очевидные:
                                  — использовать прокси и всяческие анонимайзеры
                                  — обрабатывать капчу
                                  — парсить выдачу с партнеров яндекса
                                  и т.д.
                                    0
                                    Я говорил именно про самый простой способ. Практика показала, что прокси лист из пары сотен серверов позволяет без проблем парсить некоторое количество запросов.

                                    Анонимайзеры неудобны тем, что надо менять логику работы программы (формировать URL анонимайзера, отслеживать ошибки анонимайзеров, анонимайзеры часто глючат или сами находятся в бане у поисковой системы)

                                    Обработка капчи это деньги. Пробовал разгадывать капчу от гугля, после некоторого количества запросов (с разгадыванием появлюящихся капчей) он начинает показывать капчу на каждый запрос :)

                                    Партнёров не пробовал, тоже думаю не всё там гладко может быть, как минимум, точно также могут банить. Вы пробовали партнёров парсить? Какие объёмы парсили?

                                    Парсинг поисковой системы через прокси удобен своей простой и понятной моделью. Работаем напрямую с поисковой системой без посредников. При увеличении объёмов запросов увеличиваем объём прокси серверов.

                                    > и т.д.
                                    Что ещё?
                                      0
                                      Анонимайзеры разные бывают, например с tor и i2p вполне удобно работать.

                                      Капчи в лоб — пустая трата денег. Если нужно долго и много, то нужно умнее делать. Например гугл очень любит, когда ему статистику «пользователя отдают» и зареганному пользователю гораздо реже капчу выпадает. Если на практике, то полезно под каждую проксю сделать и хранить отдельную куку, юзерагента, можно акк зарегать.

                                      Парнеры qip, tut.by, livejournal.ru. Объемы можно любые, но опять-же по умного нужно делать, а не в лоб.

                                      Прокси очень хороший способ, но не единственный.

                                        0
                                        Спасибо, приму к сведению.
                                +1
                                Напишите пожалста, интересна ли данная тема и нужно-ли продолжать?

                                Мне интересно, продолжайте — может нового что узнаем.
                                  0
                                  Могу на какую-то конкретную тему написать
                                  0
                                  Прямо ностальгия взяла, в свое время запускал проект ЯндексТОПология:
                                  image
                                  топик на сёрче
                                  вебархив:
                                  Апдейты Яндекса
                                  Среднестатистическая тряска выдачи Яндекса
                                  Поисковые запросы в Yandex
                                  Что такое «тряска выдачи Яндекса»
                                  Что может сервис
                                  Для кого и зачем

                                  Вы меня прямо побудили к реанимации идеи (особенно возможность освоения нового инструмента) :)
                                  Жалко домен упустил и его перехватили и на парковку поставили домейнеры

                                  Продолжайте «графоманить» дальше, у Вас хорошо получается, все темы в конце топика очень интересны
                                    0
                                    Спасибо.

                                    Продолжу, рад что интересно =)
                                    0
                                    Спасибо.

                                    Продолжу, рад что интересно =)
                                      0
                                      промахнулся
                                      0
                                      То же сделал с помощью xml.yandex.ru, правда на PHP, но все отлично работает. Такая стата имеет смысл, когда исследуешь сезонность спроса например. И вообще анализ.
                                      Для этого был сделан список ключевых слов, по которым выдается позиция сайта, а потом заносится в БД. Советую так же занести в БД следующие параметры:
                                      титл — то что выдает Яндекс, как ссылку на ваш сайт
                                      саму ссылку — на какую страницу сайта ссылается Яндекс
                                      серп — описание ссылки
                                      Ставим проверку по дням, и заносим результаты в БД.
                                      Аналогичную операцию проводим с Гуглом, но там уже нужно парсить сам код странички, хотя ничего сложного.
                                      Зато через пару месяцев, вы уже будете видеть детальную инфу (или выполнить анализ) по следующим параметрам:
                                      1. На каком месте по определенному ключевому слову находится сайт в разных ПС
                                      2. Соответствует ли выдача ПИ ключевому слову. Т.е. не ссылается ли ПИ на другой раздел сайта?
                                      3. Можно придумать еще что-то)
                                      4. Самое главное — это ДИНАМИКА изменений. Очень позновательно сделать анализ, например за год, а есди есть выборка больше — вообще замечательно.
                                      5. Очень полезно использовать тем людям и компаниям, кто следит за продвижением сайта. Видно все, очень наглядно и изменяемо для своих нужд.
                                      6. Никто не мешает так отслеживать сайты конкурентов и смотреть как идут дела у них по, тем же ключевым словам. Очень весомый аргумент в споре с заказчиком/исполнителем/руководством.
                                      7. Вдобавок для анализа конкурента можно прикрутить парсинг LiveInternet примерно вот по такому запросу:
                                      http://counter.yadro.ru/values?site='.$site_url.'
                                      
                                      Тоогда информации для анализа себя, конкурентов, и вашей позиции в выдаче и в посещениях будет достатчно для начального уровня.

                                      Далее все хозяйство либо выгружать в эксель для аналитики, либо писать web-based для построения графиков.
                                        +1
                                        Полностью с вами согласен.

                                        Можно рассматривать ваш пост, как план для написания следующих статей?

                                        В этой статье написал всего-лишь пару функций, маленький кусочек из возможного функционала.
                                          0
                                          Экхм… Признателен конечно, очень, но я на хабре зареген второй день и ни разу не программист-разработчик. Только хобби. Думаю, более опытные товарищи, еще скорректируют путь развития. А так — конечно же рассматривайте, работы в этой области много.
                                            0
                                            Блин) Забыл упомянуть одну из главных фич, до которой руки не добрались.
                                            Когда потом делаешь анализ не всегда ясно отчего «курс акций» пошел вверх или вниз. У меня была идея, когда есть еще интерфейс, по типу дневника, в который заносятся все события, которые относятся к SEO. Они привязываются к дате внесения изменения и потом наносятся на график или просто выгружаются/отображаются.
                                            Таким образом будет легче проконтролировать свои вмешательства в сайт.
                                            НУ как пример — красная пунктирная линия на графике «курса» выдачи в поисковой ситеме. На линии указано к примеру «Произведено то-то и то...» Ну это, так… К примеру о реализации. Но вещь очень полезная получится.
                                          0
                                          Хорошо бы в конце поста выложить ссылку на весь код.
                                            0
                                            Хорошо, сделаю веб-интерфес, выложу все вместе на гитхабе.
                                            0
                                            На предыдущем месте работы, я один делал подобную штуковину, только она полностью автоматически собирала позиции. Это занимало достаточно много времени (в виду количества сайтов, которые надо проверить и упрямости яндекса). И все работало прекрасно, даже отчетики и акты клиентов в пдф рендерились.

                                            Но сейчас в раскрутке вообще смысла крайне мало. Поисковики (яндекс с недавних пор) делают поисковую выдачу более персонализированной. Это значит, что вам на запрос «дерево» выдаст информацию про красно-черные деревья, а садовод получит информацию по саженцам. К тому же, очень давно уже запросы варьируются в зависимости от вашего региона (кстати эту возможность мой скрипт тоже предусматривал :-))

                                            Only users with full accounts can post comments. Log in, please.