@alst161

Как лучше реализовать проверку на новые URL?

Есть новостной сайт. Надо сделать парсер, который будет проверять каждые например 5 минут на новые новости и добавлять если такие имеются. Новости выводятся с разной периодичностью. Как правильно реализовать проверку на новые? Будем проверять по странице где выводятся последние новости кратко. Был вариант хранить старые ссылки на новости и по ним уже сверять. Но не хочется постоянно тревожить базу.
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Если не в DB то в памяти. Если в памяти то лучше не в slice, а в map имеющей константное время доступа против линейного у slice.
var Urls = make(map[string]struct{}) //самая компактная реализация множества.

func IsNew(url string) bool{
	if _, ok:=Urls(path.Base(url)); ok{ //зачем вам весь url. Берите только базу, это компактней и исключит рерайты
		return false
	}else{
	  /*тривиальная реализация кэша
	  if PresentInDb(url){    //посмотреть в базе
			if len(Urls)>Limit{  //подчистить кэш
				for k,v:=range Urls{
					delete(Urls, k)
					break
				}
			}
			Urls(path.Base(url))=struct{}{}  //подновить кэш
			return false
		}else{
		можно раскомментировать*/
		Urls(path.Base(url))=struct{}{}
		return true
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Для начала перепроверьте, что у целевого сайта нет RSS ленты. Если есть - лучше воспользуйтесь ей.

Как правильно реализовать проверку на новые?

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

Сам парсер я бы вам рекомендовал делать на phantomjs
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы