This repository implements a production-grade Google Maps business data extraction platform with multiple execution modes: CLI, web UI, REST API, AWS Lambda, and a self-hosted SaaS edition. The core scraping engine uses Playwright for browser automation and also supports a stealth HTTP fast mode. It extracts 36+ structured fields per business (name, address, phone, website, reviews, ratings, emails, coordinates, hours, etc.) and provides deduplication, grid-based area coverage, email extraction via website visits, and review parsing. The architecture is modular with packages for scraping jobs, runners (file, database, web, Lambda, SaaS worker), output writers (CSV, JSON, PostgreSQL, S3, custom plugins), job queuing via River, and a comprehensive admin dashboard with cloud provisioning on DigitalOcean and Hetzner. The system is designed for both single-user CLI use and multi-tenant SaaS deployments with authentication, 2FA, API key management, and scalable worker pools. The codebase demonstrates strong Go engineering practices with well-defined interfaces, dependency injection, and test coverage. Notable reusable components include cryptography utilities, HTTP server middleware, rate limiting, and a CLI prompt library. However, the repository has some maintenance concerns: two separate database migration sets for legacy and SaaS modes, in-memory deduplication that doesn't persist across restarts, committed test SSH keys in the `local/` directory, and a large dependency surface that could introduce version conflicts. The scraper logic is inherently brittle due to reliance on Google Maps internal data structures, which are subject to change without notice. For AI agent consumption: This is a powerful off-the-shelf scraping tool that can be deployed as a Docker container, AWS Lambda, or managed SaaS. It provides a complete API and web interface for managing scraping jobs, monitoring progress, and exporting data. The SaaS edition includes worker auto-provisioning, making it suitable for large-scale lead generation operations. The code is actively maintained with recent commits addressing performance and feature enhancements.
This repository provides a stealth browser automation MCP (Model Context Protocol) server that offers undetectable control over real browser instances (Chrome, Chromium, Edge) via the Chrome DevTools Protocol (CDP) and the `nodriver` library. It exposes 97 tools across 11 sections including navigation, DOM interaction, element extraction (styles, structure, events, animations), network interception and modification (including dynamic Python-powered hooks), CDP command execution, cookie management, tab control, and proxy forwarding with authentication. The architecture is a FastMCP-based server with singleton managers for browser instances, network interception, element cloning, and process cleanup. It supports stdio and HTTP transports, Docker deployment, and optional bearer auth. The system is designed to bypass anti-bot detection (Cloudflare, CreepJS, login walls) and is used for scraping, testing, and AI agent automation. While the codebase is well-structured and the functionality is comprehensive, there is some code duplication across multiple element cloner implementations and technical drift risk due to tight coupling with CDP APIs and the `py2js` transpiler dependency.
Stagehand is a Python SDK for the Stagehand API, an AI-driven browser automation framework. The SDK provides sync and async clients (`Stagehand`, `AsyncStagehand`) that interact with remote or local browser sessions via natural language commands like `observe`, `act`, `extract`, and `execute`. It supports both cloud-based (via REST API) and local execution modes, the latter using a compiled SEA binary managed by `SeaServerManager`. The codebase is primarily auto-generated by Stainless from an OpenAPI spec, with hand-written custom modules for session binding, binary management, and local server orchestration. The architecture follows a resource-based client pattern: the main client holds resource objects (e.g., `sessions`) that expose typed methods returning Pydantic models. Request parameters are defined as `TypedDict` subclasses with camelCase aliases, and responses are deserialized into strongly-typed models. The SDK includes comprehensive error handling (hierarchy of `APIError` subclasses), configurable retries and timeouts, SSE streaming support, and Pydantic v1/v2 compatibility. External dependencies include `httpx` for HTTP, `pydantic` for models, and optional `aiohttp`, `playwright`, or `pydoll` for advanced browser control. Key entry points are the `Stagehand` and `AsyncStagehand` classes, which can be instantiated with an API key and base URL. Sessions are started via `client.sessions.start()`, then methods like `session.act()`, `session.extract()`, `session.observe()`, and `session.execute()` perform browser automation tasks. The `_custom/session.py` module wraps the generated resource to provide a bound session object with page-aware frame handling. The SDK also ships a `_sea` binary for local execution, packaged via custom Hatch build hooks.
top4grep is a command-line tool for searching academic papers from four top security conferences (NDSS, IEEE S&P, USENIX, CCS). It builds a local SQLite database by querying DBLP via SPARQL and optionally scraping abstracts from publisher websites. The tool supports keyword-based querying with stemming for fuzzy matching and sorts results by year and conference precedence. The architecture separates concerns into distinct modules: database operations (__main__.py, db.py, build_db.py), abstract extraction (abstract.py), and utilities (utils.py). The code demonstrates good practices like SQLAlchemy ORM usage, context managers for resource handling, and the Template Method pattern for conference-specific abstract extraction.
This repository is a comprehensive, async-first CLI application for downloading content from Douyin (TikTok China) without watermarks. It also powers a desktop application (Douzy) via a shared Python backend and offers an optional FastAPI REST server. The architecture follows a modular design: URL parsing dispatches to concrete downloader classes (video, music, live, user, mix) via a factory pattern; user-mode downloads employ a strategy pattern for posts, likes, mixes, and collections. Heavy emphasis is placed on anti-bot circumvention—X-Bogus and A-Bogus signature generation, browser fallback via Playwright, and risk-control retry logic—reflecting the adversarial nature of Douyin's API. The codebase is well-structured with distinct layers (auth, config, core, storage, control, utils) and extensive test coverage (>80 test modules). It demonstrates strong engineering practices: async I/O throughout (aiohttp, aiosqlite, aiofiles), configurable concurrency with rate limiting and retry backoff, incremental downloads via disk and database checks, structured progress reporting, and manifest logging. However, the project shows signs of technical drift: some dependencies are out of sync between requirements.txt and pyproject.toml, bundled msToken configuration may become stale, and the desktop-sidecar integration introduces coupling risks. Despite these, the code is actively maintained and functionally robust for its specific domain.
This repository provides a Python CLI tool and Makefile pipeline to scrape all essays from Paul Graham's website (paulgraham.com), convert them to Markdown, and produce an EPUB ebook. The core logic resides in a single script (`graham.py`) that uses `requests`, `BeautifulSoup`, `html2text`, and `htmldate` to download, parse, and date-stamp each essay. A `Makefile` orchestrates the full build: creating a virtual environment, fetching essays, merging them with `pandoc`, and generating the final EPUB with a custom CSS and an iBooks dark-mode patch. The CI workflow (GitHub Actions) runs daily, detects new essays by comparing article counts, and automatically creates a release with the updated EPUB and metadata CSV. The architecture is straightforward—no web server, database, or tests—but the pipeline is robust and well-documented for its single purpose. While the scraper is tightly coupled to Paul Graham's site structure, several components (the iBooks patcher, the footnote conversion function, and the EPUB stylesheet) are cleanly isolated and reusable in other EPUB generation projects.
This repository provides a Python library for converting web pages into text optimized for Large Language Model (LLM) input. It fetches HTML content using Playwright (headless browser) and processes it to extract meaningful text while preserving structural information like tables, links, and images in a text format. The core processing logic converts HTML tables to markdown, handles image and link preservation (or removal), and strips unnecessary tags (script, style) to reduce noise. The library is designed as a preprocessing step before feeding web content to LLMs for tasks such as data extraction or summarization. It includes three main modules: HTML fetching, HTML processing, and a combined convenience function.
This repository provides a set of Python CLI tools for downloading media (images, videos, GIFs) and text from Twitter/X. It uses Twitter's internal GraphQL API (not the official API) and requires a valid user cookie for authentication. The primary entry point is `main.py`, which downloads media from a specified user's timeline, with options to include retweets, highlights, likes, and time range filtering. Additional scripts handle downloading by hashtag or advanced search (`tag_down.py`), downloading replies to a specific tweet or user (`reply_down.py`), downloading only text tweets (`text_down.py`), and downloading profile information (`profile_down.py`). The tool generates CSV logs and optional Markdown files, supports concurrent async downloads, and includes a caching mechanism to avoid re-downloading. It is a monolithic application with shared utility modules for CSV generation, Markdown generation, caching, and URL handling. The code is functional and well-documented in Chinese, but exhibits some code duplication and tight coupling to Twitter's API structure. It is actively maintained and adapted to Twitter's API changes.
This repository is the official CLI tool for Firecrawl, a web scraping, crawling, and structured data extraction platform. Built with Node.js and TypeScript, it provides a comprehensive command-line interface (CLI) using the Commander framework. In production, it allows users to scrape individual URLs, perform multi-page crawls, search the web (text, images, news), map site structures, interact with cloud browser sessions, create recurring content monitors, and use AI agents for complex extraction tasks. It also includes a research paper search feature covering ~43 million abstracts from PubMed, bioRxiv, medRxiv, and arXiv, as well as a developer index for searching GitHub issues, PRs, and READMEs. The CLI is designed for both direct human use and integration with AI coding agents via MCP (Model Context Protocol) and a skills system. Architecturally, it follows a command-per-file pattern in src/commands/, with shared utilities in src/utils/ for API client management, configuration/credential handling, output formatting, authentication (PKCE OAuth, API key, keyless free tier), and job polling. The core data flow is: user input -> command handler -> Firecrawl REST API (cloud or self-hosted) -> formatted output to stdout or file. External dependencies include the firecrawl SDK, commander, @inquirer/prompts, yaml, and zod-to-json-schema. The tool supports binary builds via Bun compile and is distributed via npm, Homebrew, and GitHub Releases with .deb/.rpm packages. It also includes interactive setup wizards, MCP server installation for coding agents, and a native skill installer. While primarily an application, the research paper search feature gives it a hybrid data-access character, but it does not contain data pipelines, notebooks, or analytical models. The codebase is well-tested (Vitest) and actively maintained, with CI/CD workflows for testing, npm publishing, and binary releases. However, the large command surface and agent-specific integrations introduce some maintenance complexity, and the reliance on the firecrawl SDK and external APIs means changes upstream could require updates.
Broadcastarr is a media broadcasting service that scrapes broadcast schedules from websites, processes and stores broadcast information, and publishes notifications to platforms like Discord and Gotify. It integrates with media servers (Jellyfin) to make content available as M3U8 streams. The architecture consists of a monolithic application with separate server (API), worker (background tasks), and bootstrap (initialization) components. It uses Agenda for job scheduling, Mongoose for MongoDB ODM, Puppeteer for web scraping, Express for API server, and Discord.js for bot functionality. The system provides a REST API for monitoring and control, along with Discord slash commands for management.
instagram4j is a Java library that provides an object-oriented interface to Instagram's private (undocumented) API. It supports both mobile and web API endpoints, allowing actions such as logging in with username/password or existing session tokens, fetching profiles, posts, stories, direct messages, searching, posting pictures, liking, commenting, following/unfollowing, and more. The library is structured as a multi-module Gradle project with separate 'mobile' and 'web' modules, each mirroring similar functionality but using different API endpoints (REST for mobile, GraphQL for web). It uses OkHttp for HTTP requests and a custom JSON library. The codebase demonstrates good engineering practices with clear separation of concerns, pagination iterators, and robust error handling. However, there is significant code duplication between the two modules, and the library relies on reverse-engineered endpoints that may break with Instagram updates. The last commit date appears to be in the future (2026), suggesting the repository may be stale or the timestamp is erroneous.
SeimiCrawler is a Java web crawling framework inspired by Scrapy, built on Spring and JDK 8. It provides a modular architecture with a pluggable downloader interface (Apache HttpClient / OkHttp3), a configurable queue system (local or Redis-based with BloomFilter deduplication), and XPath-based data extraction via JsoupXpath. The framework supports both standalone and Spring Boot deployment, includes an embedded HTTP API for push-based request injection, and integrates with SeimiRender for dynamic page rendering. The codebase demonstrates good engineering practices (interceptor pattern, bean mapping via annotations, retry logic) but has technical debt in outdated dependencies (fastjson, OkHttp) and some duplicated encoding logic across downloaders.
EasySpider is a visual, no-code web scraping tool that combines an Electron desktop application, a Chrome browser extension, and a Python execution engine. Users design scraping workflows via a flowchart-based UI (Vue.js) where they define steps like opening pages, clicking elements, extracting data, looping, and conditional branching. The task definitions are saved as JSON graphs. The Python backend (ExecuteStage) loads these graphs and drives Chrome using Selenium with an undetected-chromedriver fork to evade bot detection. Extracted data can be written to CSV, Excel, JSON, or MySQL. The tool also includes OCR support (ddddocr), custom JavaScript/Python execution, and Cloudflare bypass capabilities. The architecture is a hybrid desktop app with a local HTTP server (Express) that spawns executor processes and communicates via WebSocket. The Chrome extension assists in element selection and XPath generation. While the tool is functional and popular (44k+ stars), the codebase exhibits significant duplication (e.g., identical task files across platform directories, duplicated Bootstrap and content scripts), hardcoded paths, monolithic executor scripts, and mixed-language strings. Several experimental modules (LLM, federated learning) are present but not integrated. The project is actively maintained with recent commits and packaging scripts, but technical debt and drift (Bootstrap 4, Vue 2, pinned Python dependencies) are moderate.
Botright is a Python library built on Playwright that provides advanced browser automation with stealth features to evade bot detection. It includes proxy management, fingerprint spoofing using real browser profiles (chrome-fingerprints), human-like mouse movements, and CAPTCHA solving for hCaptcha, reCAPTCHA, and Geetest (though Geetest support is currently disabled). The library wraps Playwright's API with a custom layer that intercepts browser events, modifies user agent, platform, and other fingerprinting vectors, and injects anti-detection scripts. It supports both headless and headed modes, proxy rotation, and response caching. The codebase is well-structured but has commented-out modules indicating incomplete transitions (e.g., Geetest).
Elib2Ebook is a .NET 10 application that downloads books from 60+ online libraries (Litres, MyBook, BookRiver, etc.) and converts them into standard ebook formats (EPUB, FB2, CBZ, JSON, TXT). It is a dual-deployment solution: a CLI tool and a Blazor web UI, both sharing a core domain and service layer. The architecture is a layered .NET solution with Domain, DomainServices, and per-site ExternalServices projects, using a reflection-based GetterFactory to auto-discover site adapters. The system handles site-specific anti-bot measures, authentication, and pagination, then normalizes content into a common domain model before passing it to format-specific builders.
This repository is a curated, static collection of real-world legal case studies documenting the consequences of web scraping, data theft, and automated tool misuse in China. It contains no executable code, data pipelines, or analytical notebooks; instead, it organizes news articles, court documents, and lawyer analyses into categorized 'forbidden zones' (禁区) covering illegal crawler services, personal data trading, copyright infringement, and service disruption. The sole entry point is the README, which lists 16+ cases with links to external sources. While not a software project, it serves as a valuable educational reference for developers and legal practitioners navigating Chinese data compliance law. The repository is fully reproducible as it consists of static markdown files with no dependencies or runtime requirements.
You-Get is a command-line media downloader that scrapes web pages to extract and download video, audio, and image files from over 100 websites including YouTube, Bilibili, and Youku. The architecture is a monolithic Python package with a modular extractor system: each supported site has a dedicated module under `src/you_get/extractors/` that implements a consistent interface (module-level `download` and `download_playlist` functions). The core engine in `common.py` handles URL resolution, HTTP requests with retry, proxy support, cookie loading, and download orchestration via external tools like ffmpeg or rtmpdump. The CLI entry point in `__main__.py` provides options for format selection, playlist handling, JSON output, and streaming to media players. While the project is functionally complete and has sustained community interest for over a decade, the codebase shows signs of organic growth: heavy reliance on fragile regex-based scraping, global state management, and embedded API keys. The most technically notable component is the standalone MP4 merger in `join_mp4.py` that implements ISO BMFF atom parsing without external dependencies.
wechatDownload is a desktop GUI utility for bulk-downloading articles from WeChat official accounts (微信公众号). The exported artifacts in example/ prove a production pipeline that converts articles into HTML, MHTML, Markdown, PDF, DOCX, and CSV, while also pulling embedded images, videos (nested MP4s), audio, cover images, and reader comments, and recording social metrics (like_num, read_num, share_num, comment_count) per article into CSV files. The tool supports single-article, full-account batch, and collection-based downloads, plus keyword filtering — all driven from a local GUI (README documents version 4.7+ and Windows/macOS use).
A monolithic Python application for crawling public data from the Chinese social network Weibo (Sina Weibo). It retrieves user profiles, weibo posts (including text, images, videos, live photos), comments, and reposts via the Weibo mobile API. Data can be exported to CSV, JSON, SQLite, MySQL, MongoDB, Markdown, or forwarded to a custom HTTP endpoint. It provides a CLI entry point for scheduled crawling (using the `schedule` library) and a Flask-based REST API for remote trigger and data retrieval. The codebase is heavily centralized—the core `Weibo` class (~3000 lines) handles fetching, parsing, downloading media, writing to multiple outputs, and anti‑ban throttling. A lightweight LLM analysis module can optionally enrich each weibo with sentiment, summary, and anomaly detection. The repository is community‑maintained with 4.6k stars, 402 open issues, and frequent commits as of mid‑2026. It is primarily an application but has a strong data‑collection character; the data outputs are suitable for subsequent research or archiving.
This repository is a 30-day Python tutorial that originated as an application-focused learning project but has evolved into a hybrid data_research resource. The core is a structured curriculum covering Python fundamentals through 30 days of markdown documentation and accompanying Python scripts. However, the repository's most substantial and unique content lies in its data folder, which contains rich datasets including presidential speeches (Obama, Trump, Michelle Obama, Melina Trump), Fortune 500 company data, Hacker News posts, country statistics, email exchanges, and weight-height CSV data. The data_research character emerges from the later days which cover web scraping (with actual scraped JSON output from Boston University), Pandas data analysis, NumPy statistics, MongoDB database operations, and API consumption. The repository includes Flask web applications for text analysis, demonstrating practical data processing pipelines. While the tutorial content is well-structured and professionally presented across multiple languages (English, German, Spanish, Chinese, Portuguese, Persian, Korean, Ukrainian), the actual executable Python code is minimal compared to the markdown documentation. The data assets are the most valuable component - they're real, substantial datasets that could be used for NLP analysis, statistical exercises, and data visualization projects. However, the repository lacks proper dependency management beyond a basic requirements.txt for the Flask app, has no environment configuration, and the data sources are not systematically documented with metadata or provenance information.