Парсинг выдачи яндекса


Написание парсеров сайтов — мое любимое занятие. Вот решил поделиться своими знаниями и с читателями. Написал за 15 минут простейший парсер поисковой выдачи Яндекса.

Сразу объясняю некоторые моменты:

Дело в том, что для парсинга я буду использовать DOM и xpath, но библиотека libxml не понимает современный способ обозначения кодировки страницы в стиле html5, но кодировку нам указать необходимо, чтобы DOM адекватно «вытащил» русский текст.

Теперь, собственно, немного кода, который и даст нам нужный результат.

Теперь все три куска кода можете положить в один файл и запустить.
Дальше вы сами уже можете и с пейджингом разобраться и придумать как обходить защиту Яндекса.

Для того, чтобы доработать парсер до какого-то внятного вида, вам хорошо бы разобраться с cURL и xpath.


Кроме того, если у Яндекса верстка валидная и нам не нужно ее чистить, то для приведения верстки к адекватному виду перед парсингом других сайтов рекомендую использовать tidy.

Напоминаю — код писал на коленке, для примера. Если есть какие-то вопросы, то прошу в комментарии, я с удовольствием на них отвечу.

Для удобства весь код положил в один файлик.

UPD. 22.11.2013: чтобы за один заход брать больше позиций, то надо немного подправить запрос к яндексу.
Итог:

UPD. 21.01.2013: Яндекс обновил немного верстку, поэтому пришлось подправить пару xpath запросов:
1. Было: $serp_items = $xpath->query(‘//li[@class=»b-serp-item»]’);
Стало: $serp_items = $xpath->query(‘//li[contains(@class, «b-serp-item»)]’);
Будет немного медленней работать из-за использования функции contains.

2. Было: $header_obj = $xpath->query(‘./div/h2’, $item)->item(0);
Стало: $header_obj = $xpath->query(‘./h2’, $item)->item(0);

UPD. 27.08.2014: Выдача яндекса изменилась, изменились и xpath запросы. Тестировать довольно сложно, ибо яндекс капчу выдает практически сразу, так что код несет больше академический интерес, нежели практический смысл. Для адекватной работы надо делать постраничный парсинг, учет капчи и прочие плюшки. Спасибо mari за комментарий.


Код в файле обновил. Если вдруг заметите, что возвращается пустой массив или появляются другие ошибки — напишите коммент, пожалуйста, с указанием тестируемого запроса и вашим регионом в Яндексе, если он отличен от Москвы (213). Так я смогу поддерживать в актуальном состоянии парсер Яндекса и другие читатели смогут использовать рабочий код.

glebov-gin.blogspot.com

Парсинг ключевых слов из выдачи

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

Также, если ваше ключевое слово довольно часто ищут, Яндекс внизу страницы выдачи предложит вам список похожих ключевых слов, а их очень важно учитывать! Еще интересным моментом выступает быстробот, если же сайт попал в топ недавно (справа пишется 4 часа назад), значит на нем «сидит» бот Яндекса, просмотрите этот сайт, и выпишите ключевые его моменты.


Купить прокси для парсинга сейчас

Если вы продвигаете свой сайт по определенному региону или стране, нужно это указать при поиске (выбрать фильтр поиска – справа от строки в самом вверху). Можно сделать небольшую аналогию с парсингом ключевых слов Google, процесс сбора ключевых слов немного отличается, но суть остается та же. И еще стоит напомнить о тех же самых подсказках ключевых слов в Гугл, они очень часто становятся отправной точкой для принятия решений.

Парсер Яндекс Wordstat

Здесь нет ничего сложного, суть данной операции состоит в извлечении нужного количества слов по определенному запросу из огромного количества ключевых слов вордстата. На сегодня существует очень много программ, скриптов и даже виджетов для браузеров, которые будут парсить «яндекс вордстат» в полуавтоматическом режиме. Вам остается только наладить этот процесс и после глазами просмотреть всю полученную информацию, или же снова профильтровать данные по нужным значениям.

Парсер ключевых слов Яндекс Директа

Следующим по популярности сервисом для парсинга выступает «Директ». Если вы хотите составить правильное семантическое ядро, полностью подготовить свою рекламную кампанию в правильном ключе и сделать маркетинговый анализ, то парсинг подсказок с Яндекса и объявлений с Яндекс Директа — вам помогут лучше всего! Для совершения этой операции вам помогут или наши рекомендации по «безобидному» парсингу ключевых фраз, или же ваша уверенность в своих силах и выдержке перед монотонной работой.

Парсинг Яндекс карт

Парсер Яндекс Карт


Основу парсинга Яндекс Карт составляет простая информация, которую владельцы сайтов пишут для общего обозревания.

Сюда можно отнести:

  • Адрес сайта.
  • Адрес физического «представительства».
  • Почта для связи (скорее всего для рабочих целей).
  • Телефоны для поддержки, или ознакомления клиентов.

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

Заключение

Чтобы облегчить себе работу, вы можете приобрести у нас прокси для парсинга Яндекса, включая выдачу Директ, Вордстат или карты. Помните, что при покупке нескольких прокси, нужно учитывать также их региональную принадлежность, чем дальше они находятся от региона вашей работы, тем дольше будет происходить ответ сервера. Замечено, что при парсинге в России используя прокси из Казахстана или России, ответ сервера мизерный, в то время как при использовании США или Канады, ответ отстает на пару миллисекунд (что в некоторых ситуациях очень критично).


proxy-sale.com

Быстрый переход

searchengines.guru

Часто возникает необходимость собрать контакты по ключевым словам. Для этой цели сделан наш парсер выдачи Яндекса по ключевым словам. Он собирает контакты, которые выдает Яндекс прямо в сниппетах результатов поиска. Кроме того, парсер может заходить на сайты, и искать там электронную почту (email). Ключевые слова можно задавать списком, и парсер будет последовательно обходить все заданные ключевые слова по заданным регионам.

Результат работы программы: база email и телефонов, сегментированная по запросам и регионам.

Предлагаемая нами программа-парсер базы емейл и телефонов из Яндекса, позволяет собирать следующую информацию:

  • Запрос (ключевое слово)
  • Регион
  • Ссылка на сайт
  • Домен из ссылки
  • Адрес электронной почты (email) с сайта
  • Адрес компании
  • Код телефона
  • Номер телефона
  • Номер позиции
  • Номер страницы

Программа умеет работать с сервисом автоматического распознавания капчи для разгадки выдаваемых Яндексом картинок. Вам необходимо иметь аккаунт в этом сервисе для пользования парсером. Программа позволяет задать интервал между запросами к сервису, для снижения интенсивности появления капчи. Кроме того, имеется возможность регулировать количество выгружаемых страниц выдачи для каждого ключевого слова.

Программа умеет заходить на сайты, и искать там адреса электронной почты. Вы можете задать лимит страниц, которые будут загружаться на каждом сайте (по умолчанию программа просмотрит 10 страниц). Для того, чтобы страницы контактов с большей вероятностью попали в заданный лимит, и были просканированы, сделан список приоритетных маркеров, которые программа ищет в ссылках. Например, если в ссылке программа найдет слово «контакты», она передвинет ссылку в начало списка найденных ссылок (без этого, ссылка может оказаться на 11м месте, и при лимите в 10 ссылок, она не будет просмотрена). Посмотреть и изменить список приоритетных маркеров можно в файле prioritymarkers в папке программы. Для того, чтобы сэкономить время на сканировании бесполезных с точки зрения поиска ящиков сайтов (например VK.com), есть список блокируемых доменов, на которых сканирование почты не производится. Посмотреть и изменить список таких доменов можно в файле stopdomains в папке программы.
Функция поиска электронной почты на сайтах является подключаемой — установите галочку сканирования, чтобы программа заходила на сайты.
В результате, при выгрузке данных в режиме сканирования почты на сайтах, Вы получаете список ящиков Email по нужным Вам запросам.

После завершения работы программы файл с результатами автоматически открывается в Excel (если установлен MS Office) или Calc (если установлен OpenOffice). Файл имеет имя вида results-***.csv. Результатом сбора являются такие файлы: пример файла с выгрузкой контактов из выдачи Яндекса.

 

Программа очень проста в использовании и имеет интуитивно понятный интерфейс.

Скриншот парсера поисковой выдачи Яндекса

Скачать демо-версию парсера выдачи Яндекса по запросам
 

Программа умеет приостанавливать свою работу, и продолжать её. Паузу можно включать вручную, а если отключится интернет — программа поставит себя на паузу автоматически. Если во время сбора на сайте возникнет ошибка, и программа не сможет получить данные — она поставит себя на паузу на некоторое время, затем автоматически проснется и сделает еще несколько попыток получить те же данные.

Два индикатора показывают ход выполнения работы. Синий показывает прогресс по списку заданных регионов, зеленый индикатор показывает прогресс по списку заданных ключевых слов.

Стоимость парсера сегодня: 5.0003.000р!

100% безопасности!

Чтобы приобрести нашу программу для выгрузки контактов из поисковой выдачи Яндекса по заданному списку запросов и регионов, укажите в данной форме имя, email, и способ оплаты (Webmoney / ЯД / Paypal / Liqpay / Qiwi / Visa / Mastercard / наличные / другое). После нажатия кнопки «Заказать!» вы получите на указанный ящик ДЕМО-версию и все подробности об условиях приобретения программы, о процедуре оплаты, о техподдержке и обновлениях.

 

Хотите заказать подобную программу для других сайтов —  закажите у нас создание парсера.

Заказать разработку парсера!

soksaitov.ru

Что такое Яндекс.XML

Яндекс.XML — сервис, позволяющий отправлять запросы к поисковой базе Яндекса и получать ответы в формате XML.

 

Полезные ссылки :

  1. Официальная документация Яндекс.XML
  2. Новые правила использования Яндекс.XML
  3. Яндекс.XML: автоматизация получения данных о часовых ограничениях

Сервис является бесплатным и позволяет:

  • организовать поиск по сайту или порталу;
  • создать приложение, которое использует возможности поиска, например — определение позиций вашего сайта, анализ поисковой выдачи и тд.

Для того чтобы воспользоваться сервисом Яндекс.XML необходимо перейти по адресу: https://xml.yandex.ru/settings/ и ввести в форме авторизации данные вашей учетной записи в поисковой системе, проще говоря — доступы от почтового ящика. После авторизации, вы окажитесь в разделе «Настройка».

Интерфейс сервиса интуитивно понятен и вам не составит труда разобраться в нём. Обратите внимание на пункт «URL для запросов». В нем вы можете увидеть следующие параметры:

  • «user» — имя пользователя, которые вы ввели при авторизации;
  • «key»  —  система автоматически сгенерирует этот параметр.

Каждый раз при отправке запросов, вам необходимо будет указывать эти параметры.

Поле «Основной IP-адрес» — вводим IP, с которого будут отправляться запросы. Например: IP-адрес домена сайта.

Яндекс.XML предоставляет доступы к трем типам поиска:

  • русскому;
  • турецкому;
  • мировому.

В отличие от прямого парсинга страницы поиска, Яндекс.XML предотвращает различные запреты поисковой системы в виде капчи, но существуют лимиты на запросы.

 

Яндекс.XML лимиты

Лимит Яндекс.XML — ограничение на количество запросов к базе поисковой системы. Каждому подтвержденному в вебмастере сайту поисковая система выделяет определенное количество лимитов, это число зависит от качества сайта.

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

Перейдем в раздел «Лимиты». Здесь можно увидеть общее количество лимитов в день, а также количество лимитов по подтвержденным сайтам.

Также существует ограничение по количеству отправляемых запросов в сутки. Внизу страницы представлена диаграмма, в которой указано количество лимитов, которое можно потратить каждый час.

 

Как пользоваться Яндекс.XML: парсер поисковой выдачи Яндекс

Каждый день SEO-специалист анализирует большой объем информации с совершенно разных источников: это могут быть как сайты конкурентов, так и результаты выдачи поисковых систем и тд. Использование Яндекс.XML  в своей работе может значительно упростить процесс анализа выдачи.

Для того чтобы понять принципы использования Яндекс.XML на практике мы реализуем простое и популярное приложение «Парсер подсветок сниппета», но помните — все зависит от ваших целей, поэтому анализировать выдачу можно по совершенно различным критериям.

Для реализации парсера (кроме Яндекс.XML и основ знаний по языку PHP) необходимо будет скачать библиотеку PHP Simple HTML DOM Parser. А также нам нужен домен и место на хостинге, на котором будут хранится файлы скриптов. И так, приступим.

Этап 1. Яндекс.XML: настройка

Сначала пройдите авторизацию. Для этого переходим в сервис xml.yandex.ru, нажимаем на кнопку «Начать работу» и вводим свои доступы.

Переходим в раздел «Настройки». В поле «Основной IP-адрес» вводим IP сайта с которого будут отправляться запросы,  поле «Тип поиска» выбираем «русский», ставим галочку «Я принимаю условия Лицензионного соглашения» и нажимаем на кнопку «Сохранить».

2 Этап. Формирование тестового запроса

Переходим в раздел «Тестовый запрос». Формируем значения  параметров и получаем конечный запрос.

В примере, мы будем использовать запрос вида: https://yandex.ru/search/xml?user=Login&key=Api-key&query=Test&lr=193

где:

  • Login — имя пользователя;
  • Api-key— API-ключ;
  • Test— текст поискового запроса;
  • Идентификатор страны/региона поиска — по умолчанию будем использовать 193 (Воронеж).

Сформированный запрос уже можно использовать, для этого достаточно вставить его в строку браузера. Кстати, если воспользоваться данным запросом с другого IP, мы получим следующий результат:

Этап 3. Создание страницы

В папке на вашем хостинге создаем страницу (yandex.php). Для удобства пользования предусмотрим 2 поля:

  • поля ввода поискового запроса;
  • список для выбора региона поиска (в нашем случае их два: Москва и Воронеж).

Код страницы, который можно просто скопировать:

Этап 3. Подключение парсера

Далее в эту папку необходимо закинуть файл парсера (simple_html_dom.php), а также создать вторую страницу(yandex-result.php), ниже приложен код с комментариями (надеюсь, вопросов не возникнет).

Код страницы, который можно просто скопировать:

Этап 3. Результат

В итоге на хостинге в папке должны находиться следующие файлы:

  • yandex.php
  • simple_html_dom.php
  • yandex-result.php

Далее обращается к файлу на вашем хостинге с именем yandex.php, вводим необходимый поисковой запрос и выбираем регион:

После нажатия на кнопку «Отправить», в текстовом поле отобразиться результат поисковой выдачи только в формате XML:

Если мы проанализируем полученный результат мы увидим, что:

  • ссылка на сайт содержится в тегах <url>;
  • заголовок сниппета содержится в теге <title>;
  • описание сниппета содержится в теге <passage>;
  • а необходимые нам слова из подсветок содержаться в теге <hlword>.

И вот теперь нам нужен парсер, который поможет получить необходимые нам значения из этих тегов. Дописываем код на нашей странице (yandex-result.php), которая будет парсить только слова в тегах <hlword>.

Код страницы, который можно просто скопировать:

Вновь запускаем страницу yandex.php с теми же параметрами:

Теперь мы можем считать, что результат достигнут, мы реализовали с вами «Парсер подсветок в поисковой системе Яндекс». Для ленивых прикладываю архив со скриптами (скачать бесплатно).

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

Удачи!

semantica.in

Результаты парсинга подсказок Яндекса

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

Файлу можно задать удобное название, чтобы не запутаться.

Возможность скачивания данных

А видео есть?

Да, мы сняли небольшое обучающее видео по новой функции сервиса. К вашему вниманию.

Теперь собирать подсказки и формировать крупное семантическое ядро в один клик стало ещё удобней! Удачи в работе с инструментом.

tools.pixelplus.ru

Приветствую всех читателей!

Я начал заниматься SEO недавно, и сразу же столкнулся с задачей определения позиций продвигаемых сайтов по ключевым словам в поисковиках. Задача тривиальная и решается на ура различным ПО, которое у всех SEO-специалистов на устах: Semonitor, AllSubmitter, etc. Помимо проприетарности, которой попахивает от всех подобного рода программ, в них есть, как это не парадоксально, ряд технических моментов, из-за которых хочется выбросить компьютер в окно.
Я бы не прочь купить Semonitor, но попользовав демо-версию, решил от этой идеи отказаться — на оф.сайте программы доступная для скачивания версия у меня глючила, требовала обновить себя, а после выпрошенного у меня обновления и вовсе отказывалась заниматься анализом позиций. Самому настроить, как Вы понимаете, нельзя.
AllSubmitter в этом плане получше, позволяет даже кастомизировать регулярные выражения для поисковиков, что вроде как делает этот софт устойчивым к смене формата выдачи, однако и с ним не все слава богу — когда 18.08.2008г. Яндекс вдруг изменил формат выдачи результатов поиска, вместе с тем поменяв и URL ссылок (возможно, эксперименты с вводом учета переходов, подробнее об этом писалось здесь), то и AllSub оказался бессилен. Правда, на следующий день Яндекс снова вернулся к старому формату выдачи, но прецедент, тем не менее, произошел.

Я тогда ради интереса изобретал велосипед: решил написать анализатор позиций, причем на PHP. У меня не было цели дойти до production’а, просто хотелось прочувствовать, как работают всякие там Semonitor’ы и Allsubmitter’ы. А потому, написав классы для парсинга Яши, Гугла и Рамблера, потестив и убедившись, что все пашет, удовлетворенно забыл, поскольку был AllSubmitter, и огород городить было незачем, было предостаточно и других задач.

Постановка задачи

Когда на Хабре написали про PHP-класс для работы с Яндекс.XML и я обильно прокомментировался по этому поводу, то по наличию плюсов в карму понял, что тема неплоха для оформления в статью, тем более что возможность появилась — я вылез из минусов. И хотя речь там шла немного о другом — об организации поиска по сайту, используя Yandex.XML, задача анализа позиций сайта по ключевым словам и фразам пересекается с первой. Итак, моя задача:
создать анализатор позиций сайтов в выдаче поисковых систем (пока Яндекса)

Решение

Тут нету ничего сложного.

Во-первых,

все необходимое для получения результатов поиска передается через GET-параметры, а именно:

  • text — текст поискового запроса. URL-кодированный.
  • p — номер страницы выдачи (p=0, 1, 2…). Without comments
  • numdoc — число выдаваемых результатов на страницу(numdoc=10, 20, 30, 50; допустимы только эти значения и никакие более). Для анализа позиций сайта по ключевым словам лучше всего юзать наибольшее значение, т.к. явное уменьшение нагрузки на сервер и, как следствие — меньше подозрений, что «Я, робот»

Шаблон строки запроса:
yandex.ru/yandsearch?text=[KEYWORD]&p=[PAGE_NUMBER]&numdoc=[RESULTS_ON_PAGE]

Во-вторых,

Выдача Яндекса подвергается разбору на нужные нам составляющие, путем прогона через регулярное выражение вида:

Вот таким путем:

  1. preg_match_all(РЕГВЫР, HTML_ВЫДАЧИ, МАССИВ_РЕЗУЛЬТАТОВ, PREG_SET_ORDER);

* This source code was highlighted with Source Code Highlighter.

В результате чего получается массив (в нем numdoc элементов) массивов (3 элемента в подмассиве: html с одним результатом выдачи, url найденной страницы выдачи, ее заголовок).

В итоге,

Вот по какой схеме я работаю, чтобы найти сайт в Яндексе по определенному запросу (поиск до первого вхождения):

  1. получаю первую страницу с выдачей
  2. если это не «страница недоверия» Яндекса с капчей — прогоняю через регвыр, перебираю результаты в поиске нужного.
  3. если нахожу, возвращаю результат — номер позиции страницы в выдаче, не нахожу — получаю следующую страницу и возвращаюсь к п.2, подождав секунды 3-5

В качестве параметров к процессу анализа у меня имеется:

  • resultsLimit — ограничение по глубине поиска, по умолчанию
    люблю ставить 200
  • url — имя хоста, который ищем в выдаче. Учитывается любая страница с этого хоста
  • keyword — запрос к поисковику.

Реализовано

это посредством иерархии классов (чтобы при надобности легко расширять функциональность анализатора на другие поисковики).

Абстрактный класс — SomeAnalyzer:

  1. abstract class SomeAnalyzer{
  2.    
  3.    //// ИНТЕРФЕЙС
  4.    
  5.    // функция анализа
  6.    public abstract function analyzeThis($url);
  7.    
  8.    // получение имени хоста из url (parse_url с дополнительным функционалом, поскольку убедился что просто parse_url не всегда почему-то работает, когда url слишком неудобочитаемый)
  9.    public function getHost($url){
  10.       $url=@parse_url($url);
  11.       if($url[‘path’] && !$url[‘host’])
  12.          $url[‘host’]=$url[‘path’];
  13.       $url[‘host’]=ereg_replace("/.*$", "", $url[‘host’]);
  14.       $url[‘host’]=ereg_replace("^www.", "", $url[‘host’]);
  15.       
  16.       return $url[‘host’];
  17.    }
  18.    
  19.    //// РЕАЛИЗАЦИЯ
  20.    
  21.    // функция сравнения 2-х url на предмет принадлежности к одному хосту
  22.    protected function compareURL($url1, $url2){
  23.       $url1=$this->getHost($url1);
  24.       $url2=$this->getHost($url2);
  25.       
  26.       return(strtoupper($url1[‘host’])==strtoupper($url2[‘host’])? true: false);
  27.    }
  28. }

* This source code was highlighted with Source Code Highlighter.

Класс анализатора выдачи Яндекса:

  1. class YandexAnalyzer extends SomeAnalyzer{
  2.    
  3.    //// ИНТЕРФЕЙС
  4.    
  5.    // настройки
  6.    public $resultsLimit=200; // лимит результатов выдачи
  7.    public $url;
  8.    public $keyword;
  9.    
  10.    public $resultsOnPage=50; // можно только 10, 20, 30, 50
  11.    
  12.    // функция анализа
  13.    public function analyzeThis($url, $keyword=»){
  14.       $this->url=$url;
  15.       $this->keyword=$keyword;
  16.       $x=0;
  17.       while($x*$this->resultsOnPage<=$this->resultsLimit-1){
  18.          if($results=$this->analyzePage(str_replace(array("r", "n", "t"), », $this->downloadPage($x)))){
  19.             $results[0]=$x*$this->resultsOnPage+$results[0];
  20.             return $results;
  21.          }
  22.          $x++;
  23.          sleep(rand(3, 5));
  24.       }
  25.       return false;
  26.    }
  27.    
  28.    //// РЕАЛИЗАЦИЯ
  29.    
  30.    protected $regexpParseResults=‘#<li>.*<a[^>]*tabindex[^>]*onclick[^>]*=[^>]*"[^>]*"[^>]*href="([^<>"]+)"[^>]*>(.+)</a>.*</li>#Ui’;
  31.    protected $urlMask=‘http://yandex.ru/yandsearch?text=[KEYWORD]&p=[PAGE_NUMBER]&numdoc=[RESULTS_ON_PAGE]’;
  32.    
  33.    protected function downloadPage($pageNumber){
  34.       $mask=str_replace(‘[KEYWORD]’, urlencode($this->keyword), $this->urlMask);
  35.       $mask=str_replace(‘[PAGE_NUMBER]’, $pageNumber, $mask);
  36.       $mask=str_replace(‘[RESULTS_ON_PAGE]’, $this->resultsOnPage, $mask);
  37.       
  38.       return file_get_contents($mask);
  39.    }
  40.    
  41.    protected function analyzePage($content){
  42.       
  43.       if(preg_match_all($this->regexpParseResults, $content, $matches, PREG_SET_ORDER)!==false){
  44.          if(count($matches)<=0)
  45.             deb(‘<br /><span style=«color: red;»>Не найдено вхождений или ошибка парсера: возможно гугл подозревает, что Вы робот!</span>’);
  46.          else
  47.             foreach($matches as $num=>$match){
  48.                if($this->compareURL($match[1], $this->url))
  49.                   return array($num+1, $match[1], $match[2]);
  50.             }
  51.       }
  52.       else deb(‘<span style=«color: red;»>Не найдено вхождений или ошибка парсера: возможно йандекс подозревает, что Вы робот!</span>’);
  53.       
  54.       return false;
  55.    }
  56. }

* This source code was highlighted with Source Code Highlighter.

Хочу обратить Ваше внимание на один момент: не знаю, что это было 18 числа этого месяца сего года, но у Яндекса поменялся формат выдачи, пришлось менять регулярки и дописывать классы, однако уже 19 числа все с изумлением наблюдали то, как яндексоиды возвратили все как было. И, почему бы и нет, это может повториться, потому привожу список изменений и дополнений в класс YandexAnalyzer, которые нужно будет сделать, если вдруг формат выдачи станет как 18.08.2008г.:

  • строка №30 теперь имеет вид:

    1. protected $regexpParseResults=‘#<li>.*<a[^>]*tabindex[^>]*href="([^<>"]+)"[^>]*>(.+)</a>.*</li>#Ui’;

    * This source code was highlighted with Source Code Highlighter.

  • строка №48 также поменялась:

    1. if($this->compareURL($this->getUrlFromYa($match[1]), $this->url))

    * This source code was highlighted with Source Code Highlighter.

  • Вы наверно заметили, что в строке №48 используется теперь функция getUrlFromYa? Мало того что поменялся формат выдачи, ссылки стали не прямые, посему понадобилась дополнительная операция извлечение адреса хоста из огромного урла яндекса. Вот код функции, добавьте его в конец класса YandexAnalyzer:

    1. protected function getUrlFromYa($yaUrl){
    2.    if(preg_match_all(‘/[*](http:.*)$/Ui’, $yaUrl, $matches, PREG_SET_ORDER)!==false)
    3.       return $matches[0][1];
    4.    return false;
    5. }

    * This source code was highlighted with Source Code Highlighter.

Результат

Вот небольшой код для тестирования:

  1. $url=«vinzavod.ru»;
  2. $keywords=array(
  3.    ‘винзавод’,
  4.    ‘алкоголь производство’,
  5.    ‘производство алкоголя’,
  6.    ‘продажа алкоголя’,
  7.    ‘производители алкоголя’,
  8.    ‘вино’,
  9.    ‘вина’,
  10.    ‘производство вина’,
  11.    ‘продажа вина’,
  12.    ‘коньяк’,
  13.    ‘коньяки’,
  14.    ‘производство коньяка’,
  15.    ‘продажа коньяков’,
  16.    ‘продажа коньяка’,
  17.    ‘продажа коньяк’,
  18.    ‘настойка’,
  19.    ‘настойки’,
  20.    ‘производство настоек’,
  21.    ‘продажа настоек’,
  22.    ‘вермут’,
  23.    ‘вермуты’,
  24.    ‘производство вермута’,
  25.    ‘портвейн’,
  26.    ‘портвейны’,
  27.    ‘портвейн 777’,
  28.    ‘продажа портвейнов’,
  29.    ‘алкоголь’,
  30.    ‘алкогольная продукция’,
  31.    ‘фирменный алкоголь’,
  32.    ‘алкогольные напитки’,
  33.    ‘классические алкогольные напитки’
  34. );
  35.  
  36. $g=new YandexAnalyzer();
  37. foreach($keywords as $keyword){
  38.    if($res=$g->analyzeThis($url, $keyword)){
  39.       deb(‘<span style=«color: green;»>’.$res[0].‘-я позиция сайта ‘.$url.‘ по фразе <a href="’.$url.‘"’.$keyword.‘</a>"</span>’);
  40.    }
  41.    else
  42.       deb($url.‘ не найден в первых ‘.$g->resultsLimit.‘ результатах по фразе "’.$keyword.‘"’);
  43.    sleep(rand(3, 5));
  44. }

* This source code was highlighted with Source Code Highlighter.

и результат тестирования:
4-я позиция сайта vinzavod.ru по фразе «винзавод»
13-я позиция сайта vinzavod.ru по фразе «алкоголь производство»
158-я позиция сайта vinzavod.ru по фразе «производство алкоголя»
45-я позиция сайта vinzavod.ru по фразе «продажа алкоголя»
vinzavod.ru не найден в первых 300 результатах по фразе «производители алкоголя»
181-я позиция сайта vinzavod.ru по фразе «вино»
255-я позиция сайта vinzavod.ru по фразе «вина»
4-я позиция сайта vinzavod.ru по фразе «производство вина»
56-я позиция сайта vinzavod.ru по фразе «продажа вина»
94-я позиция сайта vinzavod.ru по фразе «коньяк»
56-я позиция сайта vinzavod.ru по фразе «коньяки»
7-я позиция сайта vinzavod.ru по фразе «производство коньяка»
5-я позиция сайта vinzavod.ru по фразе «продажа коньяков»
7-я позиция сайта vinzavod.ru по фразе «продажа коньяка»
5-я позиция сайта vinzavod.ru по фразе «продажа коньяк»
11-я позиция сайта vinzavod.ru по фразе «настойка»
17-я позиция сайта vinzavod.ru по фразе «настойки»
3-я позиция сайта vinzavod.ru по фразе «производство настоек»
1-я позиция сайта vinzavod.ru по фразе «продажа настоек»
30-я позиция сайта vinzavod.ru по фразе «вермут»
25-я позиция сайта vinzavod.ru по фразе «вермуты»
32-я позиция сайта vinzavod.ru по фразе «производство вермута»
32-я позиция сайта vinzavod.ru по фразе «портвейн»
15-я позиция сайта vinzavod.ru по фразе «портвейны»
93-я позиция сайта vinzavod.ru по фразе «портвейн 777»
4-я позиция сайта vinzavod.ru по фразе «продажа портвейнов»

Перспективы и планы на будущее

  • обуздать как минимум тройку Яндекс, Гугл, Рабмлер.
  • сделать человеческую оболочку для пользования, лучший вариант — ajax-приложение, с поддержкой проектов и сохранением на сервере результатов анализов

Статья готовилась в течении недели, поэтому на момент ее написания уже реализованы анализаторы для Яндекса, Гугла, Рабмлера, и пишется потихоньку приложение. Но это — тема уже следующих постов))
P.S.: Мой первый пост на Хабре, прошу больно не пинать, а конструктивно комментировать))

habr.com

Парсим выдачу Google.

Перед, тем как мы начнем парсить, давайте перейдем в настройки поиска Google и установим максимальное значение «Результатов на страницу» — 100 результатов.
Количество результатов на страницу в Google

Парсить выдачу будем по неожиданному запросу «инструменты фрилансера».

Получаем title первого сайта из выдачи Google.

Вводим запрос и в инструментах разработчика (Ctrl + Shift + C) исследуем title первого сайта из выдачи. По чудесному стечению обстоятельств это наш блог ).
Первый сайт в выдаче по запросу

В инструментах разработчика кликаем правой кнопкой мыши по найденному коду элемента и выбираем «Copy» > «Copy XPath».
Получаем XPath запрос

Запускаем наш тестер запросов и вставляем, скопированный XPath запрос.

//*[@id="rso"]/div[1]/div/div/div/h3/a

Получаем title первого сайта из выдачи

Как видите, мы получили title первого сайта из выдачи.

Получаем title всех сайтов из выдачи Google.

Теперь получим title для всех сайтов из выдачи. Для этого перед первым дивом поставим еще один слеш.

//*[@id="rso"]//div[1]/div/div/div/h3/a

Получаем title всех сайтов из выдачи

 

Получаем все ссылки из выдачи Google.

Для получения всех ссылок, просто меняем тег «а» (текст) на «@href» (url).

//*[@id="rso"]//div[1]/div/div/div/h3//@href

Получаем все ссылки из выдачи Google

 

Получаем description первого сайта из выдачи Google.

Для получения description первого сайта из выдачи, проделываем все вышеперечисленные операции (исследуем элемент, копируем код XPath, вставляем полученный код в тестер запросов).

//*[@id="rso"]/div[1]/div/div/div/div/div/span

Получаем description первого сайта из выдачи Google

Получаем description всех сайтов из выдачи Google.

Для получения description всех сайтов из выдачи, опять же, добавляем слеш перед первым дивом.

//*[@id="rso"]//div[1]/div/div/div/div/div/span

Получаем все description из выдачи Google

 

freelancers-tools.com


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.