Мониторинг позиций своими руками / Habr
Делаем мониторинг позиций запросов в поисковой системе, начало.
Обычно мы заинтересованны в увеличении клиентов.
А что-бы увеличить что-то, нужно это сначало оценить.
А так уж исторически сложилось, что часть клиентов на интернет-магазины приходит с поисковых систем.
( Про работу с контекстной рекламой и прайс-агрегаторами напишу в следующих статьях, если кому будет интересно. )
А для оценики своего состояния в поисковиках, обычно нужно собрать с них статистику по положению запросов в выдаче.
Наш инструмент будет состоять из 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.
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 h3 in lxml.html.fromstring(html).find_class('b-serp-item__title'):
b = h3.find_class('b-serp-item__number')
if len(b):
num = b[0].text.strip()
url = h3.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’, получаем список элементов h3 которые содержат интерсующую нас информацию по позициям, и проходим по ним циклом
b = h3.find_class(‘b-serp-item__number’) — ищем внутри найденого тега h3 элемент b, кторый содержит номер позиции сайта, если нашли то дальше собираем позицию b[0].text.strip() сайта и строчку c url сайта
Проверим получившийся список
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 h3 in lxml.html.fromstring(html).find_class('b-serp-item__title'): b = h3.find_class('b-serp-item__number') if len(b): num = b[0].text.strip() url = h3.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 или управления ценами
«Как узнать на какой странице поиска находится мой сайт в Яндексе?» – Яндекс.Знатоки
Прежде всего рекомендую вам ознакомиться со списком сервисов мониторинга позиций вот здесь https://otzyvmarketing.ru/best/monitoring-pozicij/. Тут вы найдете полный перечень всего необходимого, что делает обычного SEO-специалиста крутым профессионалом.
С помощью сервисов можно определять позиции своего сайта в поиске, в том числе в Google, «Яндекс», mail и bing. Можно даже определить позиции видеороликов на юутубе!
Жизнь SEO-специалиста еще никогда не была такой легкой!
В целом узнать позиции страницы в поиске легко. Это можно сделать с помощью сервиса «Яндекс» «Вебмастер». Это набор инструментов, который позволяет вам полностью контролировать развитие вашего сайта. Помните, что доступ в «Вебмастер» можно получить только после того, как вы подтвердите права на ваш сайт. Я, например, люблю для подтверждения прав добавлять в head тег «Вебмастера» с кодом. Мне кажется, что это наиболее простое решение. Есть и другие варианты.
Если вы подтвердили свои права на сайт, можно продолжать. В «Вебмастере» есть вкладка, на которой будут отображаться позиции вашей страницы в поиске. Она так и будет называться «Страницы в поиске». Если же там вашей страницы нет – ее нужно добавить. Имейте ввиду, если страница давно уже индексируется, то она должна быть в поиске (если это не дубль и ее не исключили).
В целом пользоваться «Вебмастером» удобно только в том случае, если вы ведете только один сайт и в целом не занимаетесь оптимизацией сайта постоянно.
Для более продвинутых специалистов, которые ведут одновременно несколько сайтов, больше подойдут другие сервисы рунета.
Например, по ссылке выше я нашла сервис Seolib. Он позволяет сильно упростить деятельность SEO-ников. Позиции страниц проверяются на автомате, анализируются ссылки, генерируется карта сайта. Программа позволяет анализировать топ выдачи.
Учтите, что все сервисы из списка будут требовать определенной платы. Ведь это только «Яндекс» может себе позволить бесплатно предоставлять сервис «Вебмастер». «Яндекс» зарабатывает основные деньги на рекламе и других своих сервисах.
Не могу даже мечтать, что данный ответ смог полностью ответить на ваш вопрос! Но я действительно старалась изложить в ответе главное. Возможно, я что-то и забыла, ведь формат не дает мне дать исчерпывающий ответ. В любом случае, желаю вам всего лучшего! Если вы со мной не согласны и хотите высказать свою точку зрения, оставляйте комменты под ответом!
yandex.ru
Сервис определения позиций в поисковых системах
Зачастую у малых и больших компаний существует проблема определения позиций в поисковых системах.
Наш сервис решает такую проблему!
Возможности сервиса по своему основному предназначению — определению позиций слов в поисковиках:
- Определение позиций в Яндексе, Рамблере, Гугле, Яху, Яндексе.УА, Гугле.УА с разной глубиной (первые 50/…/1000!). Для сеошников: Яндекс xml не используется. Парсится обычная выдача. Можно отслеживать более 50 тысяч запросов в сутки!!
Проверка позиций в Yandex, Rambler, Google, Yahoo
- Возможность группировки списка сайтов по различным настраиваемым логическим Статусам (свои/клиентские/завершенные/действующие/отложенные/…)
Настройка статусов проектов для проверки позиций в поисковиках - В разработке есть возможности по каждому проекту вывести данные по любому поисковику или по всем сразу.
Вывод данных по нужным поисковикам в нужные периоды (с ручной проверкой при щелчке на буковку поисковика у слова).
- Возможность просмотреть выборку данных по проекту за определенное время (неделя, месяц, сегодняшние, за выбранный с помощью селектов
- Разбивка запросов на блоки (с указанием у каждого блока продвигаемой страницы). Разумеется, возможность удаления/добавления запросов к каждому сайту также присутствует.
Разбивка запросов на логические блоки. Доступна сортировка групп и запросов в группе.
- Поисковики и глубина поиска по каждому поисковику настраивается под каждый проект.
Подключение к проекту поисковиков и настройка глубины проверки позиций
++++
Возможности сервиса по работе с клиентами-с-одним-проектом, клиентами-с-несколькими-проектами и менеджерами:
++++
Другие возможности сервиса по своему основному предназначению — удобство работы с Сервисом:
- Проработанное юзабилити админки как отдельного проекта, так и менеджерского аккаунта.
- Проработанное юзабилити админки. На главной странице основной админки можно видеть сколько за текущий день запросов по Яндексу в топ3/5/10 (и общее кол-во запросов), какой % слов находится в десятке за сегодня и сравнить с % слов за указанное число дней ранее (например, сегодняшние результаты с позавчерашними). Удобно смотреть при большом кол-ве проектов был ли апдейт без захода в соответствующую тему на форуме
Просмотр наличия апа: а был ли апдейт?
- Скрипт запускается Кроном каждые 5-10 минут. Если позиции были сегодня проверены, проверка не производится. Однако, при добавлении сайта в админку позиции проверяются в течение нескольких минут.
- В связи с тем, что апдейты Яндекса иногда имеют свойство идти до 8-10 утра предусмотрена опция проверки начала времени определения позиций — если вы установили проверять после 11, то до 11 проверка запущена не будет.
- Отчет создается в Вашем фирменном бланке в rtf-файле (MS Word, для Windows 98 и выше)! В отчет можно включать любой период. Отчет о продвижении создается при запросе администратора/менеджера и даже самого клиента. При создании отчета есть возможность включать те или иные необходимые значения. Создание отчета в MS Word за выбранный период с выбором данных для включения в отчет
Пример автоматически создаваемого отчета можно скачать здесь: ПРИМЕР ОТЧЕТА!
- Возможность настройки каждого проекта определять по нему позиции или нет (например, если будет сайт в логической группе Закрытые, — ведь глупо тратить время на проверку позиций по проекту, но историю проверок нужно хранить).
- При парсинге система использует эмуляцию действий пользователя: временные ожидания (два вида, можно изменять на свой вкус) и curl (библиотека, подменяющая данные робота-парсера на данные, отдаваемые браузером человека).
- Легко внедряется в дизайн Вашего сайта.
- Бесплатная поддержка в течение 1 года в случае изменения поисковыми системами своих дизайнов, настройка и доработка проекта под Ваши нужды.
++++
Дополнительно разработанные и внедренные в скрипт определения и проверки позици инструменты-бонусы:
- Простукивалка — это проверка пинга сайта. Сервис определения позиций каждые полчаса-час (в зависимости от настроек) проверяет доступность сайта (если это включено в настройках соответствующего проекта), и если сайт не доступен — меняет статус сайта в интерфейсе и высылает письмо админу, а также на все указанные у проекта ящики.
Проверка доступности продвигаемых сайтов.
- Автоматический сбор статистики переходов по продвигаемым словам на сайт из liveinternet.ru! Переходы по словоформам также учитываются. Сервис определения позиций в поисковиках ежедневно вытаскивает из ливинтернет данные по всем сайтам (сегодня — собирается статистика за вчерашний день), включая статистику из аккаунтов с ПАРОЛЕМ!
Сбор переходов из liveinternet.ru позволяет отследить экономическую эффективность продвижения слов (если например за месяц по продвигаемому слову на третьем месяце было два перехода, то имеет смысл задуматься на сколько его целесообразно продвигать). На скрине цифра по цифру столбцов — кол-во переходов в сутки по слову, цифра в зеленом индексе — позиция слова в соответствующий день.
- Автоматический ежедневный сбор пузомерок: проверка тИЦ Яндекса и Google PR, определение количества страниц сайта в Яндексе и Гугле, а также проверка количества ссылок (бэков) в Яху. По нажатию на столбцы происходит ручная проверка текущего значения каждого из нижеприведенных значений.
- Проверка тИЦ Яндекса и Google PR, определение количества страниц сайта в Яндексе и Гугле могут послужить хорошим помощником в объяснении клиенту в случае роста тИЦа/количества ссылок в поисковиках, что работа над сайтом ведется.
Для проверки большого количества слов (ориентировочно более 20-30 тысяч в сутки) желательно, но не обязательно, наличие отдельного сервера.
++++
Преимущества организационного плана перед другими программами и скриптами:
- Представьте, что у Вас есть проект, в котором 100 ключевиков. А если таких проектов 10?
Таким образом, при использовании проекта мы можем смотреть позиции действительно легко — зайти в админку и выбрать нужный. - Также легко определять наличие апдейта и по каким тематикам — необходимо лишь зайти на список сайтов главной страницы.
- Если вы работаете сам-на-себя, — это одно. Если у вас работает над поиском несколько человек, и каждому нужно проверить позиции одинаковых проектов — просто нелепо, на наш взгляд, делать одни и те же действия каждое утро, тогда как данная система позволяет смотреть позиции нескольким людям где бы они не находились.
- При наличии менеджеров, работающих непосредственно с клиентами, его необходимость в позициях под рукой при звонке клиента очень сильно возрастает.
- Экономия времени. Проснувшись утром или придя утром на работу, Вы можете не беспокоиться о проверке позиций. Зайдя в админку, Вы уже получаете готовые позиции.
- Экономия трафика. Так как парсинг идет на стороне Вашего (или нашего) хостинга, Вы не тратите деньги на трафик. Всё, что Вам нужно — это иметь доступ в интернет на 2-3 минуты.
- Уменьшение головной боли при поездках. Уезжая куда-либо на неделю, вам не следует беспокоиться о клиентах — проверкой динамики продвижения или текущего состояния они Вас беспокоить не будут, ведь у них есть их Личные кабинеты для входа в Ваш сервис (с Вашим дизайном).
- Много других преимуществ, которые может каждая организация/оптимизатор определить для себя сам.
Преимущества экономического плана:
- Если над поиском работает, к примеру, 6 человек, то на каждого требуется покупать лицензию того же semonitor. Даже если идет по 2 места в лицензии, то что будет дешевле: брать 3 лицензии семонитора, или взять полную версию системы, — довольно спорный вопрос.
- Если вы работаете подрядчиком у рекламных агентств (как siteprojects.ru, например) или участвуете в тендерах крупных заказчиков, данный инструмент будет являться несомненным дополнительным конкурентным преимуществом. Клиенты любят профессионализм, заботу и хорошее впечатление от встречи (графики, картинки, собственные разработки, конкретные цифры).
- Стоит ли тратить время на создание и отправку внеплановых отчетов, если клиент может каждое утро зайти и самостоятельно всё посмотреть? В данном случае время приравнивается к человекоресурсам.
За приобретением разработки определения позиций Поз или взятия её в аренду (подключение Вашего домена к нашему серверу, с внедрением Вашего дизайна) прошу обращаться ко мне в асю — 240562944 или на почту promo.
-=-
Ниже идет информация исключительно для разработчиков. Если у Вас нет своего разработчика — не проблема! Мы всё вам настроим и будем поддерживать в рабочем состоянии.
На виртуальном хостинге скрипт провисел около полутора лет (мастерхост), но потом был забанен Рамблером. Думаю, сменой сервера или ipшника всё бы решилось.
Сейчас используется три варианта сбора позиций (парсинга поисковых систем): через платные прокси, через модули и через фри-прокси (не развиваем). Работу через прокси и модулей поддерживаем постоянно по всем поисковикам.Модули — это файлы, которые лежат на разных хостингах. Их может быть неограниченное кол-во. Они работают так: подсчитывается кол-во модулей, они разбиваются из расчета 1 поток = 15 модулей. И происходит выборка случайным образом 1 модуля из одного потока. Таким образом даже модульная система идет в несколько потоков. Сейчас чтобы модули запустились, нужно добавление не менее 10 сайтов. Так, у нас предусмотрена работа с поисковиками несколькими методами .
Также формируются ежедневные логи, и если что-то происходит не так — всегда есть возможность посмотреть что же это и почему.
- Если над поиском работает, к примеру, 6 человек, то на каждого требуется покупать лицензию того же semonitor. Даже если идет по 2 места в лицензии, то что будет дешевле: брать 3 лицензии семонитора, или взять полную версию системы, — довольно спорный вопрос.
- Если вы работаете подрядчиком у рекламных агентств (как siteprojects.ru, например) или участвуете в тендерах крупных заказчиков, данный инструмент будет являться несомненным дополнительным конкурентным преимуществом. Клиенты любят профессионализм, заботу и хорошее впечатление от встречи (графики, картинки, собственные разработки, конкретные цифры).
- Стоит ли тратить время на создание и отправку внеплановых отчетов, если клиент может каждое утро зайти и самостоятельно всё посмотреть? В данном случае время приравнивается к человекоресурсам.
www.siteprojects.ru