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

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

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

  1. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Ссылку дайте на сайт который хотите спарсить
     
  2. ernet

    ernet A-Parser Pro License
    A-Parser Pro

    Регистрация:
    2 окт 2013
    Сообщения:
    21
    Симпатии:
    0
    Это гуглтранслейт, но мне нужен не перевод, а код страницы, ссылку отправил
     
  3. malexoid

    malexoid A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    7 сен 2015
    Сообщения:
    256
    Симпатии:
    60
    Подскажите плз, как в js парсере иметь возможность гадать рекапчу2?
     
  4. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.529
    Симпатии:
    2.158
    Через this.parser.request, обращаясь к стандартному Util::ReCaptcha2 Util::ReCaptcha2. В качестве запроса нужно передавать sitekey[ПРОБЕЛ]url, где sitekey - это sitekey рекаптчи, url - урл страницы, на которой выдалась рекаптча.
    Пример:
    Код:
    let recaptcha = yield this.parser.request('Util::ReCaptcha2', this.conf.Util_ReCaptcha2_preset, {}, sitekey + ' ' + url);
     
    malexoid нравится это.
  5. malexoid

    malexoid A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    7 сен 2015
    Сообщения:
    256
    Симпатии:
    60
    Как в js парсере сохранять данные для работы, чтобы они были доступны всем потокам во время работы?
    т.е например.
    1. стартует парсер, lvl=0, инициализируем данные, которые будем использовать во всех потоках, создаем потоки через this.query.add(<data>, maxlevel);
    2. для всех потоков с lvl>0 делаем какую-то работу с использованием <данных которые мы инициализировали в п.1.>

    Как сделать красиво? без sql и сохранением данных на диск?
    В Template Toolkit есть такая возможность через global.varname= <data> и эти данные доступны в каждом потоке, а как делать в JS парсере?
     
  6. Forbidden

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

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.793
    объявить переменную перед class, например:
    Код:
    let global = {};
    class Parser {
    ...
    
     
    malexoid и Support нравится это.
  7. autoparts.db

    autoparts.db A-Parser Pro License
    A-Parser Pro

    Регистрация:
    17 мар 2018
    Сообщения:
    37
    Симпатии:
    12
    Добрый вечер.
    Помогите пожалуйста понять логику параметра check_content - как он работает?
    К примеру у меня возможны два варианта валидности прокси и ответа(т.е. хотя бы один из вариантов текста, должен присутствовать на странице), я перечисляю их в check_content как: ['first', 'second'] но всегда получаю content mismatch каждый раз в не зависимости если текст на странице или нет.
    Пробовал и так ['first|second'] и все равно получаю content mismatch, хотя в отладочном окне я вижу, что хотя бы один из вариантов присутствует на странице.
    Встает тогда вопрос: что мне необходим указать в check_content чтобы один из вариантов текста('first', 'second') считались правильными в check_content и прокси сервер не менялся?
    Заранее спасибо за Вашу помощь.

    ПС по всей видимости, это непофиксенный баг, жаль, придется все проверять вручную.
     
    #47 autoparts.db, 14 май 2018
    Последнее редактирование: 14 май 2018
  8. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.529
    Симпатии:
    2.158
    @autoparts.db да, это баг и на данный момент он еще не исправлен.
    Пока что можно вручную (т.е. реализовать цикл) перебирать попытки и проверять контент.
     
  9. johnsmith

    johnsmith A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    13 мар 2013
    Сообщения:
    63
    Симпатии:
    31
    не работает https://a-parser.com/resources/20/ собственно проблема в:
    Код:
    this.query.add(link) // this.query.add(link, 1)
    если ниже сделать this.logger.put(JSON.stringify(this.query));
    тут же выдаст пустой объект, и не будет запущен второй парсер
     
  10. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Здравствуйте. Указанный вам пресет работает.
    Уточните пожалуйста как вы проверяете ?
     
  11. johnsmith

    johnsmith A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    13 мар 2013
    Сообщения:
    63
    Симпатии:
    31
    ввожу любое слово в query, на выходе ожидаю $key - $link\n$text\n\n
    все дефолтные настройки, только галку с прокси снимаю
    бета/1.2.270
     
  12. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    1) this.query.add() работает, это метод который ничего не должен возвращать, поэтому this.logger.put(JSON.stringify(this.query)); и возвращает пустой обьект
    2)Проблема может быть в выдаваемой гуглом каптче. Решается она созданием пресета для SE::Google SE::Google, в котором кол-во попыток будет побольше( например 100 ), и указанием его в настройках JS::TextFromSE. Либо в Search engine выбрать яндекс и указать пресет для него.
     
  13. johnsmith

    johnsmith A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    13 мар 2013
    Сообщения:
    63
    Симпатии:
    31
    оказалось в другом, что через Parser Test он просто не работает, а я изначально только через него проверяю.
     
  14. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    в this.query.add нельзя указать уровень на который добавляется запрос. Можно указать максимальный уровень до которого будет добавляться. Добавляется на следующий уровень, то есть если сейчас set.level == 1, то запрос добавится на второй уровень.
    set.level - это текущий уровень парсинга.
     
    #54 Support Денис, 2 авг 2018
    Последнее редактирование: 2 авг 2018
    johnsmith нравится это.
  15. Ladis

    Ladis A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 авг 2019
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте, скажите, пожалуйста, есть ли какая-нибудь библиотека, чтобы можно было работать с DOM страницы? И возможно ли в парсере добавлять библиотеки?
    Регулярки не подходят для большого количества моих задач.
     
  16. Support Artur

    Support Artur A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    6 апр 2020
    Сообщения:
    172
    Симпатии:
    49
    Добрый день, можно использовать npm-модули cheerio или jsdom, или любые другие npm-модули, которые могут решить Вашу задачу
    Добавлять любой npm модуль можно, установив его в папку aparser/files
    установить можно с помощью команды:
    Код:
    npm i jsdom
    после установки модуль необходимо импортировать в Ваш js файл
    Код:
    const jsdom = require("jsdom");
    Пример парсера, где используется npm модуль mysql
    https://a-parser.com/resources/313/
    Пример c cheer.io
    https://a-parser.com/resources/296/
     
    relay и Ladis нравится это.
  17. saharchuklud

    saharchuklud A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    31 янв 2022
    Сообщения:
    6
    Симпатии:
    0
    Добрый день, не могу найти закономерность с определением местоположения элемента капчи JS парсером. Взял парсер из примера https://a-parser.com/resources/257/.
    Несколько раз читал статью и смотрел видео и вроде бы все просто. Код получился вот таким:

    В итоге на сайт заходит - но капчу не видит :( img-тэг вписал, но есть догадка что проблема в регулярке.
     

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