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

eN_Slon
На сайте с 13.02.2007
Offline
159
#31

Опишите алгоритм получения статьи.

Защиты и т.п. - это бутафория с большего. Просто добавите потом проксятину и реальные браузеры.

---------- Добавлено 19.03.2018 в 12:53 ----------

JakoKruzo:
либо разметка с грубыми ошибками.

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

ЗЫ. интересуюсь не из комерческого интереса. Когда то эту задачу изучал просто.

Парсинг, граббинг, автоматизация всего что вы можете сделать в браузере(и не только) сами. Любое кол-во, любые защиты.
JakoKruzo
На сайте с 04.06.2008
Offline
158
#32

eN_Slon, раскрывать алгоритм я не буду. Скажу только, что сначала я пытался делать парсинг отталкиваясь от блоков текста, но многие статьи, в которых много различных вставок, парсились не целиком. Поэтому я решил пойти другим путём, отталкиваясь от разметки, и сейчас я считаю, что мой алгоритм оптимальный для большинства сайтов.

Больше кривых нежели валидных.

Кривых много, но правильных большинство. Тем более, имеют значения только грубые ошибки, нарушающие иерархию блоков.

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

Сделал обновление 2.0.4.

Теперь можно получать данные из мета-тегов. Например:

Макрос выводящий ключевые слова - [ARTICLE_META_KEYWORDS]

Описание - [ARTICLE_META_DESCRIPTION]

Можно значения любых мета-тегов выводить. Например:

[ARTICLE_META_og:title]

[ARTICLE_META_og:url]

[ARTICLE_META_twitter:title]

[ARTICLE_META_twitter:description]

Ещё сделал, чтобы можно было указывать страницу сайта, с которой начинать обход сайта: site.ru/folder/page.html. В этом примере будут парситься только страницы в папке folder. Чтобы парсились все страницы, надо добавить к урлу {NOT_ROOT}: site.ru/folder/page.html{NOT_ROOT}.

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

Сделал обновление 2.0.5.

В дополнение к {NOT_ROOT} сделал возможность указывать корневую папку: {ROOT:/}. Например, входная страница https://www.site.ru/blog/articles/index.php , а нужно, чтобы парсились статьи не только из /blog/articles/, а со всей папки /blog/. Тогда указывать сайт надо так: https://www.site.ru/blog/articles/index.php{ROOT:/blog/}

Внёс изменения позволяющие парсить web.archive.org.

Сайт указывать так: http://web.archive.org/web/20171004194426/https://www.site.ru/

Веб-архив подставляет ко всем урлам на сайте свой урл: http://web.archive.org/web/20171004194426/https://www.site.ru/page.html

Чтобы урл веб-архива удалялся, надо в settings.txt указать *urlinurl=1

Так от вышеуказанного урла останется только https://www.site.ru/page.html

Это работает не только с урлами веб-архива, но и со всеми урлами вида: http://site1.ru/folder/http://site2.ru.

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

Сделал обновление 2.0.6.

Добавил возможность загрузки файлов изображений с заменой урлов в тегах. Для этого в settings.txt укажите:

*downloadimages=all{images,100,100}

В фигурных скобках указывается имя папки, в которую сохранять изображения, минимальная ширина и высота. Если изображение не скачалось, либо ширина или длина меньше минимального значения, то тег этого изображения удаляется из статьи.

Чтобы загружались только изображения находящиеся на том же домене, что и сайт (не хотлинкинг), надо указать так:

*downloadimages=host{images,100,100}

Чтобы у картинок в src путь начинался со слеша, указываем так:

*downloadimages=all{/images,100,100}

Добавил возможность сохранения логов обхода сайта:

*logs=1

Если вдруг какой-то сайт не парсится, можно посмотреть какие данные присылает сервер.

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

Как спарсить сайты из веб-архива по списку.

Укажите сайты так:

http://web.archive.org/web/20300920134653/site1.com/
http://web.archive.org/web/20300920134653/site2.com/
http://web.archive.org/web/20300920134653/site3.com/

...

Дата в урле не имеет значения. Например, я указываю 2030 год: 20300920134653. Веб-архив автоматически перенаправляет на существующие даты.

JakoKruzo
На сайте с 04.06.2008
Offline
158
#37
XPraptor
На сайте с 15.10.2004
Offline
333
#38
JakoKruzo:
раскрывать алгоритм я не буду

Чего его скрывать то, это стандартный свободный код boilerpipe.

http://boilerpipe-web.appspot.com/ - абсолютно бесплатно и для многих языков есть плагины.

Конечно, лучше полную версию на питоне юзать, но огрызок под php тоже справляется со многими сайтами на ура.

JakoKruzo
На сайте с 04.06.2008
Offline
158
#39
это стандартный свободный код boilerpipe.

Нет, я не использовал каких-либо сторонних разработок.

M
На сайте с 04.10.2013
Offline
82
#40

Купил парсер, очень удобный, с задачей справляется, дергаю текстовку для доров.

Возникли вопросы, автор, к сожалению, проигнорировал почту, либо не заметил.

Пишу здесь свои вопросы

1: Например, мой шаблон выглядит так

[ARTICLE_TITLE] – заголовок страницы.

[ARTICLE_H] – первый заголовок H.

[ARTICLE_BODY] – сама статья.

В случае если одно из условий шаблона не соответствует сайту, например отсутствует на доноре H тег, статья пропустится или сохранится?

2: Паршу в 20 потоков, после того как спарсилось, допустим 18 сайтов, остается только 2 активных потока, может стоит переходить в таком случае к следующим сайтам, чтобы были задействованы все потоки?

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

Здесь (https://imonetizeit.ru/site/referral?hash=e9c994975be66785c950cf8c64a2e4d0) дейтинг со смартлинком, все гео

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