JS::TextFromSE

Парсер JS::TextFromSE 2.0

Доступно владельцам лицензии
  • Автор темы Автор темы Support
  • Дата начала Дата начала
А можно здесь
if(response.info.success) {
results.text = response.texts.join("\n");
this.logger.put(`${set.query} - ${response.texts.length} blocks, ${results.text.length} chars`);
results.success = 1;
}
перед сбором массива в строку обработать его регулярками?
response.texts.forEach(); и по всем элементам пройтись как-то регуляркой.
Подскажите если можно и как несколькими последовательно.
 
Можно, для перебора массива используйте map.
Код:
let newTexts = response.texts.map(elem => {
    return elem.match(/.../)[1].replace(/.../, '...').replace(/.../, '...');  // обработка регулярками
});
results.text = newTexts.join("\n");
 
elem.match(/.../)[1] а тут я так понимаю он будет на что-то проверять, или это и есть все что угодно?
Почему-то не заводится=(
И
replace(/.../
в кавычки брать не надо?
replace("/.../"
 
elem.match(/.../)[1] а тут я так понимаю он будет на что-то проверять, или это и есть все что угодно?
.match .replace - это функции JavaScript, о них вы можете более детально почитать на соответствующих ресурсах, например тут. Они показаны для примера, а троеточие тоже указывает на то, что вы можете там написать любые регулярки и данные.
Пример выше демонстрирует как перебрать блоки в цикле, сделать с ними какие-то действия, сформировать новый массив и вывести в виде одной строки. Т.е. то, о чем вы спрашивали выше.
 
Я наверно неправильно спросил

let newTexts = response.texts.map(elem => {
return elem.replace(/a/, '111').replace(/b/, '222').replace(/c/, '333'); // обработка регулярками
});
меня устроит без предварительной проверки на вхождение, а безусловный replace вполне подойдет.
Спасибо.
 
Этот парсер актуален? А то переопределения, как указано в инструкции вообще не отображаются.
 
Парсер что то криво стал работать, пришлось заменить 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 но на выходе мусор

VYXzFAT.png
 
пришлось заменить Google Modern на Google
SE::Google::Modern и SE::Google - уже довольно давно один и тот же парсер и никак не отличаются. Поэтому замена одного на другой никак не может влиять на работу данного парсера.
Парсер что то криво стал работать
Данный парсер никак не может сломаться или начать как-то не так работать со временем. Он всего лишь объединяет два стандартных парсера, передавая результаты одного на вход другому.
чистка текста по regex не работает
На скриншоте видно, что вы Конструктором результатов из переменной $text пытаетесь извлечь данные в массив $text. В этом заключается первая ошибка, массив лучше назвать как-то иначе. И в результат вы выводите переменную $text, а не новый массив - это вторая ошибка.
 
Можно актуализировать пресет? Хотелось бы увидеть в совокупности с HTML::ArticleExtractor
 
Вроде так и сделал:
Код:
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
 
Последнее редактирование модератором:
Вы на 0-м уровне подставляете в запросы все подряд из-за неверного шага (переменная step). В SE::Google SE::Google сейчас каждый элемент $serp состоит из 4-х переменных, а не из 3-х, как указано у вас в коде.
А еще лучше использовать флаг (https://a-parser.com/docs/javascript-parsers/class-methods-v1#yield-thisparserrequest)
Код:
resultArraysWithObjects: 1
 
Вы на 0-м уровне подставляете в запросы все подряд из-за неверного шага (переменная step). В SE::Google SE::Google сейчас каждый элемент $serp состоит из 4-х переменных, а не из 3-х, как указано у вас в коде.
А еще лучше использовать флаг (https://a-parser.com/docs/javascript-parsers/class-methods-v1#yield-thisparserrequest)
Код:
resultArraysWithObjects: 1
Я только парсер поменял в исходном коде, поэтому и попросил актуализировать его, тк совсем не разбираюсь в JS.
 
  • Like
Реакции: btr
Перестал работать парсер
Этот парсер никак не может перестать работать, несколькими сообщениями выше описано почему.
Данный парсер никак не может сломаться или начать как-то не так работать со временем. Он всего лишь объединяет два стандартных парсера, передавая результаты одного на вход другому.
 
Назад
Верх