https://m.habr.com/ru/company/qrator/blog/513014 - методы защиты и обхода защиты от web-scraping
#scraping #parsing
#scraping #parsing
Хабр
Web scraping вашего сайта: непрошеные гости и как их встречают
На первом в истории полностью виртуальном мероприятии РИТ++, прошедшем в конце мая, инженер Qrator Labs — Георгий Тарасов, рассказал публике про веб-скрейпинг, он же парсинг, популярным языком. Мы...
Цепочки итераторов
Cостыковывая многочисленные итераторы в цепочку, можно
писать чрезвычайно эффективные «конвейеры» обработки данных:
Cостыковывая многочисленные итераторы в цепочку, можно
писать чрезвычайно эффективные «конвейеры» обработки данных:
def integers():
for i in range(1, 9):
yield i
>>> chain = integers()
>>> list(chain)
[1, 2, 3, 4, 5, 6, 7, 8]
def squared(seq):
for i in seq:
yield i * i
>>> chain = squared(integers())
>>> list(chain)
[1, 4, 9, 16, 25, 36, 49, 64]
def negated(seq):
for i in seq:
yield -i
>>> chain = negated(squared(integers()))
>>> list(chain)
[-1, -4, -9, -16, -25, -36, -49, -64]
Ключи в словарях
как {True: 'возможно'} , потому что сравнение всех ключей этого примера,
True , 1 , и 1.0 , будет показывать их как эквивалентные друг другу, и они
все имеют одинаковое хеш-значение
>>> {True: 'да', 1: 'нет', 1.0: 'возможно'}
{True: 'возможно'}
Выражение-словарь {True: 'да', 1: 'нет', 1.0: 'возможно'} вычисляетсякак {True: 'возможно'} , потому что сравнение всех ключей этого примера,
True , 1 , и 1.0 , будет показывать их как эквивалентные друг другу, и они
все имеют одинаковое хеш-значение
>>> True == 1 == 1.0#hash #eq #dict
True
>>> (hash(True), hash(1), hash(1.0))
(1, 1, 1)
Forwarded from Python/ django
https://tenthousandmeters.com/blog/python-behind-the-scenes-12-how-asyncawait-works-in-python/
#asyncio #threads #coroutines
#asyncio #threads #coroutines
Tenthousandmeters
Python behind the scenes #12: how async/await works in Python
Mark functions as async. Call them with await. All of a sudden, your program becomes asynchronous – it can do useful things while it waits for...