Парсер rambler.ru

Пресет Быстрое создание кастомного парсера поисковой системы с помощью XPath 1.0

Доступно владельцам лицензии
  • Автор темы Автор темы Support
  • Дата начала Дата начала

Support

Administrator
Команда форума
A-Parser Enterprise
Начиная с версии 1.1.295 в А-Парсер была добавлена поддержка XPath. Среди пользователей данная функция не пользуется большим спросом. И это довольно незаслуженно, т.к. с помощью XPath очень легко и быстро можно создавать довольно функциональные кастомные парсеры.

В данной статье речь пойдет о парсинге поисковой выдачи rambler.ru. Аналогичным образом можно создавать парсеры и для других поисковиков.

Итак, нам нужны браузер с поддержкой расширений и расширение для тестирования XPath (ниже будет использован Chrome и расширение XPath Helper Wizard).

Открываем выдачу rambler.ru по любому запросу. Анализируем ссылку в адресной строке браузера - она нам нужна будет, чтобы указать ее в формате запроса. Поэксперементировав, мы видим, что ее можно сократить и http://nova.rambler.ru/search?pagelen=50&query=test возвращает 50 ссылок по запросу test.

Далее начнем с анкоров. Включаем Инструменты разработчика, ищем на вкладке Elements нужный элемент (подсказка: очень просто это сделать, если на странице навести мышку на нужный элемент, кликнуть правой кнопкой и выбрать пункт Показать код).
Копируем XPath для выбранного элемента.
6uEX1.png


Открываем расширение XPath Helper Wizard и тестируем скопированный XPath.
OjxEe.png


Мы видим, что подсветился только один анкор - тот, чей XPath мы скопировали. Теперь модифицируем запрос, чтобы захватывались все анкоры.
Js20l.png


Аналогичным образом получаем XPath запросы для ссылок и сниппетов:
Код:
анкоры: /html/body/div[1]/div[3]/div/div[*]/section/div[*]/article/h2/a
линки: /html/body/div[1]/div[3]/div/div[*]/section/div[*]/article/h2/a/@href
сниппеты: /html/body/div[1]/div[3]/div/div[*]/section/div[*]/article/p

Теперь создаем задание в А-Парсере. Добавляем три Конструктора результатов, тип выбираем XPath Query и вставляем полученные выше XPath запросы. Так, как страниц в выдаче скорее всего будет несколько, то добавляем функцию Check next page и регулярное выражение для следующей страницы. Также, из-за того, что страниц будет несколько, источник в Конструкторах указываем $p1.pages.$i.data. Если на данном этапе указать формат результата $p1.serp.format('$anchor;$link;$snippet\n') то мы уже получим готовый парсер поисковой выдачи Рамблера.
ji4jQ.png


Но какой же это парсер поисковика, если он не умеет определять количество результатов в выдаче? Значит добавим такую возможность. А вместе с ней и определение, посчитал ли Рамблер запрос опечаткой, и парсинг связанных ключевых слов (related keywords).

Примечание. Нужно учитывать, что мы парсим несколько страниц выдачи, и получать кол-во результатов, опечатку и связанные ключевые слова нужно только из первой страницы. Поэтому в качестве источника в Конструкторе результатов для этих данных используем [% pages.0.data %]

С количеством результатов в данном случае все немного сложнее. Если мы получим для него XPath аналогично тому, как описано выше и используем его в парсере, то не получим никакого результата. А причина тому - JavaScript. Но выход есть - нужно проанализировать страницу и сделать XPath, который вернет весь JS, а потом дополнительно извлечь число.
Tikz6.png


Как видно на скрине, мы получаем такой JS:
Код:
document.querySelector('.js-search-counter').innerHTML ="Найдено 948 млн страниц";
Поэтому в формате результата нужно сделать дополнительную обработку, которая извлечет из этого число и преобразует буквенное обозначение в цифровое. Все это легко можно сделать с помощью Template Toolkit:
Код:
[% IF p1.totalcount.match('млрд');
    p1.totalcount = p1.totalcount.match('(\d+)').0 * 1000000000;
ELSIF p1.totalcount.match('млн');
    p1.totalcount = p1.totalcount.match('(\d+)').0 * 1000000;
ELSIF p1.totalcount.match('тыс');
    p1.totalcount = p1.totalcount.match('(\d+)').0 * 1000;
ELSE;
    p1.totalcount = p1.totalcount.match('(\d+)').0;
END %]

С релейтедами и опечаткой все проще - получаем точно также, как и для serp, XPath запросы, и используем их в задании.
Также иногда бывает, что Рамблер выдает каптчу. Поэтому нужно добавить Check content и предусмотреть такой вариант.

В результате получим такой пресет:
24i2E.png

Код:
eyJwcmVzZXQiOiJSYW1ibGVyIFhQYXRoIiwidmFsdWUiOnsicHJlc2V0IjoiUmFt
YmxlciBYUGF0aCIsInBhcnNlcnMiOltbIk5ldDo6SFRUUCIsImRlZmF1bHQiLHsi
dHlwZSI6Im92ZXJyaWRlIiwiaWQiOiJnb29kQ29kZSIsInZhbHVlIjpbMjAwXX0s
eyJ0eXBlIjoib3B0aW9ucyIsImlkIjoiY2hlY2tOZXh0UGFnZSIsInZhbHVlIjoi
PGEgaHJlZj1cIihbXlwiXSspXCIgY2xhc3M9XCJiLXBhZ2luZ19fbGluayBiLXBh
Z2luZ19fbGlua19hcnJvdyBiLXBhZ2luZ19fbGlua19yaWdodFwiIiwiYWRkaXRp
b25hbCI6eyJjaGVja05leHRQYWdlTGltaXQiOiI1In19LHsidHlwZSI6Im9wdGlv
bnMiLCJpZCI6ImNoZWNrQ29udGVudCIsInZhbHVlIjoiY2xhc3M9XCJiLWNhcHRj
aGFfX3RpdGxlXCIiLCJhZGRpdGlvbmFsIjp7ImNoZWNrQ29udGVudE1hdGNoVHlw
ZSI6MH19XV0sInJlc3VsdHNGb3JtYXQiOiJbJSBJRiBwMS50b3RhbGNvdW50Lm1h
dGNoKCdcdTA0M2NcdTA0M2JcdTA0NDBcdTA0MzQnKTtcblx0cDEudG90YWxjb3Vu
dCA9IHAxLnRvdGFsY291bnQubWF0Y2goJyhcXGQrKScpLjAgKiAxMDAwMDAwMDAw
O1xuRUxTSUYgcDEudG90YWxjb3VudC5tYXRjaCgnXHUwNDNjXHUwNDNiXHUwNDNk
Jyk7XG5cdHAxLnRvdGFsY291bnQgPSBwMS50b3RhbGNvdW50Lm1hdGNoKCcoXFxk
KyknKS4wICogMTAwMDAwMDtcbkVMU0lGIHAxLnRvdGFsY291bnQubWF0Y2goJ1x1
MDQ0Mlx1MDQ0Ylx1MDQ0MScpO1xuXHRwMS50b3RhbGNvdW50ID0gcDEudG90YWxj
b3VudC5tYXRjaCgnKFxcZCspJykuMCAqIDEwMDA7XG5FTFNFO1xuXHRwMS50b3Rh
bGNvdW50ID0gcDEudG90YWxjb3VudC5tYXRjaCgnKFxcZCspJykuMDtcbkVORDtc
bklGIHAxLm1pc3NwZWxsID09ICdub25lJztcblx0cDEubWlzc3BlbGwgPSAnMCc7
XG5FTFNFO1xuXHRwMS5taXNzcGVsbCA9ICcxJztcbkVORCAtJV1cbiRxdWVyeS5v
cmlnOiAkcDEudG90YWxjb3VudFxubWlzc3BlbGw6ICRwMS5taXNzcGVsbFxuJHAx
LnNlcnAuZm9ybWF0KCckYW5jaG9yIC0gJGxpbmsgLSAkc25pcHBldFxcbicpXG4k
cDEucmVsYXRlZC5mb3JtYXQoJyRrZXlcXG4nKVxcbiIsInJlc3VsdHNTYXZlVG8i
OiJmaWxlIiwicmVzdWx0c0ZpbGVOYW1lIjoiJGRhdGVmaWxlLmZvcm1hdCgpLnR4
dCIsImFkZGl0aW9uYWxGb3JtYXRzIjpbXSwicmVzdWx0c1VuaXF1ZSI6Im5vIiwi
cXVlcnlGb3JtYXQiOlsiaHR0cDovL25vdmEucmFtYmxlci5ydS9zZWFyY2g/cGFn
ZWxlbj01MCZxdWVyeT0kcXVlcnkiXSwidW5pcXVlUXVlcmllcyI6ZmFsc2UsInNh
dmVGYWlsZWRRdWVyaWVzIjpmYWxzZSwiaXRlcmF0b3JPcHRpb25zIjp7Im9uQWxs
TGV2ZWxzIjpmYWxzZSwicXVlcnlCdWlsZGVyc0FmdGVySXRlcmF0b3IiOmZhbHNl
LCJxdWVyeUJ1aWxkZXJzT25BbGxMZXZlbHMiOmZhbHNlfSwicmVzdWx0c09wdGlv
bnMiOnsib3ZlcndyaXRlIjpmYWxzZX0sImRvTG9nIjoibm8iLCJrZWVwVW5pcXVl
IjoiTm8iLCJtb3JlT3B0aW9ucyI6ZmFsc2UsInJlc3VsdHNQcmVwZW5kIjoiIiwi
cmVzdWx0c0FwcGVuZCI6IiIsInF1ZXJ5QnVpbGRlcnMiOltdLCJyZXN1bHRzQnVp
bGRlcnMiOlt7InNvdXJjZSI6WzAsWyJwYWdlcyIsImRhdGEiXV0sInR5cGUiOiJ4
cGF0aCIsImFycmF5Ijoic2VycCIsInhwYXRoIjoiL2h0bWwvYm9keS9kaXZbMV0v
ZGl2WzNdL2Rpdi9kaXZbKl0vc2VjdGlvbi9kaXZbKl0vYXJ0aWNsZS9oMi9hIiwi
dG8iOiJhbmNob3IifSx7InNvdXJjZSI6WzAsWyJwYWdlcyIsImRhdGEiXV0sInR5
cGUiOiJ4cGF0aCIsImFycmF5Ijoic2VycCIsInhwYXRoIjoiL2h0bWwvYm9keS9k
aXZbMV0vZGl2WzNdL2Rpdi9kaXZbKl0vc2VjdGlvbi9kaXZbKl0vYXJ0aWNsZS9o
Mi9hL0BocmVmIiwidG8iOiJsaW5rIn0seyJzb3VyY2UiOlswLFsicGFnZXMiLCJk
YXRhIl1dLCJ0eXBlIjoieHBhdGgiLCJhcnJheSI6InNlcnAiLCJ4cGF0aCI6Ii9o
dG1sL2JvZHkvZGl2WzFdL2RpdlszXS9kaXYvZGl2WypdL3NlY3Rpb24vZGl2Wypd
L2FydGljbGUvcCIsInRvIjoic25pcHBldCJ9LHsic291cmNlIjpbMCwtMSwiWyUg
cGFnZXMuMC5kYXRhICVdIl0sInR5cGUiOiJ4cGF0aCIsInhwYXRoIjoiLy9kaXZb
QGNsYXNzPVwiYi1zZXJwLWxpc3RcIl1bMV0vc2VjdGlvbi9zY3JpcHQiLCJ0byI6
InRvdGFsY291bnQifSx7InNvdXJjZSI6WzAsLTEsIlslIHBhZ2VzLjAuZGF0YSAl
XSJdLCJ0eXBlIjoieHBhdGgiLCJhcnJheSI6InJlbGF0ZWQiLCJ4cGF0aCI6Ii8v
YVtAY2xhc3M9J2ItaGludHNfX2xpbmsnXSIsInRvIjoia2V5In0seyJzb3VyY2Ui
OlswLC0xLCJbJSBwYWdlcy4wLmRhdGEgJV0iXSwidHlwZSI6InhwYXRoIiwieHBh
dGgiOiIvaHRtbC9ib2R5L2RpdlsxXS9kaXZbM10vZGl2L2RpdlsxXS9iL2IvaSIs
InRvIjoibWlzc3BlbGwifV0sImNvbmZpZ092ZXJyaWRlcyI6W10sInJ1blRhc2tP
bkNvbXBsZXRlIjpudWxsLCJ1c2VSZXN1bHRzRmlsZUFzUXVlcmllc0ZpbGUiOmZh
bHNlLCJydW5UYXNrT25Db21wbGV0ZUNvbmZpZyI6ImRlZmF1bHQiLCJ0b29sc0pT
IjoiIn19

test: 941000000
misspell: 0
Speedtest.net by Ookla - The Global Broadband Speed Test - http://www.speedtest.net/ - Интерактивные инструменты для проверки и анализа скорости и качества широкополосных соединений.
«Testi.ru» — коллекция психологических тестов - http://www.testi.ru/ - Сборник тестов для мужчин и женщин на темы: характер, интеллект, интимная жизнь, деловая сфера и пр...
Психологические тесты - http://tests.pp.ru/ - Коллекция разнообразных психологических тестов - тесты онлайн и оффлайн, популярные, юмористические и профессиональные.
Бесплатные тесты. Онлайн тесты бесплатно, без смс... - http://www.BankTestov.ru/ - Пройти тесты онлайн или создать тест. Добро пожаловать в Банк тестов!И еще порядка 8450 специализированных тестов, предназначенных для узкого круга лиц.
...

P.S. Пресет будет работать, начиная с версии 1.1.566
 
Последнее редактирование:
Назад
Верх