A crawler tool that assists user to search for news report and ouputs to excel with full-page screenshots
Originally made this tool for my girlfriend who did all that work manually
Works on macOS (Intel and Apple Silicon), Windows, and Linux.
- uv package manager
- Python 3.11+
# Install uv (if needed)
curl -LsSf https://astral.sh/uv/install.sh | sh
cd /path/to/web-tool
uv sync
uv run playwright install chromium
uv run news-crawlerOn first run, macOS may prompt to allow network access for Python/Chromium — approve for search and screenshots.
Default export folder: ~/news_crawler_output
cd /repo/path
uv sync
uv run playwright install chromium
uv run news-crawlerDefault export folder: %USERPROFILE%\news_crawler_output
uv sync
uv run playwright install chromium
# If Chromium fails to start, install system deps:
uv run playwright install-deps chromium
uv run news-crawler- Enter a search prompt and choose a Market (English US, Japanese, or Taiwan).
- Optionally change Display language for UI labels and Excel column headers.
- Click Search.
- Review results in the table; uncheck sources you do not want.
- In the Queue tab, choose output folder and Adblock strategy:
ALayered native blocking (filter-lists + cookie/popup shielding + cosmetic cleanup)CReader-mode screenshot (article extraction rendered as clean reading page)
- Click Export Queue.
| Market | DuckDuckGo region | Typical sources |
|---|---|---|
| English (US) | us-en |
International / US news |
| Japanese | jp-jp |
NHK, Yahoo Japan, Nikkei, Asahi, etc. |
| Traditional Chinese (Taiwan) | tw-tzh |
UDN, CNA, Liberty Times, ETtoday, etc. |
Prompts accept English, Japanese, or Traditional Chinese (UTF-8). Results are shown in DuckDuckGo News return order with no local re-ranking or filtering.
Optional Date range (search bar) is passed to DuckDuckGo only. Search status appears in the window status bar at the bottom.
news_results_<timestamp>.xlsx— localized columns: No., Media, Title, URL, Marketscreenshots/— one PNG per queued article (001.png,002.png, …)
Click result rows to add or remove articles from the Queue tab; export runs only from the Queue tab.
One script builds a native app for the OS you run it on (build on each target platform separately).
uv sync
python compile.pyOptions: --onefile (single file), --clean, --name NAME, --output-dir DIR. Extra PyInstaller flags after --, e.g. python compile.py -- --debug all.
| OS | Default output |
|---|---|
| Windows | dist/news-crawler/news-crawler.exe |
| macOS | dist/news-crawler.app |
| Linux | dist/news-crawler/news-crawler |
compile.py bundles Playwright Chromium into the app (Contents/Resources/ms-playwright on macOS). Rebuild after upgrading Playwright in pyproject.toml.
uv run pytest tests/- DuckDuckGo news search is unofficial; empty results or rate limits may occur — wait and retry or lower max results.
- Some sites block automated access; screenshots may fail for those URLs (see the log panel).
- Screenshot exports support two strategies (
A/C) from the Queue tab.Ais the default and matches prior behavior (always-on clutter blocking with filter lists + cookie shielding).Cproduces reader-mode screenshots and intentionally does not preserve original site layout. - Run
uv run python scripts/fetch_filter_lists.pyto refresh EasyList/EasyPrivacy/Japan/Fanboy lists.
GPL-3.0-or-later (see LICENSE).