Представление результатов

13 ноя 2015


  • A-Parser создавался для парсинга информации любых видов, для этого было введено 2 типа результатов:
    • Простые результаты(Flat)
    • Массивы результатов(Array)
    Рассмотрим каждый тип на примере парсера SE::Google SE::Google, скриншот выдачи:
    [​IMG]

    Простые результаты(top)


    Простые результаты - когда одному запросу соответствует один результат, примеры:
    • Количество результатов по запросу ($totalcount)
    • Является ли запрос опечаткой($misspell, на скриншоте не представлен)
    Другие примеры:
    • Значение PageRank($pr) в парсере SE::Google::pR SE::Google::pR
    • Значение тИЦ($tic) в парсере SE::Yandex::TIC SE::Yandex::TIC
    • Количество ссылающихся доменов($domains), IP адресов($ips), беклинков($backlinks) и т.д. в парсере Rank::MajesticSEO Rank::MajesticSEO
    Одиночные результаты сохраняются в обычных переменных(префикс $ + название на латинице)

    Массивы результатов(top)


    Массивы результатов - когда одному запросу соответствует список результатов, каждый элемент списка в свою очередь может содержать несколько вложенных элементов. Разберем на примере выдачи Google - она представлена в парсере массивом $serp, для наглядности воспользуемся таблицей, запишем первые 5 результатов выдачи:
    Ссылка($link)Анкор($anchor)Сниппет($snippet)
    http://www.speedtest.net/Speedtest.net by Ookla - The Global Broadband Speed TestTest your Internet connection bandwidth to locations around the world with this interactive broadband speed test from Ookla.
    http://en.wikipedia.org/wiki/Test_cricketTest cricket - Wikipedia, the free encyclopediaTest cricket is the longest form of the sport of cricket. Test matches are played between national representative teams with "Test status", as determined by the ...
    http://www.speakeasy.net/speedtest/Speakeasy Speed TestSaturday 03-May 2014, 11:04:29 AM Your IP: The Speakeasy Speed Test requires Flash v7 or higher. Please update your browser. See Pricing Or Call Today
    http://www.humanmetrics.com/cgi-win/jtypes2.aspPersonality test based on C. Jung and I. Briggs Myers type theoryHumanmetrics Jung Typology Test™ instrument uses methodology, questionnaire, scoring and software that are proprietary to Humanmetrics, and shall not be ...
    http://test-ipv6.com/Test your IPv6.This will test your browser and connection for IPv6 readiness, as well as show you your current IPV4 and IPv6 address. ... Test your IPv6 connectivity. JavaScript ...

    Каждая позиция выдачи записывается в массив с 3мя вложенными элементами - ссылка($link), анкор($anchor), сниппет($snippet)
    Другой пример - список связанных ключевых слов, который сохраняется в массиве $related:
    Кейворд($key)
    test wwe
    depression test
    test my speed
    wonderlic test
    test personality
    act test
    jiggle test
    bipolar test

    Как видно в данном массиве всего один вложенный элемент - кейворд($key)
    Нумерация элементов массивов начинается с 0, пример доступа к отдельным элементам массива:
    • $serp.0.link - первая ссылка из выдачи
    • $serp.3.anchor - четвертый анкор из выдачи
    • $related.0.key - первый связанный кейворд
    Более подробно про форматирование простых результатов и массивов будет описано ниже

    Просмотр возможных результатов(top)


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

    [​IMG]
    Желтым отмечены результаты общие для всех парсеров:
    • $query - запрос переданный парсеру после форматирования
    • $query.orig - оригинальный запрос(в том виде как он был в файле или в поле ввода запросов)
    • $query.first - первый запрос при использовании опций вложенного парсинга(Parse all results или Parse to level)
    • $info.success - информация об успешности парсинга данного запроса
    • $info.retries - количество использованных попыток для данного запроса
    • $info.stats - статистика работы парсера для данного запроса
    • $pages.$i.data - массив с необработанными ответами от сервера для возможности самостоятельного извлечения дополнительной информации
    Зеленым отмечены результаты доступные только для парсера SE::Google SE::Google:
    • $related.$i.key - массив со списком связанных ключевых слов
    • $ads с элементами $link, $anchor и $snippet - массив со списком объявлений
    • $serp с элементами $link, $anchor и $snippet - массив с основной выдачей поисковика
    Обратите внимание что для массивов явно указывается переменная $i, означающая что элементов несколько и к ним можно обратиться по индексу(номеру позиции) или перебирать каждый элемент в цикле

    Также доступна переменная $response, которая позволяет получать любые переменные запроса, включая все предыдущие редиректы.[​IMG]


    Базовые принципы форматирования(top)


    После того как парсер собрал данные в простых результатах и массивах, их необходимо отобразить(сохранить в файл) в нужном формате. Для удобства и функциональности в A-Parser'е используется Шаблонизатор Template Toolkit. Разберем часто используемые конструкции, для этого воспользуемся инструментом Тестирование шаблонов. Выберем проект для парсера SE::Google SE::Google:
    [​IMG]
    На скриншоте представлены 3 поля:
    • JSON - внутреннее представление данных в парсере
    • Template - шаблон, по которому происходит форматирование результата
    • Результат - непосредственно преобразованные данные по указанному шаблону, именно в таком виде результат будет записан в файл
    Изменяя шаблон мы можем менять вид результата, рассмотрим следующий шаблон:
    [​IMG]
    Выделим основные правила:
    • Обычный текст выводится в результат как есть, без изменений
    • Для вывода простых результатов необходимо в нужном месте вывести переменную содержащую нужный результат с префиксом $
    • Для форматирования массивов используется метод format, о нем немного ниже
    • \n отвечает за перенос строки

    Форматирование массивов, разберем конструкцию:
    Код:
    $serp.format('$link $anchor\n$snippet\n\n')
    Данная запись означает что для массива $serp необходимо вызвать метод format с параметром '$link $anchor\n$snippet\n\n'. Метод format соединяет в строку все элементы массива по шаблону, указанному в параметре, сам шаблон означает Для каждого элемента массива $serp вывести ссылку и анкор через пробел, затем с новой строки вывести сниппет, после чего идет еще два переноса строки, в результате образующих пустую строку между результатами

    Вывод значений переменных в JSON:
    Код:
    $results.json
    Метод .json позволяет выводить данные в JSON формате:
    [​IMG]

    Примеры
    Вывод конкуренции по запросу(количества результатов по запросу) для всех парсеров поисковых систем(SE::Google SE::Google, SE::Yandex SE::Yandex...):
    Код:
    $query: $totalcount\n
    Результат:
    Код:
    test: 3910000000
    viagra: 278000000
    окна пвх: 3220000
    ...

    Вывод ссылок с выдачи поисковых систем:
    Код:
    $serp.format('$link\n')
    Результат:
    Код:
    http://www.speedtest.net/
    http://www.speakeasy.net/speedtest/
    http://en.wikipedia.org/wiki/Test_cricket
    http://www.humanmetrics.com/cgi-win/jtypes2.asp
    http://html5test.com/
    http://test-ipv6.com/
    ...

    Вывод подсказок поисковых систем:
    Код:
    $results.format('$suggest\n')
    Результат:
    Код:
    тестовый сервер танки онлайн
    тесты гиа по русскому языку
    тесто для блинов рецепт
    тестикула
    тесто для пиццы на молоке
    ...

    Вывод статистики по ключевому слову используя парсер SE::Yandex::WordStat SE::Yandex::WordStat:
    Код:
    тест - 11233054, updated: 30.04.2014
    keywords:
    тест: 11233054
    тест класс: 1319919
    тест драйв: 1051495
    тесты онлайн: 827044
    тесто +для теста: 729279
    тесты 2014: 592935
    ...
    
    additional keywords:
    mail: 20449501
    анекдоты: 1813239
    анекдоты +из россии: 22754
    анекдоты приколы: 9122
    приколы: 4677777
    test: 872855
    ...