用 Python 自适应抓取网页,默认绕过反爬保护,支持从单次请求到大规模并发爬取。
浏览器
Web Retrieval
试用Expert web fetching and crawling using Scrapling. Use for any web_fetch task, JS-rendered pages, anti-bot sites, bulk URL fetching, or site crawling. Preferr...
它能做什么
Local web fetching via Scrapling. Three fetchers, two scripts, one job: get the page content reliably.
技能文档
Web Retrieval — Scrapling Expert
Local web fetching via Scrapling. Three fetchers, two scripts, one job: get the page content reliably.
Fetcher Selection Guide
Always start with the cheapest fetcher that works. Escalate only if needed.
| Fetcher | CLI mode | Speed | Use when |
|---|---|---|---|
Fetcher (curl_cffi) | get | Fast (~1s) | Static HTML, APIs, most public pages. Impersonates Chrome. |
DynamicFetcher | fetch | Medium (~5s) | JS-rendered pages, SPAs, pages that need browser execution |
StealthyFetcher | stealthy | Slow (~10s) | Cloudflare, heavy anti-bot, fingerprint detection |
Decision tree:
- Try
getfirst — it handles 80% of pages - If content is just a title or empty → escalate to
fetch - If blocked/Cloudflare detected → escalate to
stealthy - If still blocked → add
--solve-cloudflareand/or--wait 3000
Fetch Script
FETCH="python3 $SKILL_DIR/scripts/fetch"
# Basic fetch (auto-escalates through modes)
$FETCH https://example.com
# Force specific mode
$FETCH https://example.com --mode stealthy
# Extract specific content with CSS selector
$FETCH https://example.com -s "article.main-content"
# Wait for JS-rendered content
$FETCH https://spa.example.com --mode fetch --wait 3000 --wait-selector ".content"
# Save to file
$FETCH https://example.com /tmp/output.md
# Plain text output
$FETCH https://example.com --text
# Raw HTML (for link extraction, parsing)
$FETCH https://example.com --html
# Cloudflare bypass
$FETCH https://protected.example.com --mode stealthy --solve-cloudflare
# Fast (no images/fonts/media)
$FETCH https://example.com --no-resources
# Network idle wait (good for dashboards)
$FETCH https://example.com --mode fetch --network-idle
Crawl Script
CRAWL="python3 $SKILL_DIR/scripts/crawl"
# Fetch a flat list of URLs from file → one .md per URL in output dir
$CRAWL --urls-file /tmp/urls.txt --output-dir /tmp/results/
# Fetch list → single JSON file
$CRAWL --urls-file /tmp/urls.txt --output-json /tmp/results.json
# Crawl a site 2 levels deep (same domain only)
$CRAWL https://docs.example.com --depth 2 --output-dir /tmp/docs/
# Spider with checkpoint (resume if interrupted)
$CRAWL https://large-site.com --depth 3 --checkpoint-dir /tmp/checkpoint/
# Crawl with URL filter (only pages matching pattern)
$CRAWL https://docs.openclaw.ai --depth 2 --allowed-pattern "/docs/" --output-dir /tmp/
# Use stealth mode for crawl
$CRAWL --urls-file /tmp/urls.txt --mode stealthy --output-json /tmp/out.json
Python API (for sub-agents / scripts)
from scrapling import Fetcher, StealthyFetcher, DynamicFetcher
# Static fetch with browser impersonation
page = Fetcher().get("https://example.com", stealthy_headers=True)
text = page.get_all_text(ignore_tags=("script", "style"))
links = [a.attrib.get("href") for a in page.css("a[href]")]
title = page.css_first("h1").text
# Dynamic (JS-rendered)
async with DynamicFetcher() as f:
page = await f.async_fetch("https://spa.example.com")
# Stealthy
page = StealthyFetcher().fetch("https://cloudflare-site.com", wait=2000)
# CSS selector extraction
results = page.css("div.article-body p") # returns list of elements
first = page.css_first("h1").text
# Response properties
page.status # HTTP status
page.url # final URL (after redirects)
page.html # raw HTML string
page.find("div", {"class": "content"}) # BeautifulSoup-style
Scrapling Spider (site crawl with full control)
from scrapling.spiders import Spider, Request
from scrapling import Fetcher
class DocsCrawler(Spider):
start_urls = ["https://docs.example.com"]
async def start_requests(self):
for url in self.start_urls:
yield Request(url, callback=self.parse)
async def parse(self, response):
# Yield scraped data
yield {
"url": response.url,
"title": response.css_first("h1").text if response.css_first("h1") else "",
"body": response.get_all_text(ignore_tags=("script", "style")),
}
# Follow links
for link in response.css("a[href]"):
href = link.attrib.get("href", "")
if href.startswith("/") or "docs.example.com" in href:
yield Request(response.urljoin(href), callback=self.parse)
# Run (checkpoint-enabled)
spider = DocsCrawler(crawldir="/tmp/crawl-checkpoint/")
result = spider.start()
print(f"Scraped {result.stats.items_scraped} pages")
items = list(result.items)
Key Scrapling CSS/Response Methods
| Method | Description |
|---|---|
page.css("selector") | All matching elements |
page.css_first("selector") | First match or None |
el.text | Text content of element |
el.attrib["href"] | Attribute value |
page.get_all_text() | Full page text (strips scripts/styles) |
page.html | Raw HTML |
page.find(tag, attrs) | BeautifulSoup-style find |
page.urljoin(href) | Resolve relative URL |
response.url | Final URL after redirects |
response.status | HTTP status code |
Output Formats
All CLI commands support three output formats via file extension:
.md— Markdown (default, best for LLM consumption).txt— Plain text.html— Raw HTML (use for link extraction or further parsing)
Tips
- JS pages with lazy loading: use
--wait 2000+--network-idle - Dynamic content:
--wait-selector ".target-class"waits until element appears - Rate limiting: add
--wait 1000between requests in crawl mode - Cloudflare 403/503:
--mode stealthy --solve-cloudflare - Missing content: try
--mode fetch --network-idlebefore escalating to stealthy - CSS selectors: use for targeted extraction to reduce noise in output
- Deep research crawls: use
--checkpoint-dirso crawl survives interruption
相关技能
编写、调试与调优 Playwright 测试,涵盖定位器策略、追踪诊断与 CI 友好的超时配置。
通过一次 REST API 调用,向 10 个社交平台发布视频、图片、文字与文档。
以 AI 机器人身份加入视频会议,提供语音、虚拟形象与屏幕共享四种模式。
在本地磁盘以分类纯 Markdown 文件保存需要长期留存的事实,与智能体内置记忆并存。
把自然语言描述转为结构化 JSON,并由 mcp-diagram-generator MCP 服务生成 Draw.io、Mermaid 或 Excalidraw 图表文件。
seanford 的更多技能
浏览全部技能通过 Microsoft Graph 接入 Outlook,读取、发送、管理邮件、文件夹、日历事件和联系人,OAuth 由平台托管。
通过托管网关调用第三方 API,免去自行管理 OAuth 和密钥的负担。
通过托管 OAuth 代理读写并管理 Gmail 邮件、会话、标签和草稿。
Multi-provider web search and URL content extraction with intelligent auto-routing, freshness filters, locale awareness, caching, and privacy options across...
通过 acpx 把编码任务交给 Codex、Claude Code、Pi 等 ACP 兼容代理,支持常驻会话与并行执行。
Query the local OpenClaw docs index for accurate answers about configuration, features, CLI commands, channels, providers, plugins, cron, sessions, agents, protocol, and troubleshooting. Faster and more accurate than relying on training data for OpenClaw specifics. Zero API calls, sub-10ms queries. Useful for: openclaw, configure, gateway, channel, cron, provider, plugin, session, heartbeat, protocol, skill, model, agent questions.