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

Web Scraper

  • 28 installs
  • 84 repo stars
  • Updated January 28, 2026
  • aidotnet/moyucode

web-scraper is a Claude Code skill that extracts and parses data from web pages using Puppeteer and CSS selectors.

About

web-scraper is a Claude Code prompt skill that extracts data from web pages. It provides a Puppeteer-based TypeScript approach that navigates a page, waits for content, and parses fields with CSS selectors. A developer uses it to pull structured data from HTML pages.

  • Extracts and parses data from web pages
  • Uses Puppeteer with CSS-selector-based extraction
  • Sets a user agent and waits for content to load

Web Scraper by the numbers

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

web-scraper capabilities & compatibility

Capabilities
web scraping · html parsing · data extraction
Works with
playwright
Use cases
web scraping
Pricing
Free
From the docs

What web-scraper says it does

Extract and process data from web pages with intelligent parsing capabilities.
SKILL.md
You are a web scraping expert that extracts data efficiently and ethically.
SKILL.md
npx skills add https://github.com/aidotnet/moyucode --skill web-scraper

Add your badge

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

Listed on Skillselion
Installs28
repo stars84
Last updatedJanuary 28, 2026
Repositoryaidotnet/moyucode

What it does

Extract structured data from web pages with Puppeteer and CSS selectors.

Who is it for?

Scraping structured data from HTML pages with a headless browser.

Skip if: Bulk crawling sites that prohibit scraping in their terms.

When should I use this skill?

You need to extract data fields from a web page.

What you get

Produces Puppeteer code that returns parsed data from a target page.

  • Puppeteer scraping code
  • parsed structured data

Files

SKILL.mdMarkdownGitHub ↗

Web Scraper Skill

Description

Extract and process data from web pages with intelligent parsing capabilities.

Trigger

  • /scrape command
  • User requests web data extraction
  • User needs to parse HTML

Prompt

You are a web scraping expert that extracts data efficiently and ethically.

Puppeteer Scraper (TypeScript)

import puppeteer from 'puppeteer';

interface Product {
  name: string;
  price: number;
  rating: number;
  url: string;
}

async function scrapeProducts(url: string): Promise<Product[]> {
  const browser = await puppeteer.launch({ headless: 'new' });
  const page = await browser.newPage();
  
  // Set user agent to avoid detection
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');
  
  await page.goto(url, { waitUntil: 'networkidle2' });
  
  // Wait for products to load
  await page.waitForSelector('.product-card');
  
  const products = await page.evaluate(() => {
    const items = document.querySelectorAll('.product-card');
    return Array.from(items).map(item => ({
      name: item.querySelector('.product-name')?.textContent?.trim() ?? '',
      price: parseFloat(item.querySelector('.price')?.textContent?.replace('$', '') ?? '0'),
      rating: parseFloat(item.querySelector('.rating')?.getAttribute('data-rating') ?? '0'),
      url: item.querySelector('a')?.href ?? '',
    }));
  });
  
  await browser.close();
  return products;
}

Cheerio Parser (Node.js)

import axios from 'axios';
import * as cheerio from 'cheerio';

async function parseArticle(url: string) {
  const { data } = await axios.get(url, {
    headers: { 'User-Agent': 'Mozilla/5.0' }
  });
  
  const $ = cheerio.load(data);
  
  return {
    title: $('h1.article-title').text().trim(),
    author: $('span.author-name').text().trim(),
    date: $('time').attr('datetime'),
    content: $('article.content p').map((_, el) => $(el).text()).get().join('\n\n'),
    tags: $('a.tag').map((_, el) => $(el).text()).get(),
  };
}

Rate Limiting

class RateLimiter {
  private queue: (() => Promise<void>)[] = [];
  private processing = false;
  
  constructor(private delayMs: number = 1000) {}
  
  async add<T>(fn: () => Promise<T>): Promise<T> {
    return new Promise((resolve, reject) => {
      this.queue.push(async () => {
        try {
          resolve(await fn());
        } catch (e) {
          reject(e);
        }
      });
      this.process();
    });
  }
  
  private async process() {
    if (this.processing) return;
    this.processing = true;
    
    while (this.queue.length > 0) {
      const fn = this.queue.shift()!;
      await fn();
      await new Promise(r => setTimeout(r, this.delayMs));
    }
    
    this.processing = false;
  }
}

// Usage
const limiter = new RateLimiter(2000); // 2 seconds between requests
const results = await Promise.all(
  urls.map(url => limiter.add(() => scrapeProducts(url)))
);

Tags

web-scraping, data-extraction, parsing, automation, html

Compatibility

  • Codex: ✅
  • Claude Code: ✅

Related skills

FAQ

What does the web-scraper skill use?

A Puppeteer-based headless browser with CSS-selector parsing.

Does it handle dynamic content?

Yes, it waits for selectors and page network idle before extracting.

Automation & Workflowsintegrationsbackend

This week in AI coding

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

unsubscribe anytime.