Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
aidotnet avatar

Web Scraper

  • 1 installs
  • 595 repo stars
  • Updated August 4, 2026
  • aidotnet/opencowork

web-scraper is a Claude Code skill that fetches, searches and crawls web pages and extracts structured content using Python.

About

web-scraper is a Claude Code skill that fetches, searches and crawls web pages and extracts structured content using Python. A developer uses it to read a webpage, search the internet, extract links, or crawl JavaScript-rendered pages, with output converted to clean Markdown. It offers a lightweight static mode (requests, beautifulsoup, readability, html2text), a dynamic crawl4ai mode, and DuckDuckGo search.

  • Fetches, searches and crawls web pages and extracts links via Python scripts
  • Static mode uses requests/beautifulsoup, dynamic mode uses crawl4ai for JS-rendered pages
  • Searches the web through DuckDuckGo with no API key required

Web Scraper by the numbers

  • 1 all-time installs (skills.sh)
  • Ranked #1,983 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

web-scraper capabilities & compatibility

Free; static mode is lightweight, dynamic mode installs Playwright/Chromium.

Capabilities
web scraping · web search · web crawling · link extraction
Use cases
web scraping · web search · research
Pricing
Free
From the docs

What web-scraper says it does

Scrape web pages, search the internet, and extract structured content using Python.
SKILL.md
npx skills add https://github.com/aidotnet/opencowork --skill web-scraper

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1
repo stars595
Last updatedAugust 4, 2026
Repositoryaidotnet/opencowork

What it does

Fetch, search, crawl and extract content and links from web pages, including JavaScript-rendered pages, into clean Markdown.

Who is it for?

Fetching pages, searching the web and crawling JS-rendered sites into clean Markdown.

Skip if: Scraping a specific site with its own dedicated extractor such as Xiaohongshu.

When should I use this skill?

A user wants to fetch a webpage, search the internet, extract links, or crawl a JavaScript-rendered page.

What you get

Web page content, search results and extracted links converted to clean Markdown.

  • Web page content as Markdown
  • Search results
  • Extracted link lists

By the numbers

  • 4 scripts (fetch_page, search_web, crawl_dynamic, extract_links)
  • crawl4ai downloads a ~150 MB Chromium browser

Files

SKILL.mdMarkdownGitHub ↗

Web Scraper

Fetch, search, and extract content from websites.

When to use this skill

  • User asks to fetch or read a webpage / URL
  • User wants to search the internet for information
  • User needs to extract links, tables, or structured data from a website
  • User asks to crawl a JavaScript-rendered (dynamic) page
  • User wants web content converted to clean Markdown for analysis

Scripts overview

ScriptPurposeDependencies
fetch_page.pyFetch a URL and extract readable content as Markdownrequests, beautifulsoup4, readability-lxml, html2text
search_web.pySearch the web via DuckDuckGoddgs
crawl_dynamic.pyCrawl JS-rendered pages with a headless browsercrawl4ai
extract_links.pyExtract and categorize all links from a pagerequests, beautifulsoup4

Steps

1. Install dependencies (first time only)

For lightweight scraping (static pages, search, link extraction):

pip install requests beautifulsoup4 readability-lxml html2text ddgs

For dynamic / JavaScript-rendered pages (heavier, installs Playwright + Chromium):

pip install crawl4ai
crawl4ai-setup
Note: crawl4ai-setup downloads a Chromium browser (~150 MB). Only install if you actually need dynamic page support.
CRITICAL — Dependency Error Recovery: If ANY script below fails with an ImportError or "module not found" error, install the missing dependencies using the command above, then re-run the EXACT SAME script command that failed. Do NOT write inline Python code (python -c "...") or your own ad-hoc scripts as a substitute. These scripts handle encoding, error handling, and output formatting that inline code will miss.

2. Fetch a web page (static — recommended first choice)

Use this for most websites. It's fast, lightweight, and works for articles, docs, blogs, etc.

python scripts/fetch_page.py "URL"

Options:

  • --raw — Output full page Markdown instead of extracted article content
  • --selector "CSS_SELECTOR" — Extract only elements matching the CSS selector (e.g. ".article-body", "table", "#content")
  • --save OUTPUT_PATH — Also save output to a file
  • --max-length N — Truncate output to N characters (default: no limit)

Examples:

# Fetch an article
python fetch_page.py "https://example.com/article"

# Extract only tables
python fetch_page.py "https://example.com/data" --selector "table"

# Fetch raw full-page markdown, limit to 5000 chars
python fetch_page.py "https://example.com" --raw --max-length 5000

3. Search the web

Search using DuckDuckGo (no API key required).

python scripts/search_web.py "search query"

Options:

  • --max-results N — Number of results to return (default: 10)
  • --region REGION — Region code, e.g. cn-zh, us-en, jp-jp (default: wt-wt for worldwide)
  • --news — Search news instead of general web

Examples:

# General search
python search_web.py "Python web scraping best practices 2025"

# News search, Chinese region, 5 results
python search_web.py "AI 最新进展" --news --region cn-zh --max-results 5

4. Crawl a dynamic / JavaScript-rendered page

Use this only when fetch_page.py returns empty or incomplete content (SPA, React/Vue apps, pages that load content via JS).

python scripts/crawl_dynamic.py "URL"

Options:

  • --wait N — Wait N seconds after page load for JS to finish (default: 3)
  • --selector "CSS_SELECTOR" — Wait for a specific element to appear before extracting
  • --scroll — Scroll to bottom of page to trigger lazy loading
  • --save OUTPUT_PATH — Also save output to a file
  • --max-length N — Truncate output to N characters

5. Extract links from a page

Extract all links with their text labels, categorized by type (internal, external, resource).

python scripts/extract_links.py "URL"

Options:

  • --filter PATTERN — Only show links matching a regex pattern (applied to URL)
  • --external-only — Only show external links
  • --json — Output as JSON instead of Markdown

Decision guide: which script to use

1. Start with `fetch_page.py` — handles 90% of websites (articles, docs, blogs, wikis). 2. If fetch_page.py returns empty/garbled content → try `crawl_dynamic.py` (the page likely needs JavaScript). 3. Need to find URLs first? → Use `search_web.py` to discover relevant pages. 4. Need to navigate a site structure? → Use `extract_links.py` to map out links, then fetch individual pages.

Common workflows

Research a topic

1. search_web.py "topic" → get relevant URLs 2. fetch_page.py "best_url" → read the content 3. Repeat for multiple sources, then synthesize

Scrape structured data from a page

1. fetch_page.py "url" --selector "table" → extract tables 2. Or fetch_page.py "url" --selector ".product-card" → extract specific elements

Crawl a modern web app (SPA)

1. crawl_dynamic.py "url" --wait 5 --scroll → full JS-rendered content

Edge cases

  • Paywalled sites: May return partial content or login pages. Inform the user.
  • Rate limiting / CAPTCHAs: If requests fail with 403/429, wait and retry or inform the user.
  • Very large pages: Use --max-length to truncate output and avoid overwhelming the context window.
  • Encoding issues: Scripts handle UTF-8 by default. Exotic encodings may need manual adjustment.
  • Robots.txt: These scripts do not check robots.txt. Use responsibly and respect website terms of service.

Scripts

  • fetch_page.py — Fetch and extract readable content as Markdown
  • search_web.py — Search the web via DuckDuckGo
  • crawl_dynamic.py — Crawl JavaScript-rendered pages
  • extract_links.py — Extract and categorize page links

Related skills

FAQ

Which script should you try first?

fetch_page.py, which handles about 90% of websites; use crawl_dynamic.py only when it returns empty or incomplete content.

Does web search need an API key?

No. search_web.py searches via DuckDuckGo with no API key required.

Automation & Workflowsautomationresearch

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.