Разрываем интернет на Rust: свой многопоточный веб-краулер за вечер
Краулер это один из тех проектов, где Rust показывает свою истинную мощь. Тысячи одновременных соединений, разбор HTML, работа с очередями и разделяемым состоянием, жесткие требования по памяти. На Python вы быстро упрётесь в GIL, на Go получите хорошую производительность, но на Rust с tokio вы выжимаете из одной машины всё возможное. Сегодня построим краулер, который обходит сайт в несколько потоков, уважает robots.txt, ограничивает глубину, дедуплицирует ссылки, извлекает текст и заголовки страниц и складывает всё в JSONL файл. Это не игрушка. С небольшими допиливаниями вы сможете пихать в него миллионы URL.
Что именно мы строим
Разберёмся, что именно нам нужно от краулера. На вход он получает стартовый URL, максимальную глубину обхода и число параллельных рабочих. Дальше он качает страницы, вытаскивает ссылки из тегов a, фильтрует их по домену, чтобы не убежать на весь интернет, добавляет новые URL в очередь и записывает результат в файл. Главная идея схемы: один поставщик задач, много рабочих, один писатель результатов, и всё это связано каналами mpsc из tokio. Блокирующих вызовов нет, разделяемых мьютексов минимум.
https://uproger.com/razryvaem-internet-na-rust-svoj-mnogopotochnyj-veb-krauler-za-vecher/
Post #534
678

- 🔥 1