LINUX.ORG.RU

История изменений

Исправление dimuska139, (текущая версия) :

Делал подобную задачу несколько лет назад. Реализовал таким образом:

  • Для получения новых статей (новостей) проверял RSS сайтов (но нет никаких проблем вместо этого смотреть sitemap.xml) и брал оттуда список адресов страниц за последние несколько дней
  • Реализовал шаблон проектирования «стратегия» с правилами парсинга для каждого сайта (стратегию по домену выбирал).
  • Статью сразу публиковать не стоит (т.к. бывают косяки) - нужно в админке сделать возможность отклонять статьи (занося их URL в чёрный список) перед публикацией.
  • Картинки надо скачивать к себе и в тексте статей подменять ссылки. Потому что если у тебя сайт с SSL, а ссылка на картинку http, то юзер в браузере будет видеть красный замок в адресной строке (ну или ещё как-то так будет отображаться ошибка SSL, не суть важно). Можно упростить задачу, если заюзать imgproxy, перед которым воткнуть Nginx, включив кеш картинок, но ссылки в текстах статей всё равно надо подменивать.

Алгоритм работы был следующим:

  • Раз в сутки читал RSS всех сайтов, которые надо парсить, и выбирал оттуда ссылки статьи за последние несколько дней.
  • Циклом проходил по полученному списку и проверял наличие адреса страницы в моей базе данных.
  • Если адреса нет в таблице БД, то запускал парсинг, по домену выбирая нужную стратегию. Из HTML вырезал ненужные теги, скачивал к себе картинки, а в тексте статьи менял ссылки на них на свои.
  • Сохранял статью в таблицу БД, не забыв сохранить адрес источника (в дальнейшем по нему определял, есть у меня такая статья или нет).

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

Исправление dimuska139, :

Делал подобную задачу несколько лет назад. Реализовал таким образом:

  • Для получения новых статей (новостей) проверял RSS сайтов (но нет никаких проблем вместо этого смотреть sitemap.xml) и брал оттуда список адресов страниц за последние несколько дней
  • Реализовал шаблон проектирования «стратегия» с правилами парсинга для каждого сайта (стратегию по домену выбирал).
  • Статью сразу публиковать не стоит (т.к. бывают косяки) - нужно в админке сделать возможность отклонять статьи (занося их URL в чёрный список) перед публикацией.
  • Картинки надо скачивать к себе и в тексте статей подменять ссылки. Потому что если у тебя сайт с SSL, а ссылка на картинку http, то юзер в браузере будет видеть красный замок в адресной строке (ну или ещё как-то так будет отображаться ошибка SSL, не суть важно)

Алгоритм работы был следующим:

  • Раз в сутки читал RSS всех сайтов, которые надо парсить, и выбирал оттуда ссылки статьи за последние несколько дней.
  • Циклом проходил по полученному списку и проверял наличие адреса страницы в моей базе данных.
  • Если адреса нет в таблице БД, то запускал парсинг, по домену выбирая нужную стратегию. Из HTML вырезал ненужные теги, скачивал к себе картинки, а в тексте статьи менял ссылки на них на свои.
  • Сохранял статью в таблицу БД, не забыв сохранить адрес источника (в дальнейшем по нему определял, есть у меня такая статья или нет).

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

Исходная версия dimuska139, :

Делал подобную задачу несколько лет назад. Реализовал таким образом:

  • Для получения новых статей (новостей) проверял RSS сайтов (но нет никаких проблем вместо этого смотреть sitemap.xml) и брал оттуда список адресов страниц за последние несколько дней
  • Реализовал шаблон проектирования «стратегия» с правилами парсинга для каждого сайта (стратегию по домену выбирал).
  • Статью сразу публиковать не стоит (т.к. бывают косяки) - нужно в админке сделать возможность отклонять статьи (занося их URL в чёрный список) перед публикацией.

Алгоритм работы был следующим:

  • Раз в сутки читал RSS всех сайтов, которые надо парсить, и выбирал оттуда ссылки статьи за последние несколько дней.
  • Циклом проходил по полученному списку и проверял наличие адреса страницы в моей базе данных.
  • Если адреса нет в таблице БД, то запускал парсинг, по домену выбирая нужную стратегию.
  • Сохранял статью в таблицу БД, не забыв сохранить адрес источника (в дальнейшем по нему определял, есть у меня такая статья или нет).

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