WebScraper-Caller
Small CLI that reads a JSON file of objects, calls render-and-parse on
each object's url, and records the resulting output file paths back into
the JSON for later use. The only field it cares about is url — everything
else is optional and passed through untouched.
Installation
pip install scrape-applied-links
playwright install chromium
This installs the scrape-applied-links command along with its
render-url dependency (which provides render-and-parse).
Installing from source instead:
pip install -e .
playwright install chromium
Input format
The tool only requires a url field on each object — everything else is
optional and simply passed through untouched. It accepts either of two
shapes for the input file:
A flat list of objects, each needing nothing but a url:
[
{ "url": "https://example.com/careers/123" },
{ "url": "https://example.com/careers/456" }
]
An object mapping arbitrary labels (e.g. dates) to lists of objects — useful if you want to group entries, such as by the date they were scraped:
{
"2026-09-16": [
{ "url": "https://example.com/careers/123" },
{ "url": "https://example.com/careers/456" }
]
}
Objects can carry any extra fields you like (company, title,
description, etc.) — they're ignored by this tool and left as-is. If a
company field is present it's shown in log output while processing, but
it isn't required.
| Field | Type | Required | Notes |
|---|---|---|---|
url |
string | yes | The page passed to render-and-parse. Objects without a url are skipped entirely. |
| anything else | any | no | Passed through untouched. |
After an object is processed, this tool adds two fields to it:
| Field | Type | Description |
|---|---|---|
rendered_page |
string | Path to the rendered_page_N.json file written by render-and-parse for this url. |
parsed_page |
string | Path to the parsed_page_N.json file written by render-and-parse for this url. |
Usage
scrape-applied-links [json_file] [options]
json_file(optional, positional) — path to the input JSON file (either input shape described above). Defaults tolinks_applied_by_date.jsonin the current directory.
Options
| Flag | Description |
|---|---|
--dry-run |
List the URLs that would be processed without actually calling render-and-parse. |
--force |
Re-scrape jobs that already have a rendered_page/parsed_page recorded. Without this flag, jobs already processed are skipped. |
--output-dir <dir> |
Directory where render-and-parse writes its rendered_page_N.json / parsed_page_N.json files. Defaults to the current directory. |
Examples
Process the default file:
scrape-applied-links
Preview which URLs would be scraped, without calling anything:
scrape-applied-links --dry-run
Re-run and re-scrape every job, even ones already processed:
scrape-applied-links --force
Use a different input file and write render output to a subfolder:
scrape-applied-links my_links.json --output-dir out/
What it does
- Loads the JSON file (a flat list or a label-keyed object of lists) and
collects every object that has a
url. - Skips objects that already have a
rendered_pagevalue, unless--forceis passed. - For each remaining object, runs
render-and-parse <url>(in--output-dirif given). - Detects the newly created
rendered_page_N.jsonandparsed_page_N.jsonfiles and adds their paths to that job's entry asrendered_pageandparsed_page. - Saves the JSON file after each successfully processed job, so progress isn't lost if a later URL fails.
- If any URLs failed, prints a summary of them at the end and exits with a non-zero status.
Metadata
Release files for scrape-applied-links 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| scrape_applied_links-0.1.0.tar.gz | 6.1 kB | Without provenance | Details for scrape_applied_links-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| scrape_applied_links-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for scrape_applied_links-0.1.0-py3-none-any.whl |
Total release size: 11.4 kB
Release files / scrape_applied_links-0.1.0.tar.gz
| Download URL | scrape_applied_links-0.1.0.tar.gz |
|---|---|
| Size | 6.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e2348f9b3264c9a90680557f025f3bf3257deb55474ad919803675bf138d1c97
|
|
BLAKE2b-256 checksum How to use checksums |
1a2c71149f148946ee97270de9950dcd53004149d9f5dcead5e4371b4ad6c7dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / scrape_applied_links-0.1.0-py3-none-any.whl
| Download URL | scrape_applied_links-0.1.0-py3-none-any.whl |
|---|---|
| Size | 5.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bebb6ffe7d8b7fdd5eb50f6f8e8b919f484337918eddad96f58d9f9b43d741fd
|
|
BLAKE2b-256 checksum How to use checksums |
5d5e503e993f489306d231f3692eca09f364801ec484e7ec0120efceb69ced89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for scrape-applied-links 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.