Перейти к основному содержимому

Поиск по содержимому WARC

В WARC нет встроенного поиска по тексту страниц. Сначала выбирают, что именно нужно найти: адрес, фразу на странице или подборку по всей коллекции.

Адрес или кусок URL​

Это самый быстрый путь, и он не требует чтения тел записей.

pip install warcio

warcio index -f warc-type,warc-target-uri archive.warc.gz \
| jq -r 'select(."warc-type" == "response") | ."warc-target-uri"' \
| grep -F '/news/' \
| sort -u

Если CDX уже опубликован, WARC можно не открывать. Как это сделать на архиве «Эха Москвы» — в статье «Как найти страницу по CDX».

Фраза на страницах​

Сначала HTML-ответы выгружаются в каталог, рядом пишется таблица «имя файла → исходный URL». Скрипт ниже использует только warcio:

import shutil
from pathlib import Path
from warcio.archiveiterator import ArchiveIterator

Path("html").mkdir(exist_ok=True)
i = 0
with open("archive.warc.gz", "rb") as stream, \
open("html/index.tsv", "w", encoding="utf-8") as idx:
for record in ArchiveIterator(stream):
if record.rec_type != "response" or not record.http_headers:
continue
if record.http_headers.get_statuscode() != "200":
continue
if not record.http_headers.get_header("Content-Type", "").startswith("text/html"):
continue
name = f"{i:06d}.html"
with open(Path("html") / name, "wb") as out:
shutil.copyfileobj(record.content_stream(), out)
url = record.rec_headers.get_header("WARC-Target-URI")
idx.write(f"{name}\t{url}\n")
i += 1

Дальше ищет обычный текстовый поиск. rg (ripgrep) показывает файлы, а таблица возвращает адреса:

rg -l "бюджет" html/
rg -l "бюджет" html/ | sed 's#.*/##' | grep -F -f - html/index.tsv

В выборку попадает и меню, и подвал, и текст статьи. Чтобы оставить основной текст, прогоните каталог html/ через извлечение текста.

На архиве в десятки гигабайт выгрузка всех HTML занимает столько же места, сколько весят эти страницы в распакованном виде. Для «Эха Москвы» отдельно опубликован меньший слепок только из HTML: echo.msk.ru_html.zip (77 169 записей в каталоге ZIP на 13.10.2026). Его можно распаковать и искать rg прямо по файлам, без WARC.

Поиск по уже проиндексированной коллекции​

metawarc один раз извлекает текст и потом ищет фразу по каталогу:

metawarc index 'archives/**/*.warc*' --dbfile collection.db --resume
metawarc index-content --dbfile collection.db --text
metawarc search "бюджет" --dbfile collection.db

Поиск metawarc идёт по столбцу текстов в DuckDB, а не по отдельному полнотекстовому индексу: на очень больших коллекциях он медленный. Для исследовательского интерфейса с фасетами есть SolrWayback.

ReplayWeb.page ищет по URL сразу. Полнотекстовый поиск в плеере появляется у WACZ, в который текст уже извлечён. Подробнее — ReplayWeb.page.

Что выбрать​

ВопросИнструмент
Есть ли этот URL?CDX или warcio index
В каких страницах встречается фраза?Выгрузка HTML и rg, либо metawarc search
Нужны меню и вёрстка вместе с текстомВыгрузка HTML
Нужен только текст статьиtrafilatura или metawarc index-content --text

Связанные материалы​