1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 400+ и мы растем!
    Скрыть объявление

Получение ссылок на плагины из Chrome Webstore

Пример парсера для магазина приложений Google

  1. Support Юра
    В статье рассмотрен пример создания парсера для магазина приложений от Google. Не так давно, на форуме A-Parser, один из пользователей задал вопрос, который касался парсинга магазина приложений от Google. Пользователь столкнулся с проблемой, которая заключалась в том, что стандартным способом у него не получалось собрать ссылки на расширения, так как сайт не отдавал нужный контент.
    Проанализировав вопрос пользователи и ознакомившись с ресурсом, возникла идея создания парсера, который может стать примером для получения нужной информации с похожих сайтов.
    Для создания парсера, проведем анализ ресурса. Перейдем по ссылке:
    Код:
    https://chrome.google.com/webstore/search/games?_category=extensions
    здесь мы видим выдачу товаров магазина по списку. Для анализа воспользуемся инструментами для разработчика которые встроен в браузере Ghrome.
    google1.png
    Находим нужный запрос по которому данные передаются в браузер. Для того чтобы увидеть ссылку по которой эти данный приходят, переходим на вкладку "Headers".
    google2.png
    Здесь мы видим нужную нам ссылку и метод которым нужно передавать данные.
    Проанализировав ссылку, мы видим что есть возможность передавать некоторые параметры в её теле. Воспользуемся этим и будем передавать в запросе такие параметры:
    • количество выводимых результатов(назовем count);
    • возможность задавать категорию для поиска(назовем category);
    Ответ нам будет приходить в формате json. Единственный недостаток в том, что json структура будет иметь невалидные символы вначале, которые мы в процессе создания парсера уберем.
    google3.png
    На этом анализ закончен, можно переходить к написанию парсера. Для этого используем возможности A-Parser в части создания js решений.
    1. Определяем параметры которые будем задавать через парсер:
    Код:
    this.editableConf = [
                ['count', ['combobox', 'Count', ['10', '10'], ['20', '20'], ['30', '30'], ['40', '40'], ['50', '50'], ['100', '100']]],
                ['category', ['combobox', 'Category', ['extensions', 'Extensions'], ['themes', 'Themes'], ['apps', 'Apps'], ['app/3-games', 'Games']]]
            ];
    2. В основном методе, создаем запрос для получения json структуры:
    Код:
    let response = yield this.request('POST', 'https://chrome.google.com/webstore/ajax/item?hl=en-US&gl=PE&pv=20170811&mce=atf,pii,rtr,rlb,gtc,hcn,svp,wtd,nrp,hap,c3d,ncr,ctm,ac,hot,mac,fcf,rma&count=' + this.conf.count + '&category=' + this.conf.category + '&searchTerm=' + set.query + '&sortBy=0&container=CHROME&rt=j', {}, {
                decode: 'utf8',
                headers: {
                    'content-length': 0
                }
            });
    3. Обрабатываем ответ и через проход по массиву значений, получаем нужные нам данные. Массив с данными будет иметь следующую структуру:
    google4.png
    Код:
    let jsondata = JSON.parse(response.data.replace(/^\)\]\}'\s*/, ''));
            results.serp = [];
            var a = jsondata[0][1][1];
            for (var i = 0; i < a.length; i++) {
                    let element = a;
                    results.serp.push(element[37], element[1], element[81], element[12], element[22], element[6]);
                }
    4. Делаем данные доступными для вывода:
    Код:
    results: {
                   arrays: {
                       serp: ['Serp list', [['link', 'Линки'], ['name', 'Название расширения'], ['site', 'Адрес сайта'], ['rate', 'Рейтинг'], ['vote', 'Количество отзывов'], ['description', 'Описание расширения']]]
                          }
                   },
                results_format: "$serp.format('$link\\n')",
    В результате получаем готовое решение, которое будет иметь следующий вид:
    google5.png
    Важно отметить, что парсер имеет минимальный набор настроек, так как целью его создание была демонстрация обработки данных, которые приходят в "закрытом" виде. Количество настраиваемых данных и полученных результатов, можно увеличивать в зависимости от поставленных задач.
    Выводы которые можно сделать после создания парсера:
    1. Есть веб ресурсы, которые передают контент в "закрытом" виде. Для их обработки недостаточно указывать адрес ресурса в запросе.
    2. Для правильного составления запроса, необходимо подробно изучить структуру данных, которые приходят в ответ.
    3. Парсер показывает пример обработки данных, которые приходят в формате json.
    4. В примере показаны базовые возможности для работы с ресурсами, контент которых приходит в "закрытом" виде.
    Итог. Проанализировав и протестировав созданный в процессе работы парсер, можно сделать вывод, что он полностью решает задачу которая была поставлена пользователем. На примере работы парсера, было продемонстрировано, как можно получать и обрабатывать данные, когда они приходят в формате json. Пример будет полезным для пользователей, которые сталкиваются с проблемой получения контента, при указание в качестве запроса адреса ресурса.

    Готовый парсер можно скачать здесь