WARC file format library
Project description
PyWarc
Python library for WebArchive's WARC file format manipulation.
How to read a warc file:
from pywarc import WarcReader
warc = WarcReader("my_archive.warc")
# you can also provide your own fp
# warc = WarcReader(sys.stdin.buffer)
blk = warc.get_next_block() # read a block
print(blk.content_length) # get content length
print(blk.headers) # read headers
print(blk.read(10)) # read x bytes
print(blk.read()) # read everything
blk = warc.get_next_block() # read next block
# note that you won't be able to read the previous block anymore
# if the file is not seekable.
print(blk.content_length) # get content length
print(blk.headers) # read headers
# you can also get the content as a stream
stream = blk.get_as_stream()
print(stream.readline()) # for easier manipulation
# or you can even use a for loop to iterate on each blocks
for blk in warc:
print(blk.headers["WARC-Record-ID"])
How to write a warc file:
from pywarc import WarcWriter
from datetime import datetime
import os
# you can start to write as easy as:
# warc = WarcWriter("my_archive.warc")
# but you have more options:
warc = WarcWriter(
"my_archive.warc",
truncate=True, # by default it will appends, but you can choose to truncate it.
software_name="my_program",
software_version="1.0.0",
warc_meta={
"My-Super-Meta": "Hello, World!", # you can set meta to the warcinfo's block.
"conformsTo": None}) # or delete default ones with None.
warc.write_block(
"response",
b"HTTP/1.1 200 OK\r\nHost: example.com\r\nContent-Type: 0\r\n\r\n",
# optional fields:
record_date=datetime.fromisocalendar(2000, 1, 1), # by default it will be set to the current UTC time.
record_id="urn:custom:i_dont_know", # your record identifier, NOTE: it _must_ be a valid URI. (default: uuid.uuid4().urn)
record_meta={"Content-Type": "application/http;msgtype=response"}) # custom meta
# if your object is too big to be in memory
# you can write it in several calls:
with open("hypothetical_file.txt", "rb") as fp:
size = fp.seek(0, os.SEEK_END)
fp.seek(0, os.SEEK_SET)
# please note that this implies that if an error occurs at this point,
# the archive will be truncated and so if you reopen this file for writing,
# all subsequent data will be corrupted.
warc.start_block("my_custom_type", size)
for l in fp:
warc.write_block_body(l)
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
pywarc-0.1.1.tar.gz
(18.6 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
pywarc-0.1.1-py3-none-any.whl
(21.2 kB
view details)
File details
Details for the file pywarc-0.1.1.tar.gz.
File metadata
- Download URL: pywarc-0.1.1.tar.gz
- Upload date:
- Size: 18.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d432d2acd90c81911b879c3479bd50da4365a81f6db4a8fb1ad59b565ee4a9c5
|
|
| MD5 |
773d2bf0ce66c7ce093bfebb4637fbe0
|
|
| BLAKE2b-256 |
1a8f48a5d62d367d4df31492346ddab87f5ef29b10e4545f490376b184300753
|
File details
Details for the file pywarc-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pywarc-0.1.1-py3-none-any.whl
- Upload date:
- Size: 21.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0727ba9f4ae38c402871a8e46f3d2683fc168a8d5cfeaa4a9ff26833c913877b
|
|
| MD5 |
553fe12d11737c7d804037a2289ba6d4
|
|
| BLAKE2b-256 |
2289c3753ce57af3a075079b73e44c5413626747fd71382085dad7dc70f87c5a
|