Skip to main content

Convert WARC to ZIM

Project description

warc2zim

CI Docker Build Status codecov CodeFactor

warc2zim provides a way to convert WARC files to ZIM, storing the WARC payload and WARC+HTTP headers separately.

Additionally, the ReplayWeb.page is also added to the ZIM, creating a self-contained ZIM that can render its content in a modern browser.

Usage

Example:

warc2zim ./path/to/myarchive.warc --output /output --name myarchive.zim -u https://example.com/

The above will create a ZIM file /output/myarchive.zim with https://example.com/ set as the main page.

Installation

python3 -m venv ./env  # creates a virtual python environment in ./env folder
./env/bin/pip install -U pip  # upgrade pip (package manager). recommended
./env/bin/pip install -U warc2zim  # install/upgrade warc2zim inside virtualenv

# direct access to in-virtualenv warc2zim binary, without shell-attachment
./env/bin/warc2zim --help

# alternatively, attach virtualenv to shell
source env/bin/activate
warc2zim --help
deactivate  # unloads virtualenv from shell

URL Filtering

By default, only URLs from domain of the main page and subdomains are included, eg. only *.example.com urls in the above example.

This allows for filtering out URLs that may be out of scope (eg. ads, social media trackers).

To specify a different top-level domain, use the --include-domains/ -i flag for each domain, eg. if main page is on a subdomain, https://subdomain.example.com/ but all URLs from *.example.com should be included, use:

warc2zim myarchive.warc --name myarchive -i example.com -u https://subdomain.example.com/starting/page.html

To simply include all urls, use the --include-all / -a flag:

warc2zim myarchive.warc --name myarchive -a -u https://someother.example.com/page.html

Custom CSS

--custom-css allows passing an URL or a path to a CSS file that gets added to the ZIM and gets included on every HTML article at the very end of </head> (if it exists).

See warc2zim -h for other options.

ZIM Entry Layout

The WARC to ZIM conversion is performed by splitting the WARC (and HTTP) headers from the payload.

For response records, the WARC + HTTP headers are stored under H/<url> while the payload is stored under A/<url>

For resource records, the WARC headers are stored under H/<url> while the payload is stored under A/<url>. (Three are no HTTP headers for resource records).

For revisit records, the WARC + optional HTTP headers are stored under H/<url>, while no payload record is created.

If the payload A/<url> is zero-length, the record is omitted to conform to ZIM specifications of not storing empty records.

Duplicate URIs

WARCs allow multiple records for the same URL, while ZIM does not. As a result, only the first encountered response or resource record is stored in the ZIM, and subsequent records are ignored.

For revisit records, they are only added if pointing to a different URL, and are processed after response/revisit records. A revisit record to the same URL will always be ignored.

All other WARC records are skipped.

i18n

warc2zim has very minimal non-content text but still uses gettext through babel to internationalize.

To add a new locale (fr in this example, use only ISO-639-1):

  1. init for your locale: python setup.py init_catalog -l fr
  2. make sure the POT is up to date python setup.py extract_messages
  3. update your locale's catalog python setup.py update_catalog
  4. translate the PO file (poedit is your friend)
  5. compile updated translation python setup.py compile_catalog

License

GPLv3 or later, see LICENSE for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

warc2zim-1.4.3.tar.gz (281.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

warc2zim-1.4.3-py3-none-any.whl (279.1 kB view details)

Uploaded Python 3

File details

Details for the file warc2zim-1.4.3.tar.gz.

File metadata

  • Download URL: warc2zim-1.4.3.tar.gz
  • Upload date:
  • Size: 281.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for warc2zim-1.4.3.tar.gz
Algorithm Hash digest
SHA256 8baccfeed3fccbd3e33cea24f4a07af5e906dca5e2f497cf07ff1a87d8ac5fc3
MD5 7bdcc58678aac7bc0116fd489c120f1b
BLAKE2b-256 c2b275290896989efd15d0d17f6534cd5f5079bd39778d72273a61120cc49137

See more details on using hashes here.

File details

Details for the file warc2zim-1.4.3-py3-none-any.whl.

File metadata

  • Download URL: warc2zim-1.4.3-py3-none-any.whl
  • Upload date:
  • Size: 279.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for warc2zim-1.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d1d3f46d3130fa5871feb9b043d9926b2bfd0996399decbed810ce1fe30d2fd2
MD5 f9f3bcd110dd74be3150e245a82e01bf
BLAKE2b-256 2f680959d8b9feabe34ccf64af4f52b22c59948d4d4913c5bf7a415b4634f0f6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page