Всем привет! Очень давно у меня была идея - получать коротко и по сути сводку новостей из любимых источников, быстро и без рекламы. И я реализовал проект, назвал его Morning_Coffee - потому, что можно быстро быть в курсе пока пьешь кофе. И это совершенно бесплатно.👌
Чтобы попробовать - отправь email со словом газета в теме сообщения на почту public32@yandex.ru , в ответ придет свежий выпуск.👍
🫣Я написал скрипт на Python, который парсит 7 сайтов и собирает все в 3-4 странички в формате pdf. Скрипт запустил на одноплатном компьютере с Линукс. Если прислать письмо на почту public32@yandex.ru со словом газета в теме, то не более, чем через 3 минуты в дневное время или 5 минут в ночное - в ответ придет актуальная газета)) днем она пересобирается в среднем раз в час.
Буду благодарен тем, кто примет участие в тестировании))) даже если все рухнет)) Мне дико интересно как все пройдет))) верю в силу Пикабу)) 😬🙃
Писал код сам и это OpenSource проект. В газете есть ссылка на гитхаб в шапке.
Особая отметка: я не прошу оценить качество кода, не претендую на гуру в программировании или на то, что я первым в мире придумал такой формат))
У меня просто была мечта🥹, я научился парсить сайты и реализовал эту мечту. Купил железо, подключил к сети, накатил софт и хочу поделиться с теми, кому интересно)))
Пишите про ваш опыт и предложения, но пожалуйста давайте делать это конструктивно. Я уже тестировал на друзьях и отловил партию косяков, так что, повторюсь, буду рад обратной связи. А кому понравится - вообще буду счастлив 😍🤗
лл: история о том, как «скриптик на вечер» для отслеживания пары цен мутировал в Palert — сервис с очередями, ретраями и отдельной статьёй расходов на серверы. Без «успешного успеха», зато с граблями. И с продолжением про то, сколько скидок на распродажах настоящих.
В середине 2023-го мне нужно было купить несколько вещей, и я хотел дождаться нормальной цены, а не «−52% от фантазии». Посмотрел готовые сервисы: одни — для селлеров («аналитика выручки конкурентов по нишам» — зачем мне это), другие умерли или следили за одной карточкой через раз. А мне нужно было простое: «скажи, когда подешевеет».
Ну вы поняли. «Да я за вечер скрипт напишу».
Скрипт на Python: headless-браузер открывает карточку, забирает цену, кладёт в CSV. Работало! Целых две недели — пока CSV не превратился в помойку, а маркетплейс не поменял вёрстку.
Дальше классика жанра, все стадии принятия:
мини-сайт на Flask: форма для ссылок, крон, страничка со списком. Уведомлений не было — я просто заходил и смотрел на циферки. Медитация;
пришли друзья: «о, а добавь и мне». Потом друзья друзей;
«личной утилите» вдруг понадобились база, авторизация и личные кабинеты;
крон перестал вывозить — появилась очередь с приоритетами и ретраями;
а потом маркетплейсы заметили, что их читают роботы.
Про последний пункт можно писать отдельную сагу. Площадки регулярно меняют HTML (иногда, кажется, просто чтобы посмотреть, как я страдаю), вводят антибот-защиты, капчи, фингерпринтинг. С той стороны — целые отделы, которые борются с парсерами. С этой — я и упрямство. Счёт в этом матче постоянно меняется, но пока держимся.
Отдельная боль — поиск по названию. Кажется просто: пользователь пишет «PlayStation 5» — показываешь ему PlayStation 5. Ага. В выдаче маркетплейса на этот запрос: кабели, подставки, ремкомплекты, наклейки на геймпад и б/у «в отличном состоянии, торг». Я честно прикрутил AI-классификатор, который оценивал релевантность каждого найденного товара. И он даже работал. А потом его выключил: оказался непредсказуемым. Теперь ту же задачу решают обычные фильтры: обязательные слова, исключения, отсечки. Скучно, зато предсказуемо. Иногда самая полезная AI-фича — это кнопка «выключить AI».
А самое незаметное снаружи — хранение. Цены надо снимать постоянно и помнить долго: график за год по миллионам товаров — это миллиарды записей, которые надо где-то держать и быстро отдавать. На сегодня в базе 12 829 769 480 цен — да, я специально сходил и посчитал ради этого поста. Диски, как выяснилось, не резиновые, а за электричество серверы работать отказываются.
Зачем всё это рассказываю. Вчера я публиковал разбор «как рисуют скидки» — так вот, вся эта машинерия ровно для того и нужна: скидку невозможно проверить без истории цены, а историю нельзя собрать задним числом. Она либо уже есть на момент распродажи, либо её нет.
Да, Palert частично платный (см. пункт про серверы). И да — он просит регистрацию, за что мне в сторе на днях влепили «1 звезда за регистрацию». Понимаю. Но по-другому не выходит: график не существует «готовым» — историю круглосуточно собирают и хранят мои серверы, в карточку она приезжает из вашего аккаунта, и уведомление «цена упала» без аккаунта физически некуда слать. Бесплатный тариф — без привязки карты, история за месяц: для проверки распродажных «скидок» этого за глаза. А чтобы вообще никуда не ходить, есть расширение для браузера — оно рисует график прямо в карточке товара, рядом с тем самым бейджем «−52%».
Следующим постом — обещанные цифры: беру пару тысяч товаров с бейджами скидок текущей распродажи и считаю по истории, сколько скидок настоящих. Спойлер: вам не понравится.
Если тема интересна — поднимите пост: так я пойму, что продолжение с цифрами тут ждут.
Двое дизайнеров собрали веб-шрифт, который показывает человеку один текст, а в исходном коде страницы оставляет совсем другой — грамматически безупречный и полностью бессмысленный. Читатель видит «лошадь», краулер уносит «картошку». Проект называется ShieldFont, код открыт, пользоваться можно уже сейчас.
Лигатуры вместо баррикад
Механика до смешного старая. Лигатуры — обычная типографская фича: шрифт замечает в тексте пару букв вроде «fi» и рисует вместо них один слитный глиф. Исаки Сенеда и Габриэл Абрусиу довели идею до абсурда — их шрифт ловит лигатурой не пару букв, а целое слово, и рисует на экране другое.
Дальше всё выворачивается наизнанку. Подмена делается один раз, при сборке страницы: в HTML уходит уже испорченный текст, а шрифт при отрисовке возвращает читателю оригинал. Скрапер, который просто качает исходник, честно уносит ту версию, которую живой человек не увидит никогда.
Когда лошадь становится картошкой
Вся находка — в том, чем именно подменять. Синонимы и антонимы отпадают: умный фильтр отыграет их назад. Сплошной мусор тоже не годится — страница с бессмыслицей палится на раз. Поэтому ShieldFont меняет слово на слово той же части речи, но из совершенно другого смыслового поля: существительное на существительное, глагол на глагол. Лошадь — на картошку. Предложение остаётся грамматически чистым, а смысл в нём — чужой.
Словарь вылизывали три месяца: почти 12 тысяч ходовых слов, в поставке шрифта насчитали 11 962 пары. У каждого слова три варианта подмены на выбор, издатель может добавить свои и менять карту от абзаца к абзацу — чтобы шрифт нельзя было расшифровать один раз и навсегда.
Что показали замеры
В среднем ShieldFont подменяет 24,5 процента всех слов страницы и 45,8 процента содержательных — тех, что несут смысл. Этого хватает, чтобы смысл поплыл в 31–56 процентах отдельных фрагментов: у новостных текстов ближе к 56, у художественных — около трети.
Главный результат авторы получили на шести публичных скрапер-пайплайнах: больше 90 процентов страниц, которые фильтр качества пропустил бы в обучающую выборку, после обработки шрифтом отбраковываются. А в тех немногих, что всё же проходят, около 20 процентов слов авторы называют мусором для обучения — настоящий английский, без единой опечатки, не утверждающий ничего правдивого. Как формулируют сами создатели: отброшена — значит, они не получили вашу работу; принята — значит, получили что-то неверное.
Чем за это платят
Цена есть, и немалая. Поисковики получают ровно те же байты, что и скраперы: Googlebot проиндексирует подмену, а это прямой удар по трафику. Копипаст со страницы даёт зашифрованный текст, поиск по странице не находит слово, которое читатель видит глазами. Скринридеры на защищённых кусках спотыкаются — совместимость подтверждена только с VoiceOver, NVDA и JAWS ещё в очереди. RSS-лента по умолчанию утекает чистым текстом.
Да и защита не абсолютная. Всё, что читает человек, прочитает и машина, если отрендерит страницу целиком и пропустит картинку через распознавание текста. Но в этом и весь расчёт: по оценке авторов, предварительный рендеринг обходится в 5–13 раз дороже, чем скачивание сырого HTML. На масштабе миллиардов страниц это уже не обход, а другая экономика.
Почему это важно
Годами оборона веба держалась на robots.txt — джентльменском соглашении, которое ИИ-краулеры соблюдают ровно настолько, насколько сами хотят. Потом пошли меры пожёстче: Cloudflare начал по умолчанию резать ИИ-ботов на сайтах клиентов, издатели двинулись в суды, художники — на Glaze и Nightshade, отравляющие изображения. ShieldFont делает тот же разворот для текста: не «не берите», а «берите, только вам это выйдет боком».
Серебряной пули авторы не обещают. Они зовут других делать свои варианты того же принципа — показывать одно людям и другое машинам. Чем больше разных реализаций разбросано по вебу, тем дороже скраперу учиться обходить их все.
ДЛЛ: если вы обратились в чат ЖК с просьбой порекомендовать какого-нибудь специалиста, обязательно проверьте, состоит ли порекомендовавший его сосед в вашем чате.
Надысь в очередной раз полилась вода из кухонной вытяжки (СПб). На плиту и духовку под ним. Это у нас раз в полгода повторяется - стыки вентшахты и плит перекрытия ни у кого не заделаны (дом 2021 постройки) и когда у кого-то в узле водоподготовки начнет течь, поток устремляется в шахту, а потом через спутник к нам.
Необычные звуки привлекли внимание, и оказалось, что это не кот блюет.
Звонок соседке сверху (уже топила год назад, фильтр рванул) выявил ее отсутствие в квартире, время прибытия - 40 мин. Позвонил в УК с докладом.
Визит УК в составе сантехника и дежурной выявил протечку в квартире над нами через этаж - потек стык счетчика и магистрали ГВС (ПВХ). Монтаж был год назад и вот, при отключении горячей воды стрельнуло.
Как самый страдающий от инцидента (льет на столешницу, варочную панель и духовку), решил добраться до виновницы и поинтересоваться перспективами решения проблемы.
Чуйка не повела - решение проблемы застопорилось. УКшный сантехник перекрыл кран ГВС в квартире и произнеся сакраментальное - ебитесь как ищите сантехника в открытых источниках, свалил в закат. Свое нежелание исправлять аварию мотивировал чрезвычайной загруженностью по решению общедомовых задач (частично присутствуют).
Как итог я остался один на один с охуевшей от обстоятельств хозяйкой и ее немым вопросом - а что дальше делать? Меня, по правде говоря, волновал одно - через скока времени она не дай бог по какой-либо нужде снова откроет перекрытый кран и я опять пойму, что это не кот...
С другой стороны, было очевидно, что если хозяйка щас в Яндексе начнет искать сантехника, то ее не только разгрузят косарей на 20-30, но еще с высокой вероятностью нихуя не сделают. А как вообще быть, если по итогу после проеба двух месячных пенсий ее накроет и под стрессом она перестанет открывать дверь, оставит открытым кран - это целый квест. Еще по разговорам с УК я понял, что перекрытие стояка парадной - проблема неординарная и пару часов мне придется скакать с кастрюлями. А вода из вытяжки в кастрюли падает с высоты, летят брызги и водичка просачивается в стыки варочной и столешницы. А она (столешница), пытается разбухать. В общем, я пообещал хозяйке попробовать найти проверенного сантехника через чаты ЖК, в которых состою, и передать ей. Собственно, это была завязка.
Развитие. В ТГ час нашего ЖК (1 121 рыл соседей) кидаю просьбу порекомендовать проверенного сантехника.
Через 5 минут прилетает первый добрый совет.
Благодарю и звоню по номеру... Отвечает мужик, спрашивает суть проблемы (поверхностно), адрес, говорит, что завтра может помочь. Я начинаю объяснять, что заказчик не я и нужно связаться с клиентом... И звонок сбрасывается... Пытаюсь перезвонить - не дозваниваюсь...
И чем бог миловал - через 3 минуты на мой номер начинаются звонки с 3 московских номеров с периодичностью в 2 минуты. Звонящий - "мы вот тут с вами общались, звонок прервался, я перезваниваю..." Только вот голоса звонящих похожие, но разные и по наводящим вопросам им они не в курсе контекста первого разговора, который прервался.
Все кроме замазанных (затопившая соседка) - МСК
Хуясе, думаю. Ищу в поиске по чату соседку с переданным мне контактом сантехника и не нахожу - в домовом чате, где я писал просьбу поделиться им, ее нет. Блочу эту соседку в ТГ, через 3 минуты шквал звонков из Москвы прекращается.
Тут небольшой оффтоп про психологию - мне очень хотелось проверенного сантехника назавтра чтобы решить проблему. И когда прилетело второе сообщение от соседки с номером сантехника, я туда позвонил.
Там диспозиция была другая. Человек сразу спросил, у кого течь. Я объяснил, что у соседки сверху. Он попросил ее телефон (логично). Я дал. Сижу, и думаю... бля... Ищу вторую "соведку" в чате ЖК - хуй! Звоню затопившей меня мадам, объясняю ей весь расклад. Ей второй мастер уже позвонил, договорились на завтра на утро чинить. Но топившая меня мадам оказалась сообразительной - "Вы знаете, Алексей, меня смутило что номер, с которого этот сантехник звонил, отображается как Московский." Кароче, мы с ней договорились, что она звонит туда и отменяет заказ. На случай, если начнут наезжать, говорит, сто пришел сантехник из УК и все починил. Отменила, наутро никто к ней не приехал (отдельно предупредил, что если заказанный и отмененный специалист с утра начнет к ней ломиться, слать его нахер и в квартиру не пускать). Вот такой пердомонокль в социальной инженерии, дорогие Пикабушники.
ПС1. Где искать сантехника? Пошел в УК, долго ругался, мотивируя тем, что не устраняя проблему в индивидуальном узле, они создают длящеюся аварию, приносящую ущерб имуществу собственным жильцам. В результате УКшный сантехник согласился исправить проблему, что на следующий день и выполнил.
ПС2. Как такое возможно? На это есть несколько версий: 1. Сетевые конторы парсят чаты ЖК с большим числом участников. Таких ЖК в 16 городах-миллионниках, по всей видимости, больше 10 000. Но чтобы их парсить, вы должны туда вступить. Это не всегда просто, т. к. иногда для этого требуется не только обойти бота с капчей, но и пройти ручную модерацию. Но тем не менее такой вариант вполне рабочий. 2. С п. 1 есть такая проблема - в собственном чате я месяц назад прокинул тему про ВПН (просто была фраза "MTPProxy") и через 5 минут нам прилетела реклама его от вновь вступившего пользователя. Ту без вариантов про парсинг - в канале 70 делб (включая модераторов Пикабу) (извинити) пользователей и он ни при каких обстоятельствах не мог попасть в списки для парсинга. И это точно не популярные боты-помощники типа ChatKeeperBot - у нас он не установлен. 3. Поэтому есть высокая доля вероятности, что ключевые слова в частных чатах ТГ продаются. Кем (самим ли ТГ или канторами на аутсорсе за комиссию, не важно). Главное - будьте бдительны! Если вы обратившись в чат к своим казалось бы реальным соседям (которые вряд ли вас обманут), будьте готовы их проверить хотя бы на регистрацию в чате, куда вы обратились.
ПС3. Наутро (через 12 часов после обращения в домой чат) прилетел 3-й контакт сантехника от доброй соседки. Тоже не в домовом чате, перезванивать по номеру не стал.
КМК, присутствуют несколько моделей наебки: 1. TG, по всей видимости, сливает ключевые слова из чатов (см. ПС2). Но услуга дорогая, не все, похоже, могут ее себе позволить. 2. Парсинг - 3-й лже-контакт от "соседки" через 12 часов после просьбы очень похож на обычный парсинг без привлечения TG.
Как вывод - будьте, пожалуйста, бдительны. Особенно если вы вызываете специалиста не себе, а маме, соседке или забухавшему другу. Проверьте (позвоните сами как будто это вы и есть заказчик) не только его регистрацию в чате, где он вам написал, но и попытайтесь пообщаться - как правило бот заглючит и начнет нести противоречивые тезисы при обсуждении предметных и сложных обстоятельств вашей проблемы.
ПС4. @Chatlanka просила меня не доебываться до Пикабушников попусту, но тут я попрошу нашего уважаемого @nestandart2886 прокомментировать, сталкивался ли он с похожими ситуациями и что он по этому поводу думает.
Резюме. 1. В общедомовые чаты все-таки стоит обращаться за помощью, если у вас срочная проблема. Это, скорее всего, более эффективный путь, чем обращаться в конторы, выдаваемые в первых списках Яндекса или других поисковиков. Принцип простой - первые места в выдаче поисковиков очень дорогая услуга, которая вряд ли окупается оказанием качественной работы за вменяемую цену. Скорее всего - это сетевые конторы, которые начнут вас разводить на сумасшедшие деньги, причем не факт, устранив реальную проблему.
2. После получения в чате контакта специалиста: 2.1. Проверьте, состоит ли рекомендатель в чате вашего ЖК 2.2. Если состоит, насколько активен он был в общении (если он не общался в чате - не публиковал сообщения), есть повод задуматься. 2.3. Если вы все же решили позвонить этому мастеру, попробуйте подгрузить его лишними обстоятельствами, усложняющими ему ответы по "скрипту". Типа: я еще не до конца определился, нужна ли мне ваша услуга (жду ответа от сантехника от УК). Но позвонил, чтобы узнать ваши условия... При такой формулировке у "специалиста" может поплыть скрипт и он может начать произносить вещи, не соответствующие логике вашего запроса на услугу. Например: "Ну и что, что сантехник от УК еще не решился, я приеду - просто посмотрю, бесплатно." Это 100% спам о обман, не ведитесь на это. Если вы вдруг ляпнули, что согласны на услугу, а потом до вас дошло, что что-то не так, не стесняйтесь перезвонить на номер, по которому вы общались и отменить заказ. Если дозвониться не удалось, ни в коем случае не пускайте "мастера" в квартиру когда он по вашей заявке придет. Через закрытую дверь объясните, что заказ вы отменили и в услугах не нуждаетесь. При слишком назойливой попытке проникнуть к вам, предупредите, что вы вызовете полицию по поводу незаконного проникновение в ваше жилище. Если прессинг вас не прекратится, вызывайте полицию - неизвестный вам человек штурмует вашу дверь и требует ее открыть.
3. Если от соседей ничего кроме спама не пришло, идите в УК. В каждой УК (ТСЖ) должен быть дежурный сантехник (время прибытия на аварию - 2 часа). Формально, УК не обязана устранять повреждения за пределами ее зоны ответственности (как правило после счетчика). Однако вы можете настаивать на том, что вам достоверно не известно, находится ли дефект в зоне ответственности вашей или общедомового имущества. И при прибытии специалиста при известной силе убеждения (и аргументации, что его невмешательство произведет значительный ущерб другим собственникам), а также факта того, что внутриквартирную вашу проблему он будет устранять на коммерческой основе, скорее всего, попробуйте убедить его оказать необходимую вам услугу.
4. Надеюсь, участники Сообщества накинут еще достаточно здравых советов как решать указанную проблему.
Все всех благ.
Пропущенный пост скоро появится - уронил систему, почти восстановил.
Появилась идея сделать определенный срез по информации на портале с учетом всего времени его существования... Этот ресурс давно накопил информации не малое количество. Последний гпт уже неплохо умеет в анализ. Что бы на все это сказал ИИ?
Всю карьеру я собираю данные для других. Пишу парсеры, качаю данные, строю пайплайны. Клиенты знают цены конкурентов в реальном времени, отслеживают остатки на складах, мониторят позиции в выдаче. Всё это — для бизнеса.
Для себя — никогда.
А сценарий знакомый: закинул товар в корзину, думаешь — куплю или нет, приглядываюсь. Многие как и я сам, вообще используют корзину как избранное — висит там десяток товаров неделями, пока не созреешь. Заходишь через неделю, а там уже другая цена. Выросла? Упала? Это вообще скидка или просто так написано?
Хотя идея одного инструмента давно крутилась в голове. Человек с профдеформацией парсера не может просто купить ноутбук-телефон-термос. У него чешутся руки.
Идея витала в воздухе, но всё не складывалось — то времени нет, то задача казалась слишком очевидной, чтобы за неё браться. А потом звёзды сошлись, и я сел писать расширение для Chrome. Без стартап-амбиций — просто чтобы видеть историю цены прямо на странице корзины.
Принцип простой: закидываешь товары в корзину и время от времени заходишь на её страницу — плагин сам соберёт актуальные цены и сохранит локально в браузере. Перед заказом мы всё равно туда заходим, ну или можно кликнуть на кнопку плагина — там всё собрано в одном месте.
Такая схема выбрана не случайно. Централизованно собирать цены всех товаров для всех магазинов — это нереально дорого и никогда не окупится. А так — работает на любом магазине, ничего лишнего.
Сейчас поддерживаются все основные: Озон, Вайлдберриз, Яндекс Маркет и другие. А ещё Tasty Coffee — просто потому что сам покупаю там кофе и хочу знать когда выгоднее брать. Если нужен какой-то конкретный магазин — пишите в комменты, добавлю.
Пользуюсь сам. Несколько раз уже видел, как «скидка» на распродаже — это просто цена, которая была две недели назад, а до этого была ниже. Приятно не быть лохом.
Залил в Chrome Web Store, назвал TonyCartoni. Неожиданно дали Featured badge — видимо, не один я так думаю о ценах на маркетплейсах.