JavaScript парсеры: расширенный функционал A-Parser

Тема в разделе "Техническая поддержка", создана пользователем Forbidden, 11 дек 2016.

  1. Forbidden

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

    Документация перенесена в Вики: https://a-parser.com/wiki/js-parsers/

    Примеры

    [​IMG]
    Результат:
    Код:
    https://a-parser.com/: A-Parser - парсер для профессионалов SEO
    Код парсера
    • В конструкторе задаются основные параметры парсера: собираемые результаты, формат результатов, успешный код HTTP ответа, и ограничение по размеру загружаемой страницы
    • В функции парсинга используются следующие возможности:
      • Логирование процесса работы
      • Получение данных по HTTP протоколу, указывается метод, url(запрос), дополнительно указана проверка контента и автоматическое определение кодировки страницы. Работа с прокси, количество попыток и прочие параметры задаются стандартными настройками в интерфейсе парсера
      • Проверка ответа, с помощью регулярного выражения парсится тег title и возвращается результат
    [​IMG]
    Результат:
    Код:
    buy buy baby: https://www.buybuybaby.com/ (<b>Buy Buy Baby</b>)
    buy here pay here: https://en.wikipedia.org/wiki/Buy_Here_Pay_Here (<b>Buy Here Pay Here</b> - Wikipedia)
    buy: http://www.rakuten.com/ (Rakuten.com - Computers, Electronics, Apparel, Home, Sporting ...)
    buy me a boat: http://www.azlyrics.com/lyrics/chrisjanson/buymeaboat.html (CHRIS JANSON LYRICS - <b>Buy Me A Boat</b> - A-Z Lyrics)
    buy buy baby coupon: https://www.retailmenot.com/view/buybuybaby.com (20% Off <b>buybuy BABY Coupon</b>, Free Shipping 2016 - RetailMeNot)
    buying a house: http://www.wikihow.com/Buy-a-House (How to <b>Buy a House</b>: 9 Steps (with Pictures) - wikiHow)
    buy used cars: http://www.autotrader.com/car-topics/used-car-buying.xhtml (<b>Buying</b> a <b>Used Car</b> - <b>Used Car</b> Reviews &amp; News, Compare Used ...)
    buy kratom: http://www.buykratom.us/ (<b>Buy Kratom</b> | Purveyors of Premium Kratom | Get Kratom by Kratora™)
    buy instagram followers: https://www.instabuyagram.com/instagram-followers/ (<b>Buy Followers</b> For <b>Instagram</b> Today at $1.88 | Fast &amp; Safe ...)
    buy sell trade: https://www.buysaleandtrade.com/ (Classified Ads Online that <b>Buy Sell Trade</b> | BuySaleandTrade.com)
    Код парсера
    • В конструкторе задаются названия пресетов для парсеров SE::Google::Suggest SE::Google::Suggest и SE::Google SE::Google, при этом выбор будет доступен в интерфейсе, в настройках парсера JS::Google::FromSnippets
    • В функции парсинга у нас нет вызова HTTP запросов, вместо этого мы напрямую обращаемся к существующим парсерам:
      • Получаем список подсказок по запросу
      • Затем по каждой подсказке в цикле получаем результаты первой страницы выдачи Google, сохраняем в наш результат подсказку и только первую ссылку с анкором
    [​IMG]
    Результат:
    Код:
    a.com - DA: 65; PA: 71; Spam Score: -
    y.com - DA: 42; PA: 51; Spam Score: -
    k.com - DA: 36; PA: 44; Spam Score: -
    aa.com - DA: 90; PA: 73; Spam Score: -
    z.com - DA: 49; PA: 57; Spam Score: -
    v.com - DA: 34; PA: 42; Spam Score: -
    l.com - DA: 42; PA: 51; Spam Score: -
    ab.com - DA: 57; PA: 64; Spam Score: 1
    ae.com - DA: 78; PA: 63; Spam Score: -
    
    Код парсера
    • Используем мьютекс для авторизации в один поток
    • Затем передаем сессию для всех потоков используя внешнюю переменную
    • Разбираем JSON встроенными средствами
    [​IMG]
    Результат:
    Код:
    http://www.aljazeera.com.tr: tr (Turkish)
    http://apple.com: en (English)
    https://ja.wikipedia.org: ja (Japanese)
    http://brasil.gov.br: pt (Portuguese)
    http://a-parser.com: ru (Russian)
    
    Код парсера
    • Используется HTML::TextExtractor HTML::TextExtractor для получения текста
    • Для определения языка страницы используется Яндекс Переводчик
      • Получаем ID
      • Отправляем POST запрос с полученным ID и текстом
    • Чтобы не делать дополнительные однотипные запросы, таблица соответствия кода языка и полного названия встроена в парсер
    • Есть возможность менять некоторые настройки парсера прямо из интерфейса: user agent и использование прокси для TextExtractor'а, обьем и позицию текста, отправляемого на определение
    • Ведется подробный лог работы, в результат можно вывести переменную $error, в которой будет содержаться причина если запрос был неудачным
    [​IMG]
    Код парсера
    • Данный парсер - это пример обьединения парсера поисковой выдачи и парсера текста в одном
    • Есть возможность выбрать ПС: Google или Яндекс
    • Для выбранной ПС и парсера текста можно задать собственные пресеты настроек. Тем самым можно регулировать кол-во ссылок, по которым будет парситься текст, а также настроить парсер текста (задать минимальный размер блока, юзер агент и т.п.) Пример такой настройки:
      [​IMG]
    • В результат выводится ключ, ссылка и текст. Текст никак дополнительно не чистится, можно использовать Конструктор результатов как в обычном парсере текста
    • Алгоритм работы:
      • По ключу из выбранного поисковика парсятся ссылки
      • Полученные ссылки передаются в HTML::TextExtractor для получения текста
      • С помощью this.query.add ссылки распределяются по потоках, для равномерной нагрузки
    [​IMG]

    Код парсера
    • Данный парсер - это пример использования антигейта в JS парсерах
    • Можно парсить без антигейта (если не выбран пресет антигейта, т.е. default)
    • Логика работы данного парсера полностью соответствует стандартным парсерам с антигейтом
    • В результат по-умолчанию выводятся ссылки. Можно так же выводить анкоры, сниппеты и ссылку на кэш
    • Можно указывать сколько страниц выдачи парсить (по-умолчанию 10)
    • При включенном логе задания ведется детальный лог
    • Для работы нужна версия парсера не ниже 1.1.774, т.к. здесь используются функции бана и смены прокси, а также работа с каптчами
    • В будущем планируется добавление функционала по отправке на сервис антигейта уведомления, что каптча была разгадана неправильно - ДОБАВЛЕНО

    TODO:

    • Улучшения редактора(создание файлов, подсветка не сохраненных изменений)
    • Работа с файлами и аккаунтами из парсеров(для файлов использовать node-like api)
    • Экспорт\импорт парсеров

    Вступайте в Skype чат для разработчиков JS парсеров: https://join.skype.com/nMAYI9lpsJ9Z
    Первый пост будет постоянно обновляться, в комментах предлагаю вести обсуждение.
    Также оставляйте свои идеи для примеров, лучшие будут реализованы и выложены здесь.
     
    Последнее редактирование модератором: 14 мар 2017
    btr, kaznokrad, Invest_it и 9 другим нравится это.
  2. Forbidden

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

    • Добавлен пример парсинга Moz.com с авторизацией, парсер сделан на основе этого пресета
    • Добавлены описания мьютексов, работы с куками, и sleep
    • Начиная с версии 1.1.712 query заменять на хэш set который содержит все элементы запроса(запрос, первый запрос, уровень, дополнительные поля и т.п.), для доступа к запросу в текстовом виде теперь необходимо использовать set.query
     
    LmPopo и relay нравится это.
  3. evova

    evova A-Parser Enterprise License A-Parser Enterprise

    Всем добрый день!
    Закралась идея, но я в js не соображаю, но понимаю что теперь с помощью JavaScript парсера можно сделать копирку сайтов (html, картинки, css и т.д.) с полной структурой сайта. Если Forbidden или кто другой сделает, скиньте плиз персет.
     
    Forbidden нравится это.
  4. Support

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

    • Добавлен пример №4, определяющий язык страницы через Яндекс Переводчик
     
    Syrex и relay нравится это.
  5. Forbidden

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

    с версии 1.1.737 добавлен this.query.add
     
    Support нравится это.
  6. Support

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

    • Добавлен пример №5: Парсинг текстовки по ключу одним заданием
     
  7. Kreola

    Kreola Member

    Здравствуйте
    Добавьте пример работы с NET::HTTP (с получение 3-5 каких-то данных) и работой с антигейтом
    Спасибо!
     
  8. evova

    evova A-Parser Enterprise License A-Parser Enterprise

    Вопрос.
    А работает секция headers: {'cookie': 'param'} когда используется cookies.getAll и cookies.setAll (пример с авторизацией)?
    Мне в куку надо добавить доп параметр помимо авторизации (после авторизации).

    У меня не получилось это вместе использовать.

    И как посмотреть что в headers отправляться с запросом?
     
    Forbidden нравится это.
  9. Forbidden

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

    Сегодня будет обновление и пример
     
    evova и relay нравится это.
  10. Forbidden

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

    Добавлен метод установки одиночного cookie: this.cookie.set(host, path, name, value), пример:
    Код:
    this.cookies.set('ya.ru', '/', 'param', 42);
     
  11. evova

    evova A-Parser Enterprise License A-Parser Enterprise

    Обновил версию, но не получилось использовать this.cookies.set
    Зачем нужен параметр path? Они с каждым запросом меняются, как их подставлять?
    Мне просто в куку надо добавить параметры для любых запросов с любыми url.

    Еще раз вопрос.
    Для дебага как мне посмотреть что в headers отправляться с запросом? Какие куки? и др.
     
  12. Forbidden

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

    затем что куки зависят как от домена так и от пути, если на весь домен то просто надо использовать '/'

    в тестовом парсинге иконка с шестеренкой
     
  13. evova

    evova A-Parser Enterprise License A-Parser Enterprise

    Спасибо, за подсказку с шестеренкой и быстрый ответ. Но вопрос по кукам открытый.
    У меня парсер на основе примера с авторизацией, на основе MOZ т.е. cookies.getAll и cookies.setAll

    Доп устанавливаю this.cookies.set, но то что я устанавливаю не передается!!!

    вот мой код (кусок)

    this.cookies.set('ya.ru', '/', 'count', 100);

    let response = yield this.request('GET', set.query, {
    }, {
    decode: 'auto-html',
    });


    В ответе в куках только сид авторизации Cookie: SID=kaiufgjjpj8pl3rhb3jg6ddb03
    а моего нового параметра нет

    Возможно я что то делаю не так! Извините.
     
  14. Forbidden

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

    а домен то какой? ya.ru необходимо поменять на нужный домен
     
  15. evova

    evova A-Parser Enterprise License A-Parser Enterprise

    Нет не такой. Сейчас скину на почту весь пример парсера.
     
  16. evova

    evova A-Parser Enterprise License A-Parser Enterprise

    Спасибо, смотрю в книгу вижу фигу. Все работает!
     
    Support и Forbidden нравится это.
  17. Support

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

  18. Forbidden

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

    С версии 1.1.767 добавлены методы для работы с прокси:
    • this.proxy.next() - сменить прокси, старый прокси больше не будет использован для текущего запроса
    • this.proxy.ban() - сменить и забанить прокси(необходимо использовать когда сервис блокирует работу по IP)
    • this.proxy.get() - получить текущий прокси(последний прокси с которым был сделан запрос)
    • this.proxy.set('http://127.0.0.1:8080', noChange = false) - установить прокси для следующего запроса, параметр noChange необязательный, если задан true то прокси не будет меняться между попытками
     
    evova и Support нравится это.
  19. Forbidden

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

    С версии 1.1.769 для this.request добавлен параметр attempt, который указывает на текущую попытку, при этом встроенный обработчик попыток игнорируется, пример:
    Код:
    yield this.request('GET', 'http://domain.com/', {}, {attempt: 3}); // в логе отобразится что текущий запрос - 3яя попытка
     
    Support и evova нравится это.
  20. Support

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

    • Добавлен пример парсинга Mail.Ru с возможностью использовать антигейт
     
    vipuncle, seowin555, Forbidden и ещё 1-му нравится это.

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