Начиная с версии 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 для выбранного элемента. Открываем расширение XPath Helper Wizard и тестируем скопированный XPath. Мы видим, что подсветился только один анкор - тот, чей XPath мы скопировали. Теперь модифицируем запрос, чтобы захватывались все анкоры. Аналогичным образом получаем 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') то мы уже получим готовый парсер поисковой выдачи Рамблера. Но какой же это парсер поисковика, если он не умеет определять количество результатов в выдаче? Значит добавим такую возможность. А вместе с ней и определение, посчитал ли Рамблер запрос опечаткой, и парсинг связанных ключевых слов (related keywords). Примечание. Нужно учитывать, что мы парсим несколько страниц выдачи, и получать кол-во результатов, опечатку и связанные ключевые слова нужно только из первой страницы. Поэтому в качестве источника в Конструкторе результатов для этих данных используем [% pages.0.data %] С количеством результатов в данном случае все немного сложнее. Если мы получим для него XPath аналогично тому, как описано выше и используем его в парсере, то не получим никакого результата. А причина тому - JavaScript. Но выход есть - нужно проанализировать страницу и сделать XPath, который вернет весь JS, а потом дополнительно извлечь число. Как видно на скрине, мы получаем такой 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 и предусмотреть такой вариант. В результате получим такой пресет: Спойлер: Код для импорта Код: 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