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

Парсер JS::TextFromSE 2.0

Парсинг текстовки по ключу одним заданием

  1. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.377
    Симпатии:
    2.107
  2. shmell

    shmell A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    20 май 2015
    Сообщения:
    27
    Симпатии:
    8
    А можно здесь
    перед сбором массива в строку обработать его регулярками?
    response.texts.forEach(); и по всем элементам пройтись как-то регуляркой.
    Подскажите если можно и как несколькими последовательно.
     
  3. Support Alexander

    Support Alexander A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    27 сен 2019
    Сообщения:
    80
    Симпатии:
    36
    Можно, для перебора массива используйте map.
    Код:
    let newTexts = response.texts.map(elem => {
        return elem.match(/.../)[1].replace(/.../, '...').replace(/.../, '...');  // обработка регулярками
    });
    results.text = newTexts.join("\n");
    
     
    shmell нравится это.
  4. shmell

    shmell A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    20 май 2015
    Сообщения:
    27
    Симпатии:
    8
    elem.match(/.../)[1] а тут я так понимаю он будет на что-то проверять, или это и есть все что угодно?
    Почему-то не заводится=(
    И
    replace(/.../
    в кавычки брать не надо?
    replace("/.../"
     
  5. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.377
    Симпатии:
    2.107
    .match .replace - это функции JavaScript, о них вы можете более детально почитать на соответствующих ресурсах, например тут. Они показаны для примера, а троеточие тоже указывает на то, что вы можете там написать любые регулярки и данные.
    Пример выше демонстрирует как перебрать блоки в цикле, сделать с ними какие-то действия, сформировать новый массив и вывести в виде одной строки. Т.е. то, о чем вы спрашивали выше.
     
  6. shmell

    shmell A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    20 май 2015
    Сообщения:
    27
    Симпатии:
    8
    Я наверно неправильно спросил

    меня устроит без предварительной проверки на вхождение, а безусловный replace вполне подойдет.
    Спасибо.
     
  7. catolseo

    catolseo New Member

    Регистрация:
    24 янв 2018
    Сообщения:
    7
    Симпатии:
    0
    Этот парсер актуален? А то переопределения, как указано в инструкции вообще не отображаются.
     
  8. kaznokrad

    kaznokrad A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    14 июн 2014
    Сообщения:
    41
    Симпатии:
    5
    Парсер что то криво стал работать, пришлось заменить Google Modern на Google, чистка текста по regex не работает, через ResultBuilder регекс
    (\b[A-Z](?:[\w,;:’&'"-\\$]+? ){3,}\w{2,}[.!?]) или (\b[A-ZА-Я](?:\w+[,;:&’'-]? ){3,}\w{3,}[.!?:]) или (\b[A-ZА-Я](?:[,;:-—’()\w]+? ){3,}\w{2,}[.!?])

    Регексы отрабатывают отлично https://regex101.com/r/CzCK3E/2 но на выходе мусор

    [​IMG]
     
  9. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.377
    Симпатии:
    2.107
    SE::Google::Modern и SE::Google - уже довольно давно один и тот же парсер и никак не отличаются. Поэтому замена одного на другой никак не может влиять на работу данного парсера.
    Данный парсер никак не может сломаться или начать как-то не так работать со временем. Он всего лишь объединяет два стандартных парсера, передавая результаты одного на вход другому.
    На скриншоте видно, что вы Конструктором результатов из переменной $text пытаетесь извлечь данные в массив $text. В этом заключается первая ошибка, массив лучше назвать как-то иначе. И в результат вы выводите переменную $text, а не новый массив - это вторая ошибка.
     
  10. btr

    btr A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    11 фев 2013
    Сообщения:
    198
    Симпатии:
    116
    Можно актуализировать пресет? Хотелось бы увидеть в совокупности с HTML::ArticleExtractor
     
  11. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.377
    Симпатии:
    2.107
    Просто замените в коде парсера TextExtractor на ArticleExcractor и пропишите с каких переменных брать результат.
     
  12. btr

    btr A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    11 фев 2013
    Сообщения:
    198
    Симпатии:
    116
    Вроде так и сделал:
    Код:
    class Parser {
        constructor() {
            this.defaultConf = {
                version: '1.3.13',
                results: {
                    flat: [
                        ['key', 'Keyword'],
                        ['link', 'Link'],
                        ['text', 'Text']
                    ]
                },
                results_format: "$key - $link\\n$text\\n\\n",
                search_engine: 'SE::Google',
                SE_Google_preset: 'default',
                SE_Yandex_preset: 'default',
                HTML_ArticleExtractor_preset: 'default'
            };
            this.editableConf = [
                ['SE_Google_preset', ['combobox', 'SE::Google preset']],
                ['SE_Yandex_preset', ['combobox', 'SE::Yandex preset']],
                ['HTML_ArticleExtractor_preset', ['combobox', 'HTML::ArticleExtractor preset']],
                ['search_engine', ['combobox', 'Search engine', ['SE::Google', 'Google'], ['SE::Yandex', 'Yandex']]]
            ];
        }
    
         
        *parse(set, results) {
            return yield* set.lvl == 0 ? this.parseSE(set, results) : this.parseText(set, results);
        }
       
        *parseSE(set, results) {
            this.logger.put(`Use ${this.conf.search_engine}`);
            let SEresp = yield this.parser.request(
                this.conf.search_engine,
                this.conf[this.conf.search_engine.replace(/::/g, '_') + '_preset'],
                set.query
            );
    
            if(SEresp.info.success) {
                let link_count = 0;
                let step = this.conf.search_engine == 'SE::Google' ? 3 : 6;
                for (let i = 0; i < SEresp.serp.length; i += step) {
                    this.query.add(SEresp.serp[i]);
                    link_count += 1;
                }
                this.logger.put(`Added ${link_count} links`);
                results.success = 1;
                results.SKIP = 1;
                return results;
            } else {
                this.logger.put(`Error scraping ${this.conf.search_engine}`);
                results.success = 0;
                return results;
            }
        }
    
        *parseText(set, results) {
            this.logger.put(`Scraping text from ${set.query}`);
            let response = yield this.parser.request('HTML::ArticleExtractor', this.conf.HTML_ArticleExtractor_preset, set.query);
            results.key = set.first;
            results.link = set.query;
            if(response.info.success) {
                //results.text = response.texts.join("\n");
                results.text = response.content;
                this.logger.put(`${set.query} - ${response.texts.length} blocks, ${results.text.length} chars`);
                results.success = 1;
            } else {
                this.logger.put(`${set.query} - error scraping text`);
                results.success = 0;
            }
            return results;
        }
    }
    upload_2022-2-19_16-49-57.png

    но в результатах какая то ерунда:

    upload_2022-2-19_16-50-39.png
     
    #52 btr, 19 фев 2022
    Последнее редактирование модератором: 19 фев 2022
  13. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.377
    Симпатии:
    2.107
    Вы на 0-м уровне подставляете в запросы все подряд из-за неверного шага (переменная step). В SE::Google SE::Google сейчас каждый элемент $serp состоит из 4-х переменных, а не из 3-х, как указано у вас в коде.
    А еще лучше использовать флаг (https://a-parser.com/docs/javascript-parsers/class-methods-v1#yield-thisparserrequest)
    Код:
    resultArraysWithObjects: 1
     
  14. btr

    btr A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    11 фев 2013
    Сообщения:
    198
    Симпатии:
    116
    Я только парсер поменял в исходном коде, поэтому и попросил актуализировать его, тк совсем не разбираюсь в JS.
     
  15. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.377
    Симпатии:
    2.107
    btr нравится это.
  16. kaznokrad

    kaznokrad A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    14 июн 2014
    Сообщения:
    41
    Симпатии:
    5
    Перестал работать парсер
     
  17. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.377
    Симпатии:
    2.107
    Этот парсер никак не может перестать работать, несколькими сообщениями выше описано почему.
     
  18. Support Ilia

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

    Регистрация:
    6 апр 2020
    Сообщения:
    369
    Симпатии:
    64

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