doing something
713 subscribers
918 photos
36 videos
36 files
1.95K links
@smlkw doing something, just my notes to keep updates
Download Telegram
🐛 Silkworm: асинхронний вебскрапінг на Python з Rust під капотом

Потрібно швидко зібрати дані з сайтів без купи шаблонного коду? Знайомтеся з silkworm-rs. Це async-first фреймворк для скрапінгу й краулінгу, побудований на двох швидких бібліотеках:

⚡️ wreq — HTTP-клієнт з імітацією браузерів (TLS/HTTP2-відбитки), редиректами й проксі
🦀 scraper-rs — швидкий парсинг HTML на Rust (CSS-селектори та XPath)

Що всередині:
• Асинхронний рушій з налаштовуваною конкурентністю, пріоритетною чергою, backpressure і таймаутами
• Проста модель Spider / Request / Response. Колбеки можуть повертати і дані, і нові запити
• Middlewares: ротація User-Agent і проксі, cookies, retry з експоненційним backoff, затримки, robots.txt
• Pipelines з коробки: JSON Lines, CSV, SQLite, XML. Як extras: Parquet, Excel, MongoDB, PostgreSQL, Elasticsearch, S3, DuckDB та інші
• Декларативне витягування даних через Item, Text, Attr
• Конвертація HTML → Markdown (зручно для LLM-пайплайнів 🤖)
• Опційно: рендеринг JS-сторінок через Servo і підтримка `.onion`-сайтів
• Запуск на asyncio, uvloop, winloop або trio
• Повна типізація, Python 3.13+, експериментальна підтримка free-threaded 3.14

Приклад, що збирає цитати з пагінацією:


from silkworm import HTMLResponse, Response, Spider, run_spider
from silkworm.pipelines import JsonLinesPipeline

class QuotesSpider(Spider):
name = "quotes"
start_urls = ("https://quotes.toscrape.com/",)

async def parse(self, response: Response):
if not isinstance(response, HTMLResponse):
return
for q in await response.select(".quote"):
text = await q.select_first(".text")
author = await q.select_first(".author")
if text and author:
yield {"text": text.text, "author": author.text}

next_link = await response.select_first("li.next > a")
if next_link:
yield response.follow(next_link.attr("href"), callback=self.parse)

run_spider(QuotesSpider, item_pipelines=[JsonLinesPipeline("quotes.jl")])


Встановлення:

pip install silkworm-rs


📖 Документація: https://bitingsnakes.github.io/silkworm/
⭐️ GitHub: https://github.com/BitingSnakes/silkworm
👍3❤1🤩1
Forwarded from Bender Rodrigueslpe
🔥1
https://www.google.com/maps/@31.5350832,34.4572663,1243m/data=!3m1!1e3?entry=ttu&g_ep=EgoyMDI2MDkyMy4wIKXMDSoASAFQAw%3D%3D

Google has updated Maps, now it's seen how Gaza looks like after Israeli bombardment
💔1😐1💅1
🥴
😁7
TIL
🤣1
🗺
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏9
Помітили цікавий проєкт ESP-SDR. Він перетворює звичайний ESP32 на SDR-приймач без зовнішнього радіомодуля.

Прошивка обходить стандартний Wi-Fi/Bluetooth modem і напряму використовує внутрішній ADC-ланцюг для отримання сирих I/Q семплів базового сигналу. Далі дані передаються на ПК через USB або UART, де їх можна бачити як спектр чи waterfall прямо у браузері через ESP-WebSDR.
Підтримуються ESP32, ESP32-C3, C5, C6, C61, S2, S3 та S31. Діапазон залежить від чіпа: основний діапазон 2,4 ГГц, а ESP32-C5 додатково працює з 5 ГГц приблизно від 4,8 до 6 ГГц. Максимальна частота дискретизації сягає 80 MSa/s при смузі приблизно 13–54 МГц.

Є навіть FFT прямо на ESP32, тому замість величезного потоку I/Q можна передавати вже готові спектральні дані. Проблема саме в пропускній здатності: 80 MSa/s створює близько 2,56 Гбіт/с сирих даних, тому USB та UART не здатні передавати весь потік. Для постійного стрімінгу розробники працюють над версією під ESP32-S31 через Gigabit Ethernet(Хоча в багатьох платах з ESP32-P4 стоїть в базі C6 або C3 і можна об'єднати в теорії)

Цікаво, що проєкт знайшли під час розробки ESPARGOS One, де кілька ESP32 використовуються як багатоканальна SDR-система для виявлення та позиціонування сигналів Bluetooth LE і Zigbee.
По суті, за кілька доларів отримуємо простий SDR-аналізатор 2,4/5 ГГц просто з ESP32, без RTL-SDR чи іншого зовнішнього радіоприймача.

Хата Радіотата
🔥3
Forwarded from Christopher
😁4
Forwarded from Hacker News
A 40ms Go garbage collector pause caused by swap
Article, Comments
🤯1