MassArticleParser - массовый парсинг статей. Один парсер для всех сайтов.

JakoKruzo
На сайте с 04.06.2008
Offline
158
#71

Mrtrick, ваши предложения получил. Обдумаю, как лучше, и сделаю.

главная проблема это правка thread_events.txt и events.txt, например когда мне нужно какие то функции отключить перед сохранением статьи, то там уже можно запутаться :)

Согласен, и у меня уже есть кое-какие идеи на счёт этого :) Сделаю в настройках возможность указать, какие функции выполнять, а какие нет.

JakoKruzo
На сайте с 04.06.2008
Offline
158
#72

Обновление 2.1.4.

Добавлены возможность указывать выборочные настройки (галочка "custom settings") и возможность включения-отключения работы отдельных частей скриптов в events.txt и thread_events.txt (галочка "tagged scripts") .

Выборочные настройки нужны для удобства при частом изменении отдельных настроек. Можно указывать хоть одну настройку, а можно хоть все.

Выборочные настройки либо заменяют основные, либо их значения добавляются к значениям основных, для чего нужно указать плюс в начале значения настройки:

При редактировании выборочных настроек можно самому в таблицу вписывать имена настроек, а можно нажать правой кнопкой мыши и выбрать из списка. Данные сохраняются в момент закрытия формы (через крестик тоже) и при смене, добавлении пресета. Для удаления настройки выделите всю строку и нажмите Delete на клавиатуре.

Tagged scripts: тут ставим галочки, какие блоки скрипта включить. Если галочка Tagged scripts не стоит, то все блоки работают. А если стоит, то работать будут только те блоки, которые отмечены.

Блоки для пометки скриптов так делаются:

[#УДАЛЕНИЕ_ИМЁН_САЙТОВ]
$output=RemSiteNames($output);
[/УДАЛЕНИЕ_ИМЁН_САЙТОВ]
[#ПРОКСИРОВАНИЕ_ИЗОБРАЖЕНИЙ]
$output=ImgPrx($output);
[/ПРОКСИРОВАНИЕ_ИЗОБРАЖЕНИЙ]

Открывающий тег с решётки начинается: [#Имя блока] , а закрывающий как обычно - [/Имя блока]. Нижний пробел, как в примере, делать не обязательно. Можно любые символы использовать.

Сделал, чтобы файлы настроек лежали в папке settings, а шаблоны в templates. Появилась папка presets для выборочных настроек.

Протокол tls теперь не надо в скрипте прописывать. Он прописан в last_settings.txt: *security_protocol_type=tls12

Появились новые настройки:

*MainBlockDetect=
*DisableAutoTrimTop=0
*DisableAutoTrimBottom=0
*HardTrim=
*DisableAutoHeading=0

Если программа не находит контент, то можно указать html блок, из которого его брать:

*MainBlockDetect=какая-либо строка из основного блока

Можно несколько строк указать через запятую: *MainBlockDetect=какая-либо строка из основного блока,ещё текст

В таком случае контент будет браться из блока, содержащего все указанные строки. Пример:

<div class="c1">
<p>Этот текст есть перед всеми статьями.</p>
<h1>Заголовок статьи</h1>
Текст статьи.
</div>

Настройка: *MainBlockDetect=class="c1"

Если class="c1" есть не только у главного блока, то указываем несколько строк:

*MainBlockDetect=class="c1",Этот текст есть перед всеми статьями

Допустим, что на одних страницах выводится class="c1" , а на других class="c2". Тогда нужно задать настройку так:

*MainBlockDetect={class="c1"},{class="c2"}

Так главным будет назначаться блок, который содержит либо class="c1" , либо class="c2".

Можно указать: *MainBlockDetect={class="c1",текст есть перед},{class="c2",текст есть перед}

Так главным будет назначаться блок, который содержит либо сроку "class="c1"" и строку "текст есть перед", либо строку "class="c2"" и строку "текст есть перед".

*DisableAutoTrimTop=1 - отключает автоматическую подчистку (автообрезку) начала статьи.

*DisableAutoTrimBottom=1 - отключает автоматическую подчистку конца статьи. Эта настройка нужна, если в конце статьи удаляется нужный контент (например, бывает, если статья заканчивается таблицей).

У этих настроек есть расширенная форма. Можно указать начало и конец статьи.

Допустим, нужно достать только текст статьи из этого кода:

<div class="test">
<div class="c1">
Текст статьи.
</div>
<div class="comments">
Комментарии.
</div>
</div>

Ставим:
*DisableAutoTrimTop=1{<div class="c1">}
*DisableAutoTrimBottom=1{<div class="comments">,</div>}

Первая настройка значит, что статья начинается после строки <div class="c1">. Другими словами, статья обрезается сверху по <div class="c1"> включительно. Чтобы <div class="c1"> не удалялся, то надо добавить к настройке {L}: *DisableAutoTrimTop=1{<div class="c1">}{L}

В настройке DisableAutoTrimBottom указано две строки. Это пример ступенчатой обрезки (если нельзя одной строкой задать конец статьи). Сначала с конца статьи ищется <div class="comments">, а потом </div>. В DisableAutoTrimTop тоже можно делать ступенчатую обрезку, но поиск строк идёт с начала статьи.

*DisableAutoHeading=1 - отключает добавление заголовка h1, которое делается, если в статье нет такового.

Есть ещё один, более низкоуровневый способ достать со страницы нужные данные.

*HardTrim={<div class="c1">}-{<div class="comments">,</div>}

В первом блоке {} указывается обрезка сверху, а во втором снизу.

Этот пример аналогичен настройкам:

*DisableAutoTrimTop=1{<div class="c1">}
*DisableAutoTrimBottom=1{<div class="comments">,</div>}

{L} тоже можно добавлять: *HardTrim={<div class="c1">}{L}-{<div class="comments">,</div>}{L}

HardTrim обрезает код всей страницы сразу после его получения, до всех обработок. Поэтому в нём можно задавать html-комментарии, а в DisableAutoTrimTop и DisableAutoTrimBottom нельзя, т.к. комментарии удаляются при обработке страницы. Автообрезка работает для кода статьи, а жёсткая обрезка (HardTrim) работает с кодом всей станицы. Автообрезка работает после жёсткой обрезки, поэтому если она не нужна (а при HardTrim-е она как правило лишняя), её стоит отключить.

---------- Добавлено 26.01.2019 в 14:25 ----------

Для того, чтобы пользоваться новой версией, скопируйте в папку с ней файл activation.dat из папки со старой версией. Либо создайте в папке со старой версией папки presets, settings, templates и скопируйте в неё новый файл MassArticleParser.exe.

JakoKruzo
На сайте с 04.06.2008
Offline
158
#73

Сделал обновление 2.1.4.4. Пофиксил баги. Кто успел скачать обновление 2.1.4, скачайте версию 2.1.4.4.

M
На сайте с 04.10.2013
Offline
82
#74
JakoKruzo:
Обновление 2.1.4.
При редактировании выборочных настроек можно самому в таблицу вписывать имена настроек, а можно нажать правой кнопкой мыши и выбрать из списка.

У меня при нажатии на правую кнопку нет списка с названиями настроек.

Записал видео https://i.imgur.com/dpJvQiF.gifv

P.S обновление мощное, спасибо что прислушивался к пожеланиям и реализовал на высшем уровне!

Здесь (https://imonetizeit.ru/site/referral?hash=e9c994975be66785c950cf8c64a2e4d0) дейтинг со смартлинком, все гео
JakoKruzo
На сайте с 04.06.2008
Offline
158
#75
Mrtrick:
У меня при нажатии на правую кнопку нет списка с названиями настроек.

Нажмите сразу, когда ячейка ещё не выделена, и нет мигающего курсора, а не после перевода ячейки в режим редактирования.

M
На сайте с 04.10.2013
Offline
82
#76
JakoKruzo:
Нажмите сразу, когда ячейка ещё не выделена, и нет мигающего курсора, а не после перевода ячейки в режим редактирования.

Получилось, не сразу понял.

JakoKruzo
На сайте с 04.06.2008
Offline
158
#77

Обновление 2.1.5.

Исправлена ошибка, из-за которой не скачивались изображения, пути которых начинаются с двойного слэша, при https.

В режиме скачивания картинок теперь можно указать белый список расширений:

*downloadimages=all{images,100,100,jpg,gif,png,jpeg}

Так будут скачиваться только изображения с расширениями jpg, gif, png и jpeg.

Появилась настройка: *OriginalCode=1

Она отключает обработку контента (чистку, замену относительных путей на абсолютные и прочее).

Сделал кликабельными "Profile" и "Template" и добавил ссылку "View site list", чтобы открывать соответствующие файлы.

В скрипте появилась возможность вывода статуса потока (работает только в thread_events.txt):

SetStatus('Hello, world!');

Эта возможность полезна в случае, когда, например, после завершения парсинга сайта запускается какая-то долгая функция. Вот пример такой функции - MoveImages. Эта функция создаёт для каждой статьи свою папку и помещает в неё картинки этой статьи. Файл статьи переименовывается в транслит с подстановкой случайной даты: 2018-12-15-nazvanie-statii.htm. Пути изображений меняются. В настройках должно быть включено сохранение статей каждого сайта в отдельную папку: *savetofolders=1 . Вызов этой функции нужно прописать в событии завершения парсинга сайта:

function on_Complete(error){
if(error==1){return();}
MoveImages();
}

JakoKruzo
На сайте с 04.06.2008
Offline
158
#78

В дополнение к функции парсинга тегов изображений написал функцию загрузки изображений. Она скачивает изображения из статьи и заменяет в тегах их пути. Пример использования:

$output=GetAllImages($page_data);
$output=DownloadImages($output,$article_dir+'\images');

M
На сайте с 04.10.2013
Offline
82
#79
JakoKruzo:
В дополнение к функции парсинга тегов изображений написал функцию загрузки изображений. Она скачивает изображения из статьи и заменяет в тегах их пути. Пример использования:

$output=GetAllImages($page_data);
$output=DownloadImages($output,$article_dir+'\images');

Полезная функция, очень пригодилась, вопрос с картинками полностью программа закрыла, да что тут говорить и со статьями тоже :)

JakoKruzo
На сайте с 04.06.2008
Offline
158
#80

Обновление 2.1.6.

Исправил работу настройки badblocksdetect. Она не учитывала сам тег, а только что внутри. Пример:

<div id="test">
This is test.
</div>

Раньше *badblocksdetect=id="test" не сработало бы, а теперь так можно.

В скриптинге:

Исправил работу функции count, которая возвращает кол-во элементов в массиве. Она не работала с массивами, которые начинаются с $$$.

Добавил функции:

indexof(массив, значение) - возвращает номер элемента в массиве;

sort(массив) - сортирует массив. А sort(массив,массив) - сортирует пару массивов (один содержит ключи, а другой - соответствующие элементы) по ключам в первом массиве;

reverse(массив) - изменяет порядок элементов в массиве на обратный;

implode(разделитель, массив) - объединяет элементы массива в строку;

unset(переменная) - удаляет переменную.

Добавил переменные: $article_url, $article_body, $article_title, $article_h, $article_key соответствующие макросам в шаблоне. $article_url в отличие от $page_url в случае включённой настройки urlinurl вернёт очищенный урл.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий