1 место Универсальный экстрактор™ контента (основной статьи страницы)

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
1. Сначала заново распаковал твой архив и заново скомпиллировал .exe. Попробовал прогнать через readability_example.xmlz, он выдал ошибку, как у коллеги выше:

52465


2. Скопировал содержимое обоих проектов в одноименные файлы и сохранил из своей версии зенно - тот же результат, как у меня выше.

3. Прогнал батник, который странным образом (?) пропарсил мой урл, который я пытался спрятать в скриншоте выше :-) Глюк, или ты его вписал?

Получилось, кажется, что успех рядом:

52466
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
:-) Глюк, или ты его вписал?
Я его вписал :-)

Получилось, кажется, что успех рядом:
Собсно, этот скрин обозначает что парсер работает.

------------------------------------------------

Минутка озарения: до меня сейчас дошло, что в старых версиях ZP нет функционала возврата stdout из кубика запуска программы :-) Именно поэтому у тебя там пустота в нужной переменной и якобы ничего не парсит.

Есть 3 вида решения этой проблемы:
  1. Обновить ZP :-)
  2. Убрать кубик проверки stdout (там где проверяется что результат "SuccessReadability"), добавить кубик проверки что файл из переменной url_filepath существует и ещё проверять, что он не пустой. Можно сделать следующим кодом (накидал на коленке, поставить за место кубика проверки stdout - красная линия должна быть как у него же):
    C#:
    string path = project.Variables["url_filepath"].Value;
    if (File.Exists(path)) {
        string content = File.ReadAllText(path);
    
        if (String.IsNullOrEmpty(content)) {
            throw new Exception("file empty");
        }
    } else {
        throw new Exception("file not found");
    }
  3. Допилить readability_cli.go , чтоб он в случае ошибки выплёвывал ненулевой exit code, но мне сейчас лень этим заниматься))
 
Последнее редактирование:

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
Вот где собака порылась )) Если у меня одного так, то займусь завтра обновлением зп :-) Отпишу, как у меня пройдет с результатами, а то устал уже с парсерами save-for-later всяких возиться, которые свои тэги везде прописывают и ругаются, когда "промышленные объемы запросов" на них шлются :-))
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Если у меня одного так, то займусь завтра обновлением зп
Ну судя по топку - такое только у тебя и предыдущего камрада со старой версией ZP возникло) Именно поэтому и "Debug thread error" скорее всего валилось.

Для начала попробуй второй вариант и отпишись как качество у этого парсера )
 

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
Доброе утро ;-)

Попробовал пункт 2, вышло так:

52488
 

zennoman

Client
Регистрация
14.09.2012
Сообщения
34
Благодарностей
25
Баллы
18
Тоже видел эту ошибку в логе. Но файлы в cache таки создаются, просто потом сразу удаляются в случае неудачной проверки stdout на "SuccessReadability".

Плотно в проблеме ещё не копался (да я и не кодер совсем), поэтому пока тупо перекинул красную ветку от этого кубика к зелёной. :D

В итоге вроде нормально парсит, но на больших объёмах ещё не проверял, может где-то и косячит.

P.S. Хотя, конечно, тоже буду рад, если получится привести всё к работе без костылей. :-)
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Попробовал пункт 2, вышло так:
Дичь какая-то. Попробовал тот же url - у меня всё ок :-)
Покажи скрин кубика "Run program", может там аргументы даже не передаются в старой версии %)

Ну и руками проверь есть ли файл по пути из переменной url_filepath

Плотно в проблеме ещё не копался (да я и не кодер совсем), поэтому пока тупо перекинул красную ветку от этого кубика к зелёной. :D
Ну вообще, да. На крайний случай можно не проверять что запуск программы (Run program) выдаст в ответ SuccessReadability, а просто с кубика запуска программы перекинуть всё на следующий блок:
52504


В случае если парсер ничего не спарсит, то оно само по BadEnd подчистит всё.

Тоже вполне рабочий вариант получается :-)
 

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
Скрин кубика:

52505


А файлы (если мы про временные в папке - cache), как вчера не создавались, так и сегодня. Папки только создаются с названиями доменов, и не удаляются потом.

Может, если с 6-го марта, какие-то изменения были в проекте, скинешь тут новые?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Не! Надо было скрин предыдущего кубика, там где запуск программы ))

А файлы (если мы про временные в папке - cache), как вчера не создавались, так и сегодня
Да ну как так то!

Папки только создаются с названиями доменов, и не удаляются потом.
Это нормально

Может, если с 6-го марта, какие-то изменения были в проекте, скинешь тут новые?
Я ничего не менял )
 

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
52506


Предыдущий кубик :-)
 

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
На крайний случай можно не проверять что запуск программы (Run program) выдаст в ответ SuccessReadability, а просто с кубика запуска программы перекинуть всё на следующий блок
Это тоже попробовал - везде битые результаты лезут. Жду, пока пейпал обменяется...
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Предыдущий кубик :-)
У меня тогда кончились идеи почему такая фигня может быть.

Парсер 100% работает нормально, мы это проверили через запуск bat файла что я скидывал. Проблема скорее всего где-то в различиях на новой и старой зенке.

Проще всего уже походу тогда обновить зенку будет. К слову, если собираешься её обновлять только из-за этого парсера, то вначале можешь демку 7ки поставить и на ней погонять шаблон (исходный! а НЕ тот что мы сейчас наредактировали совместно!), чтоб понять подходит тебе это решение или нет.
 

zennoman

Client
Регистрация
14.09.2012
Сообщения
34
Благодарностей
25
Баллы
18
Убрать кубик проверки stdout (там где проверяется что результат "SuccessReadability"), добавить кубик проверки что файл из переменной url_filepath существует и ещё проверять, что он не пустой. Можно сделать следующим кодом (накидал на коленке, поставить за место кубика проверки stdout - красная линия должна быть как у него же):
C#:
string path = project.Variables["url_filepath"].Value;
if (File.Exists(path)) {
string content = File.ReadAllText(path);

if (String.IsNullOrEmpty(content)) {
throw new Exception("file empty");
}
} else {
throw new Exception("file not found");
}

Для справки: проверил сейчас этот пункт - у меня такой вариант кода вроде отрабатывает нормально и выходит по зелёной ветке дальше. Так что как минимум два решения проблемы для себя нашёл. Ещё раз спасибо за шаблон.
 
  • Спасибо
Реакции: Lord_Alfred

slcor

Client
Регистрация
08.03.2010
Сообщения
25
Благодарностей
13
Баллы
3
А файлы (если мы про временные в папке - cache), как вчера не создавались, так и сегодня. Папки только создаются с названиями доменов, и не удаляются потом.

Убери все пробелы из пути к папке проекта или только к папке кэш путь сделай покороче :-), я тестировал со всей папкой.
readability.xmlz можно не переносить в новый проект, только кубик "run programm" сразу пустить по зеленой ветке, как писали выше, ну или "{-Variable.cmd_stdout-}" == "0"(только не забудь поставить галку на "Записать exit code". Если проект отдельно не запускать, то "debug thread error" не вываливается.

Запускал в ПМ 5.21.1.0, все прекрасно работает, с выше перечисленными исправлениями.
 
  • Спасибо
Реакции: jcknick и Lord_Alfred

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Убери все пробелы из пути к папке проекта
И вправду ведь!
100% в этом и была проблема, потому что я не использовал кавычки при передаче аргументов в Run program.
Для меня как-то привычно и логично, что нужно заменять все пробелы в винде на подчёркивание, на автомате это делаю и даже не думаю :-)
 
  • Спасибо
Реакции: jcknick и slcor

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
Елки-палки, моталки! Только прогуляться вышел, теперь буду вприпрыжку гулять, чтобы это протестить побыстрее!
 
  • Спасибо
Реакции: Koqpe

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113

Zoron

Client
Регистрация
24.09.2014
Сообщения
145
Благодарностей
39
Баллы
28

Убери все пробелы из пути к папке проекта или только к папке кэш путь сделай покороче :-), я тестировал со всей папкой.
readability.xmlz можно не переносить в новый проект, только кубик "run programm" сразу пустить по зеленой ветке, как писали выше, ну или "{-Variable.cmd_stdout-}" == "0"(только не забудь поставить галку на "Записать exit code". Если проект отдельно не запускать, то "debug thread error" не вываливается.

Запускал в ПМ 5.21.1.0, все прекрасно работает, с выше перечисленными исправлениями.
да, тоже хотел написать, на прошлых страницах же писал об этом, сам мучался недавно... ))
 

egormk

Новичок
Регистрация
19.03.2020
Сообщения
7
Благодарностей
0
Баллы
1
Lord_Alfred спасибо тебе за шаблон, подскажи, пожалуйста:
1. Если у меня есть архив сайта, можно ли из него выгрузить все статьи?
2. Сохраняет ли парсер изображения к статьям?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
1. Если у меня есть архив сайта, можно ли из него выгрузить все статьи?
Да, можно, посмотри как в шаблоне это реализовано и натрави на свой архив. Но стоит учесть (что вроде логично), что иногда парсер может ошибаться и нет никакой гарантии, что он всё вытащит корректно.

2. Сохраняет ли парсер изображения к статьям?
В текущем виде - нет. Про парсинг изображений мы обсуждали на первых страницах, нужно или руками парсить "<img src=..." или менять парсер, чтоб он вытаскивал не текстовое представление, а html-код статьи.
 

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
Отпишись обязательно как потестишь
Все супер! Тянет все в текстовые файлы, как надо. Только странно как-то - одним массивом текст, не разбивается на параграфы, как в некоторых ссылках в демо списке.

Теперь более прикладной вопрос, как тянуть только <p> тэги и все <h1><h2> и тп? :-)
 

dpilviv

Client
Регистрация
19.05.2015
Сообщения
68
Благодарностей
5
Баллы
8
Подскажите куда копать?
Может у кого тоже такое?
 

Вложения

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
Теперь более прикладной вопрос, как тянуть только <p> тэги и все <h1><h2> и тп? :-)
Попробовал прописать article.Content, как обсуждалось выше в теме, перекомпиллировал приложение - все равно чисто текст одним массивом.

52580
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Только странно как-то - одним массивом текст, не разбивается на параграфы, как в некоторых ссылках в демо списке.
Вроде уже обсуждали, что это из-за очистки контента в fix content кубике. Там \n\r заменяются.

Теперь более прикладной вопрос, как тянуть только <p> тэги
Через article.Content

А это уже в идеале надо через другой мой конвейер: https://zennolab.com/discussion/threads/konvejer-po-parsingu-baz-kljuchevikov-zagolovkov-statej-ot-gribnika.46636/

Подскажите куда копать?
Может у кого тоже такое?
У тебя и @russya такая же ошибка. Фиг знает почему, подозреваю что .net старый какой-то стоит.

Вот решение "в лоб": открой кубик "cached url path", найди там:
C#:
// массив с недопустимыми символами в имени файла (также есть метод`Path.GetInvalidPathChars()` - для директорий)
IEnumerable<char> invalidFileChars = Path.GetInvalidFileNameChars();
// в кубике "Файлы для загрузки" через запятую сделана загрузка нескольких файлов, поэтому стоит заменять этот символ тоже
invalidFileChars = invalidFileChars.Append(',');
И замени на:
C#:
// массив с недопустимыми символами в имени файла (также есть метод`Path.GetInvalidPathChars()` - для директорий)
List<char> invalidFileChars = Path.GetInvalidFileNameChars().ToList();
// в кубике "Файлы для загрузки" через запятую сделана загрузка нескольких файлов, поэтому стоит заменять этот символ тоже
invalidFileChars.Add(',');
Всё должно тогда заработать и не будет ошибки "Не содержит определения для Append".
 

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Попробовал прописать article.Content, как обсуждалось выше в теме, перекомпиллировал приложение - все равно чисто текст одним массивом.
я ж выше написал:
Вроде уже обсуждали, что это из-за очистки контента в fix content кубике. Там \n\r заменяются.
 

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
я ж выше написал:
article.Content // контент с html-тегами

Я про то, что ни одного html-тега нет. Или я что-то не понимаю?

Получается что результат тот же, что и article.TextContent // текстовый контент без тегов
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Я про то, что ни одного html-тега нет. Или я что-то не понимаю?
Должны быть теги :-) Попробуй удалить скомпилированный exe и перекомпилировать заново.
Ну и кубик fix content временно отключи.
 
  • Спасибо
Реакции: jcknick

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 942
Благодарностей
4 334
Баллы
113

jcknick

Client
Регистрация
10.05.2013
Сообщения
154
Благодарностей
9
Баллы
18
Должны быть теги :-) Попробуй удалить скомпилированный exe и перекомпилировать заново.
Ну и кубик fix content временно отключи.
Заработало наконец-то. Теперь надо к нему чистку тегов привязать и вообще гут. Заметил, правда, что он некоторые тексты все-таки режет, но что уж тут, либо скорость, либо качество :-)

А как, ты говорил, он обновляться будет? За счет какой-то внешней библиотеки?

Update:

400 текстов за 20 минут - найз :D
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)