manus-skills/.kortix/opencode/skills/data/scrapling/references/api-quick-ref.md
zhukang 1c7abd81d1 All 310 Manus skill-hub community skills as a Kortix marketplace registry
- 310 registry:skill items, 1528 files, 7 categories (hub tags)
- registry.json generated by @kortix/registry buildRegistry
- nested SKILL.md in sn-da-* renamed SUBSKILL.md (no phantom skills)
- provenance + licenses: SOURCES.md
2026-09-15 13:37:20 +08:00

3.4 KiB
Raw Blame History

Scrapling API 速查卡

Fetcher(基于 curl_cffi,最快)

from scrapling.fetchers import Fetcher

# GET 请求
page = Fetcher.get(url, impersonate='chrome', timeout=30, headers=None, cookies=None)

# POST 请求
page = Fetcher.post(url, data=None, json=None, impersonate='chrome', timeout=30)

Cookie 格式: dict — {'name': 'value'} 超时单位: 秒

from scrapling.fetchers import FetcherSession

with FetcherSession(impersonate='chrome') as s:
    s.post(login_url, data={'user': '...', 'pass': '...'})
    page = s.get(target_url)

StealthyFetcher(Camoufox,绕过反爬)

from scrapling.fetchers import StealthyFetcher

page = StealthyFetcher.fetch(
    url,
    headless=True,           # 无头模式
    solve_cloudflare=True,   # 自动过 Cloudflare
    cookies=None,            # list[dict] 格式
    timeout=60000,           # 毫秒
    network_idle=True,       # 等待网络空闲
    hide_canvas=True,        # 隐藏 canvas 指纹
    block_webrtc=True,       # 阻止 WebRTC 泄露 IP
    disable_resources=False, # 禁用图片/字体加速
)

Cookie 格式: list[dict] — [{'name': 'n', 'value': 'v', 'domain': '.site.com', 'path': '/'}] 超时单位: 毫秒

DynamicFetcher(Playwright,JS 渲染)

from scrapling.fetchers import DynamicFetcher

page = DynamicFetcher.fetch(
    url,
    headless=True,
    cookies=None,            # list[dict] 格式
    timeout=30000,           # 毫秒
    network_idle=True,       # 等待网络空闲
    wait_selector=None,      # 等待特定元素出现
    disable_resources=True,  # 跳过图片/字体/CSS 加速
)

Cookie 格式: list[dict] 超时单位: 毫秒

Selector(纯 HTML 解析,无网络请求)

from scrapling.parser import Selector

page = Selector(html_string, url='https://base-url.com')

Response 常用属性

page.status          # HTTP 状态码 (int)
page.text            # 原始 HTML/文本内容 (str)
page.url             # 最终 URL(可能经过重定向)
page.cookies         # 响应 cookie
page.headers         # 响应头

选择器方法

# CSS 选择器
page.css('div.content')              # 返回元素列表
page.css_first('h1')                 # 返回第一个匹配元素

# XPath 选择器
page.xpath('//div[@class="content"]')

# 文本提取伪元素
page.css('h1::text')                 # 提取文本内容
page.css('a::attr(href)')            # 提取属性值

# 获取所有匹配结果的文本
results = page.css('h1::text').getall()  # list[str]

# 获取第一个匹配结果的文本
result = page.css('h1::text').get()      # str | None

元素方法

element = page.css_first('div.post')

element.text                          # 直接子文本
element.get_all_text(strip=True)      # 递归获取所有文本
element.attrib                        # 属性字典
element.attrib.get('href')            # 获取单个属性
element.css('span.author::text')      # 在子树中继续选择
element.parent                        # 父元素
element.children                      # 子元素列表

正则提取

# 从文本中提取匹配
page.re(r'price: \$(\d+\.\d+)')      # list[str] — 所有匹配
page.re_first(r'price: \$(\d+\.\d+)')  # str | None — 第一个匹配