1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2200+ и мы растем!
    Скрыть объявление

Пресет Подгрузка ссылок через js 1.0

Подробное описание и пример парсинга информации, которая подгружается на странице динамически (AJAX)

  1. Fyn Oleg

    Fyn Oleg A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    21 апр 2015
    Сообщения:
    23
    Симпатии:
    7
  2. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    3.531
    Симпатии:
    1.880
    Данная задача очень часто встречается в обращениях в тех поддержку, поэтому на данном примере покажу как она решается. Здесь необходим комплексный подход.
    1) По данной ссылке, как указано выше, контент действительно подгружается JS скриптом. Но в конце-концов он тоже откуда-то получает данные, а значит делает куда-то запрос. Нам нужно только этот запрос найти, и потом воспользоваться им. Для этого воспользуемся Инструментами разработчика (Ctrl+Shift+I, вкладка Network), которые доступны в браузере Chrome. Откроем вышеуказанную ссылку и проанализируем ее. Мы увидим много различных запросов и ответов. Просмотрев все ответы на предмет нужной нам информации (к примеру здесь можно искать по первому названию: "Cengage Advantage Books..."), находим нужный нам запрос.
    [​IMG]
    2) Проверяем и анализируем найденный запрос. Для начала откроем его в новой вкладке браузера и посмотрим, действительно ли он выдает то, что нам нужно.
    [​IMG]
    Как видим - да, есть название книги и ссылка на нее (выделены зеленым), а также много другой информации. Если внимательно приглядеться - можно увидеть, что это данные в формате JSON. Убедиться в этом можно, подставив в полученные данные в Template tester в A-parser'е и нажав кнопку Pretiffy JSON (выделена зеленым квадратом).
    [​IMG]
    На рисунке, кстати, отображен пример вывода авторов через переменные из масива JSON.
    3) Но вернемся к нашей начальной ссылке. Как видим это была только первая страница, на которой только 10 результатов. А как быть если нужны все остальные? Анализируем найденный ранее запрос:
    Если вместо выделенной жирным 1 поставить 2, и открыть эту ссылку в браузере - то увидим, что выдаваемые данные и есть то что нам нужно (2-я страница) в уже знакомом нам JSON. Отлично, теперь осталось все это загрузить в A-parser.
    4) Для парсинга будем использовать Net::HTTP Net::HTTP. Для получения необходимых нам данных из всего контента используем Parse custom result и регулярные выражения. Кстати, регулярное выражение в данном примере необходимо очень внимательно составлять, т.к. в этой выдаче есть еще "relatedItems" (что-то вроде похожих книг) и вместе с ними на первой странице можно получить 18 результатов вместо 10.
    [​IMG]

    Пояснения:
    • На вход подается найденный ранее запрос, но вместо цифры подставляем макрос перебора цифр. В данном примере будут пройдены все страницы с 1-й по 1000-ю.
    • В результате мы получим в файле следующую информацию: Автор - Название книги: Ссылка на страницу. По желанию формат результата можно менять как угодно, изменяя регулярное выражение и собираемые им данные, а также меняя сам Result format. Обратите внимание, здесь еще с помощью Конструктора результатов заменяется "\/" на "/", т.к. в JSON символ "/" экранируется.
    Результирующий файл будет иметь следующий вид:
    На этом все - задача решена)))
    Код:
    eyJwcmVzZXQiOiJodHRwOi8vYS1wYXJzZXIuY29tL3RocmVhZHMvMTY5OSIsInZh
    bHVlIjp7InByZXNldCI6Imh0dHA6Ly9hLXBhcnNlci5jb20vdGhyZWFkcy8xNjk5
    IiwicGFyc2VycyI6W1siTmV0OjpIVFRQIiwiZGVmYXVsdCIseyJ0eXBlIjoib3Zl
    cnJpZGUiLCJpZCI6ImZvcm1hdHJlc3VsdCIsInZhbHVlIjoiJGJvb2tzLmZvcm1h
    dCgnJGF1dGhvciAtICR0aXRsZTogaHR0cDovL3d3dy5jaGVnZy5jb20vJGxpbmtc
    XG4nKSJ9LHsidHlwZSI6ImN1c3RvbVJlc3VsdCIsInJlc3VsdCI6ImRhdGEiLCJy
    ZWdleCI6IlssfFxcW117XCJ0eXBlXCI6Lis/XCJwcmltYXJ5QXV0aG9yXCI6XCIo
    Lio/KVwiLis/XCJ0aXRsZVwiOlwiKC4rPylcIi4rP1wicGRwXCI6XCIoLis/KVwi
    IiwicmVnZXhUeXBlIjoiZyIsInJlc3VsdFR5cGUiOiJhcnJheSIsImFycmF5TmFt
    ZSI6ImJvb2tzIiwicmVzdWx0cyI6WyJhdXRob3IiLCJ0aXRsZSIsImxpbmsiXX1d
    XSwicmVzdWx0c0Zvcm1hdCI6IiRwMS5wcmVzZXQiLCJyZXN1bHRzU2F2ZVRvIjoi
    ZmlsZSIsInJlc3VsdHNGaWxlTmFtZSI6IiRkYXRlZmlsZS5mb3JtYXQoKS50eHQi
    LCJhZGRpdGlvbmFsRm9ybWF0cyI6W10sInJlc3VsdHNVbmlxdWUiOiJubyIsInF1
    ZXJ5Rm9ybWF0IjpbIiRxdWVyeSJdLCJ1bmlxdWVRdWVyaWVzIjpmYWxzZSwic2F2
    ZUZhaWxlZFF1ZXJpZXMiOmZhbHNlLCJpdGVyYXRvck9wdGlvbnMiOnsib25BbGxM
    ZXZlbHMiOmZhbHNlLCJxdWVyeUJ1aWxkZXJzQWZ0ZXJJdGVyYXRvciI6ZmFsc2V9
    LCJyZXN1bHRzT3B0aW9ucyI6eyJvdmVyd3JpdGUiOmZhbHNlfSwiZG9Mb2ciOiJu
    byIsImtlZXBVbmlxdWUiOiJObyIsIm1vcmVPcHRpb25zIjpmYWxzZSwicmVzdWx0
    c1ByZXBlbmQiOiIiLCJyZXN1bHRzQXBwZW5kIjoiIiwicXVlcnlCdWlsZGVycyI6
    W10sInJlc3VsdHNCdWlsZGVycyI6W3sic291cmNlIjpbMCxbImJvb2tzIiwibGlu
    ayJdXSwidHlwZSI6InN0cmluZ1JlcGxhY2UiLCJhcnJheSI6ImJvb2tzIiwic2Vh
    cmNoIjoiXFwvIiwicmVwbGFjZSI6Ii8iLCJ0byI6ImxpbmsifV0sImNvbmZpZ092
    ZXJyaWRlcyI6W119fQ==
     
    relay, Support Ilia, zbest и 8 другим нравится это.
  3. Fyn Oleg

    Fyn Oleg A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    21 апр 2015
    Сообщения:
    23
    Симпатии:
    7
    Очень круто! Спасибо!
     
    Support нравится это.

Поделиться этой страницей