Comments 33
Спасибо как раз то, что нужно.
YaXML — какой-то не такой, там 1000 запросов мона с определенного АйПи в сутки… Да и слухи ходили и рядах seo-спецов, что выдача YaXML отличается бывает от выдачи, что обычным пользователям показывается.
ИМХО намного лучше юзать обычную пользовательскую выдачу, как я делаю, ничего сложного нету:
— запрос GET, юзабельные параметры: text — текст запроса, p — номер страницы выдачи (0, 1, ...) да и numdoc — число рез-тов на страницу (10, 20, 50 вроде помню допустимы, ессессно, для уменьшения нагрузки используйте максимум)))
— полученную страницу прогоняете через регулярное выражение, вот мой вариант, кстати, исправленный сегодня в учетом вчерашнего апа: #.*]*tabindex[^>]*href=«([^»]+)«[^>]*>(.+).*#Ui
На выходе получаете массив (numdoc элементов в нем) массивов (3 эл-та в подмассиве: html с одним результатом выдачи, url найденной страницы выдачи, ее заголовок)
ну и опять же, с учетом вчерашнего апа, теперь кликнув на результат выдачи, вы пойдете на что-то вроде clck.yandex.ru/redir/dtype=iweb/path=80.22.82/vars=84=86… reqid=1219118886-18378/*http://www.vinzavod.ru/
Поэтому теперь еще надо дополнительно, чтобы извлечь url найденной страницы, нужно прогнать написанное выше через выражение: /[\*](http:.*)$/Ui, и получите на выходе: www.vinzavod.ru/
Я класс на PHP написал, пользуюсь, не жалуюсь))
Единственное что надо соблюдать, так это паузы между запросами, секунды 3 и более бывает вроде как достаточно, чтобы яндекс нас за робота не посчитал…
P.S: Мог бы в блоги писать, оформил бы по этому статью
ИМХО намного лучше юзать обычную пользовательскую выдачу, как я делаю, ничего сложного нету:
— запрос GET, юзабельные параметры: text — текст запроса, p — номер страницы выдачи (0, 1, ...) да и numdoc — число рез-тов на страницу (10, 20, 50 вроде помню допустимы, ессессно, для уменьшения нагрузки используйте максимум)))
— полученную страницу прогоняете через регулярное выражение, вот мой вариант, кстати, исправленный сегодня в учетом вчерашнего апа: #.*]*tabindex[^>]*href=«([^»]+)«[^>]*>(.+).*#Ui
На выходе получаете массив (numdoc элементов в нем) массивов (3 эл-та в подмассиве: html с одним результатом выдачи, url найденной страницы выдачи, ее заголовок)
ну и опять же, с учетом вчерашнего апа, теперь кликнув на результат выдачи, вы пойдете на что-то вроде clck.yandex.ru/redir/dtype=iweb/path=80.22.82/vars=84=86… reqid=1219118886-18378/*http://www.vinzavod.ru/
Поэтому теперь еще надо дополнительно, чтобы извлечь url найденной страницы, нужно прогнать написанное выше через выражение: /[\*](http:.*)$/Ui, и получите на выходе: www.vinzavod.ru/
Я класс на PHP написал, пользуюсь, не жалуюсь))
Единственное что надо соблюдать, так это паузы между запросами, секунды 3 и более бывает вроде как достаточно, чтобы яндекс нас за робота не посчитал…
P.S: Мог бы в блоги писать, оформил бы по этому статью
Блин, хабр похерил символы из регулярок, если что — пишите в личку, скину…
На скольких сайтах параллельно вы готовы гарантированно поддерживать этот код в боеспособном состоянии?
Это к слову о преимуществах YaXML в случае, когда поиск нужен не на одном сайте и не на десяти…
Это к слову о преимуществах YaXML в случае, когда поиск нужен не на одном сайте и не на десяти…
За это вроде бы капчу показывают?
Да нет, если соблюдать временной промежуток, я ставлю рандомно — от 2 до 4 секунд, но опыт мне говорит, что надо поболее, все равно, каюсь, капча вываливается иногда…
Вообще это часть небольшого внутреннего проекта моей компании. Проект небольшой и функция его — анализировать позиции по ключевикам определенного сайта в поисковиках, поскольку все эти семониторы платные + демо версия семонитора отказалась работать после вчерашнего апа яндекса)) а я просто поправил регулярки)).
Как правило, анализируют сразу в нескольких поисковиках, потому можно все сделать таким образом, что не добить сначала яндекс, потом гугл и пр., а поочередно)) Тогда многократно падает вероятность показа капчи (что со стороны яндекса, что со стороны гугла), да и промежуток временный в 2-4 секунды уже будет не актуален вообще, либо для порядку, чтобы нагрузки не было, сократится максимум до 1 с… и не будет бесполезной утечкой времени))
Подход, состоящий в парсинге пользовательской выдачи, конечно, посложнее, чем YaXML, но зато я точно знаю, что результаты аналогичны тому, что видят пользователи, и я не ограничен в количестве запросов))
Вообще это часть небольшого внутреннего проекта моей компании. Проект небольшой и функция его — анализировать позиции по ключевикам определенного сайта в поисковиках, поскольку все эти семониторы платные + демо версия семонитора отказалась работать после вчерашнего апа яндекса)) а я просто поправил регулярки)).
Как правило, анализируют сразу в нескольких поисковиках, потому можно все сделать таким образом, что не добить сначала яндекс, потом гугл и пр., а поочередно)) Тогда многократно падает вероятность показа капчи (что со стороны яндекса, что со стороны гугла), да и промежуток временный в 2-4 секунды уже будет не актуален вообще, либо для порядку, чтобы нагрузки не было, сократится максимум до 1 с… и не будет бесполезной утечкой времени))
Подход, состоящий в парсинге пользовательской выдачи, конечно, посложнее, чем YaXML, но зато я точно знаю, что результаты аналогичны тому, что видят пользователи, и я не ограничен в количестве запросов))
пробовал и 3 секунды и больше, придумывал самые красивые заголовки, все равно банит как робота. Ну и 3 секунды тоже проблема, когда надо обработать сотни запросов.
А xml да, отличается от обычной выдачи, что делает его бесполезным
А xml да, отличается от обычной выдачи, что делает его бесполезным
Большое спасибо за статью!
Буду пытаться подключить скрипт к своему сайту.
Если будет что-то не получаться, можно будет задать вопрос?
Спасибо.
Буду пытаться подключить скрипт к своему сайту.
Если будет что-то не получаться, можно будет задать вопрос?
Спасибо.
svn checkout yandex.googlecode.com/svn/trunk/
Хорошее имя у репозитория :)
Боже, а что ж картинка — то в статье такого ужасного качества?!?!
не портьте первую страницу хабра!
не портьте первую страницу хабра!
на XSLT как-то это все приятнее выглядит
Предлагаю автору взять мой вариант картинки, для солидности статьи.
Автор не будет против если я использую данную картинку и в своём блоге?
Вы уверенны, что такая лесница на букве «Я» вместе с не реальным вензелем снизу добавит солидности?
Для солидности думаю будет достаточно написать
«PHP класс для работы с Яндекс.XML»
Для солидности думаю будет достаточно написать
«PHP класс для работы с Яндекс.XML»
Имхо букву «Я» лучше оставить оригинального цвета :)
Жаль, что для виртуального хостинга Яндекс.XML не подходит ввиду ограничений по числу запросов с IP и физической невозможности получить код доступа, если конкретный IP для этой же цели уже использован кем-то другим. Сделали бы в Яндексе JavaScript API, подобный гугловскому.
ммм… много работаю с я.иксмл, и думаю что для тех кто не пробывал ранее, лучше обратится к примерам на самом Я., без задней мысли, там просто реализованно по четче, примеров куча… ну и стиль кода мне там больше навицца)
почему бы вам не вклинить проект на nano.yandex.ru?
Зачем нужен поиск с ограничениями и чужой рекламой — если есть Sphinx?
Мне лично не нравится — если 1001 человек ничего не получит в результатах поиска,
как-то это не солидно.
Мне лично не нравится — если 1001 человек ничего не получит в результатах поиска,
как-то это не солидно.
смотрел доки на xml.yandex.ru и исходники, но так и не получилось запустить поиск с вашим классом по определённому сайту (куда только не пихал «<< host=mysite.ru»)
подскажите?
подскажите?
Sign up to leave a comment.
PHP класс для работы с Яндекс.XML