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

Вопрос по JS парсерам

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

  1. worker

    worker A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    29 июн 2013
    Сообщения:
    21
    Симпатии:
    2
    Добрый день!
    Версия a-parser - последняя beta.

    1. Не выдаёт cookies после выполнения запроса. Код парсера - дефолтный:
    Код:
    const util = require('util');
    
    class Parser {
        constructor() {
            this.defaultConf = {
                version: '0.1.3',
                results: {
                    flat: [
                        ['title', 'HTML title'],
                    ]
                },
                results_format: '$query: $title\\n',
                parsecodes: {
                    200: 1,
                },
                max_size: 200 * 1024,
            };
        }
    
        *parse(set, results) {
            this.logger.put("Start scraping query: " + set.query);
    
            let response = yield this.request('GET', set.query, {}, {
                check_content: ['<\/html>'],
                decode: 'auto-html',
            });
    
            if(response.success) {
                let matches = response.data.match(/<title>(.*?)<\/title>/i);
                if(matches)
                    results.title = matches[1];
               
                this.logger.put('Cookie:' + util.inspect(this.cookies.getAll(), false, null));
            }
           
            results.success = response.success;
    
            return results;
        }
    }
    
    Получаем:
    Код:
    27/04 19:26:33
    
    Parser JS::test::0 parse query https://www.google.com/
    27/04 19:26:33
    
    Use proxy http://88.198.36.150:42873
    27/04 19:26:34
    
    Start scraping query: https://www.google.com/
    27/04 19:26:39
    
    GET(1): https://www.google.com/ - 200 OK (2.65 KB)
    27/04 19:26:39
    
    Cookie:{ version: 1 }
    27/04 19:26:39
    
    Thread complete work
    
    Почему нет других кук?

    2. Поясните, как работать с this.query.add.
    Если у меня в задании есть конструктор запросов, то задача, что добавлена через this.query.add, идёт прямиком в JS parser, мимо конструктора запросов.
    Как вот это понимать:
    "Можно передавать в качестве запроса хэш с параметрами, работает аналогично опции Конструктор запросов" ?
    Дайте развёрнутый пример(или ссылку на парсер, где это показано).
     
  2. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    3.752
    Симпатии:
    1.935
    Выделено в задачу, это баг: https://a-parser.com/threads/6110/

    Данная функция позволяет добавлять в существующую очередь запросов новые запросы.
    В Каталоге есть статьи и примеры с использованием данной функции, например: https://a-parser.com/resources/130/, https://a-parser.com/resources/264/
    Нет, Конструктор запросов не пропускается.
    Именно так и понимать, как написано).
    Если вы подставляете в запросы просто строку, например:
    Код:
    this.query.add('test');
    то при обработке данного запроса эта строка будет содержаться в set.query.
    Если же вы подставляете в запросы обьект, например:
    Код:
    this.query.add({query: "тест", param1: "1111", param2: '2222'});
    то при обработке этого запроса у вас будут доступны переменные set.query, set.param1, set.param2. Т.е. аналогично тому, если бы вы сформировали эти переменные Конструктором запросов.

    При этом Конструктор запросов вы можете использовать в обоих случаях. Но во втором примере вы сможете применить его только к query.query, т.к. об остальных переменных на этапе создания пресета ничего не известно.
     
  3. worker

    worker A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    29 июн 2013
    Сообщения:
    21
    Симпатии:
    2
    Смотрим:
    [​IMG]

    В логе потока 1(т.е. 1й запрос в парсер):
    Код:
    Set: { first: 'http://domain.com', prev: '', lvl: 0, num: 0, query: 'http://domain.com', stats: { success: 0, retries: 0, proxiesUsed: 1, requests: 0, queries: 1 }, index: 'none', url: 'http://domain.com', queryUid: '594228', cookie_jar: { version: 1 }, orig: 'http://domain.com' }
    
    В логе потока 2(запрос, который был добавлен из 1го потока):
    Код:
    Set: { first: 'http://domain.com', prev: 'http://www.domain.com', lvl: '1', num: 1, query: 'http://domain.com|1', stats: { success: 0, retries: 0, proxiesUsed: 1, requests: 0, queries: 1 }, queryUid: 'fcbc15', cookie_jar: { version: 1 }, orig: 'http://domain.com|1' }
    
    Где мои url, index в set для второго потока из конструктора запросов?
     
  4. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    3.752
    Симпатии:
    1.935
    Опция Конструктор запросов на всех уровнях включена?
    [​IMG]
     
  5. worker

    worker A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    29 июн 2013
    Сообщения:
    21
    Симпатии:
    2
    Спасибо, это оно.
     
  6. worker

    worker A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    29 июн 2013
    Сообщения:
    21
    Симпатии:
    2
    Ещё вопрос.
    [​IMG]

    Не показывает в "OverAll Stats" инфу по Retries и HTTP Requests для JS Парсера. Это баг или фича?
     
  7. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    3.752
    Симпатии:
    1.935
    Показ статистики для JS парсеров еще не реализован.
     

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