Skip to content

Speed and weight

How long each tool takes on the scoreboards’ pages, how much memory it holds, and how much it installs, measured one way for every tool, as bench/PREREG.md fixes it under “How a second is measured”. Every tool of a table was timed in one run, on one machine, on the same pages; a scoreboard prints no second measured otherwise. Regenerated from commit a6e42e6 by uv run bench/timing.py.

Install size counts every file each package of the tool’s environment installs, bytecode caches left out (for Sluicer, installed editable, the files of its package); packages count them, the interpreter’s pip, setuptools and wheel left out, and metascraper’s every package under node_modules. Peak memory is the process’s peak resident size, the interpreter and every page read into memory included.

WCXB’s test pages

The tools the scoreboard scores, on its 511 pages.

Measured on 2026-09-25 by uv run bench/timing.py wcxb at commit a6e42e6, on macOS-26.6.2-arm64-arm-64bit-Mach-O, Apple M4, 10 cores, 16 GiB of memory: 5 rounds, each running every tool once in a fresh process of its own environment, the order turned by one place each round. A process reads every page once untimed, then times one pass of the extraction call alone.

tool runtime seconds per page seconds for all 511 pages, median (fastest–slowest) pages per second peak memory install size packages
sluicer 0.8.0 Python 3.12.13 0.0020 1.02 (1.01–1.02) 501 90.2 MiB 19.5 MiB 5
trafilatura 2.2.0 Python 3.12.13 0.0269 13.76 (13.74–13.95) 37 168.2 MiB 58.2 MiB 17
metascraper 5.58.1 Node 26.1.0 0.0049 2.51 (2.51–2.52) 204 714.0 MiB 55.5 MiB 125
newspaper4k 0.9.6 Python 3.12.13 0.0570 29.11 (29.03–29.17) 18 217.2 MiB 39.4 MiB 22

Fundus’s news pages

The tools news in many languages scores, on its 263 pages.

Measured on 2026-09-25 by uv run bench/timing.py news at commit a6e42e6, on macOS-26.6.2-arm64-arm-64bit-Mach-O, Apple M4, 10 cores, 16 GiB of memory: 5 rounds, each running every tool once in a fresh process of its own environment, the order turned by one place each round. A process reads every page once untimed, then times one pass of the extraction call alone.

tool runtime seconds per page seconds for all 263 pages, median (fastest–slowest) pages per second peak memory install size packages
sluicer 0.8.0 Python 3.12.13 0.0035 0.91 (0.91–0.91) 290 192.6 MiB 19.5 MiB 5
trafilatura 2.2.0 Python 3.12.13 0.0076 1.99 (1.97–1.99) 132 245.7 MiB 58.2 MiB 17
metascraper 5.58.1 Node 26.1.0 0.0083 2.18 (2.17–2.19) 121 1428.9 MiB 55.5 MiB 125
newspaper4k 0.9.6 Python 3.12.13 0.0572 15.04 (14.99–15.23) 17 331.8 MiB 39.4 MiB 22

The pages extruct’s interface is compared on

The tools moving from extruct scores, on its 520 pages.

Measured on 2026-09-25 by uv run bench/timing.py extruct at commit a6e42e6, on macOS-26.6.2-arm64-arm-64bit-Mach-O, Apple M4, 10 cores, 16 GiB of memory: 5 rounds, each running every tool once in a fresh process of its own environment, the order turned by one place each round. A process reads every page once untimed, then times one pass of the extraction call alone.

tool runtime seconds per page seconds for all 520 pages, median (fastest–slowest) pages per second peak memory install size packages
extruct 0.18.0 Python 3.14.6 0.0520 27.03 (26.85–27.06) 19 314.0 MiB 25.9 MiB 21
sluicer.compat.extruct 0.8.0 Python 3.14.6 0.0369 19.16 (19.08–19.82) 27 329.3 MiB 23.2 MiB 17