Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ConfoundingVariables/e10bedcba61bdb2393fde1dcbc367835 to your computer and use it in GitHub Desktop.
Save ConfoundingVariables/e10bedcba61bdb2393fde1dcbc367835 to your computer and use it in GitHub Desktop.
Self hosted Scraping tools

I identified ten leading self-hosted web-scraping and browser-automation frameworks, spanning headless-browser drivers, high-level crawlers, and API-first services. Only Firecrawl offers built-in Markdown output, converting scraped pages directly into clean Markdown; all others require either custom pipelines or external libraries (e.g. Turndown) to transform HTML/text into Markdown. Here’s a quick rundown:

  • Firecrawl (Node, Python, Go SDKs): API-first scraper with native Markdown output and AI-powered extraction citeturn0search0turn0search11
  • Playwright (TS/JS, Python, C#, Java): Cross-browser headless automation; no native Markdown conversion citeturn1search0turn1search12
  • Puppeteer (JS/TS): Headless Chrome/Firefox control; requires manual Markdown transformation citeturn5search0
  • Scrapy (Python): Asynchronous HTTP crawler; extensible pipelines but no built-in Markdown citeturn6search0
  • Apify SDK (JS/TS): Scalable crawler on Puppeteer; rich API but no Markdown output citeturn7search1
  • Selenium (Java, Python, C#, Ruby, JS): WebDriver automation; generic browser control, no Markdown citeturn8search0
  • Headless Chrome Crawler (JS/TS): Promise-based crawler on Puppeteer; CSV/JSON out, no Markdown citeturn4search0
  • Colly (Go): Fast HTTP scraper; supports robots.txt and parallelism, no Markdown citeturn2search0
  • simplecrawler (JS): Event-driven Node crawler; basic link discovery, no Markdown citeturn3search0
  • MechanicalSoup (Python): Requests+BeautifulSoup for form-based sites; no JS support or Markdown citeturn9search0

Self-Hosted Scraping Tools and Links

Tool GitHub Link
Firecrawl https://github.com/mendableai/firecrawl-mcp-server citeturn0search8
Playwright https://github.com/microsoft/playwright citeturn1search0
Puppeteer https://github.com/puppeteer/puppeteer citeturn5search0
Scrapy https://github.com/scrapy/scrapy citeturn6search0
Apify SDK https://github.com/apify/apify-sdk-js citeturn7search5
Selenium https://github.com/SeleniumHQ/selenium citeturn8search0
Headless Chrome Crawler https://github.com/yujiosaka/headless-chrome-crawler citeturn4search0
Colly https://github.com/gocolly/colly citeturn2search0
simplecrawler https://github.com/simplecrawler/simplecrawler citeturn3search0
MechanicalSoup https://github.com/MechanicalSoup/MechanicalSoup citeturn9search0

Feature Comparison

Feature Firecrawl Playwright Puppeteer Scrapy Apify SDK Selenium HCCrawler Colly simplecrawler MechanicalSoup
Headless Browser
JS-Rendered Content
Async/Parallel API rate limits ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Native Markdown ✔️ citeturn0search11
Language Node/Python/Go TypeScript/JS, Python… JS/TS Python JS/TS Java, Python… JavaScript Go JavaScript Python
Community & Maintenance Medium (2.7k⭐) Very High (71.8k⭐) Very High (90.5k⭐) Very High (54.9k⭐) High (17.5k⭐) Very High (32.1k⭐) Medium (3.3k⭐) High (24.1k⭐) Medium (2.1k⭐) Medium (4.7k⭐)

Table sources: respective GitHub repositories and docs.

Trade-Offs and Recommendations

  • If you need out-of-the-box Markdown: Firecrawl is unique in shipping clean Markdown directly—ideal for LLM pipelines or static-site generation citeturn0search11.
  • For pure browser automation: Playwright or Puppeteer offer the most robust cross-browser support and ecosystem integration citeturn1search0turn5search0.
  • For large-scale Python crawling: Scrapy remains the go-to for high-throughput, asynchronous scraping with rich extensions citeturn6search0.
  • Lightweight, language-specific needs: Colly (Go) and MechanicalSoup (Python) are excellent for simpler tasks where JS rendering isn’t required citeturn2search0turn9search0.

Alternative Approaches

  • Custom Markdown pipelines: Combine any headless tool (Playwright/Puppeteer) with Turndown or Python’s markdownify to post-process HTML.
  • Hybrid setups: Use Scrapy for link management + Playwright for page rendering, stitching results via a shared queue.
  • Serverless deployments: Deploy lightweight crawlers (Colly, simplecrawler) in containers or AWS Lambda for burst-scale jobs.

What’s your primary focus—maximizing Markdown-ready output, pure rendering fidelity, or raw scraping throughput? Which of these trade-offs align best with your project’s long-term automation and maintenance goals?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment