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

Заголовки WARC без тел записей

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

warcio index пишет по одной JSON-строке на запись. Тела в этот файл не попадают:

pip install warcio

warcio index -f warc-type,warc-target-uri,warc-date,http:status,http:content-type,content-length \
archive.warc.gz > headers.jsonl

Пример строки:

{"warc-type": "response", "warc-target-uri": "https://example.com/about", "warc-date": "2026-06-01T12:00:05Z", "http:status": "200", "http:content-type": "text/html; charset=utf-8", "content-length": "184"}

Сводка по кодам ответа:

jq -r 'select(."warc-type" == "response") | (."http:status" // "none")' headers.jsonl \
| sort | uniq -c | sort -rn

Сводка по MIME-типу:

jq -r 'select(."warc-type" == "response") | ((."http:content-type" // "unknown") | split(";")[0])' headers.jsonl \
| sort | uniq -c | sort -rn

Тот же список URL и типов даёт warchaeology, если установлен бинарник warc:

warc ls -t response archive.warc.gz

Что это не ускоряет​

warcio index всё равно читает gzip-поток целиком: заголовок следующей записи лежит после тела предыдущей. Выигрыш в том, что на диск не пишутся страницы и картинки, а повторные вопросы задаются уже файлу headers.jsonl.

Если индекс CDX или CDXJ уже есть, для описи он быстрее: его можно grep-ать, не открывая WARC. См. поиск по CDX.

Поле content-length в выводе выше — длина блока WARC-записи (HTTP-заголовки вместе с телом), а не размер «чистой» страницы. Для оценки места этого достаточно; для точного размера файла после распаковки смотрите выгрузку.

Когда описи хватает​

  • Проверить, что сбор не состоит из одних ответов 403 и 404.
  • Оценить долю HTML, PDF и изображений до выгрузки медиа.
  • Составить список адресов для цитирования, не распаковывая архив.

Дальше по этой описи выбирают шаг: поиск фразы, выгрузка медиа или фильтрация в меньший WARC.

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