Comments 7
В наш питоновый век эта задача решается скриптом на 62 (специально посмотрел, и это левой задней ногой написано, можно ужать вполовину) строки. У меня такой скрипт мониторит появление билетов на концерты определенных авторов.
Логика простейшая — дергаем страницу через requests, опционально выбираем в ней нужное через beautifulsoup4, считаем хэш результата через hashlib, если изменился относительно предыдущего (который храним в базе) — рассылаем в телеграм уведомление всем подписавшимся через тот же requests и обновляем хэш в базе. Запускаем кроном в нужный интервал.
Если не нужно множества подписчиков и получатель известен заранее - можно исключить СУБД и хранить хэш в обычных текстовых файлах или в json-упакованном словаре.
Да, только обычно на этой странице есть ещё ссылки на новости, реклама и прочий меняющийся мусорный контент, вот тут-то и начинаются пляски с бубном. Или будет "мы на вас обиделись, вот вам каптча"
В наш век SPA на странице, которую вы выдернете requests, полезная информация может полностью отсутствовать, и доставать ее придется из API-эндпоинтов, которые, естественно, защищены заголовками, вычисляемыми где-то в глубинах мегабайт джаваскрипта, которые выполняет страница чтобы отобразить то, что вы видите в браузере. Плюс ненулевая вероятность встретить при входе на сайт Cloudflare challenge.
Разумеется, в теории все это можно сделать на чистом Python, даже Cloudflare, но если ресурсов на это нет, то проще взять браузер с удаленным управлением, которые сделает большую часть работы за вас, пускай и ценой нескольких гигабайт RAM.
На моей практике пока не было проблем подобного рода. Коллега в статье парсит изменение рейтинга на хабре, эта задача решается так, как я описал.
А если вам надо скрейпить сложное и страшное — то всегда есть Selenium и pyppeteer. Всё ещё не надо странных внешних ресурсов.
Спасибо за мнение. Хочу отметить, что мониторинг кармы показан лишь как простой пример. Конечно, эту задачу можно решить кодом в несколько строк. Но если попробовать получить данные с более защищенных от парсинга проектов, например с агрегатора авиабилетов Skyscanner, то тут без Selenium или Puppeteer точно ничего не выйдет. Но эти способы не кажутся мне более простыми, чем рассмотренное браузерное расширение с удобным GUI.
Еще, в расширении кроме основных заданий можно с легкостью настроить еще парочку для "прокачивания" recaptcha score и ему подобных - например раз в день искать что-то рандомное в гугле и делать переход на пару-тройку сайтов в результатах поиска
https://github.com/dgtlmoon/changedetection.io - сам пока не пробовал, но выглядит интересно. Базово только парсит html, но можно прикрутить сбоку контейнер с браузером - тогда будет любые странички разбирать.
Настройка мониторинга и отслеживания изменений на сайтах