使用 Scrapfly SDK(scrapfly-sdk)在 TypeScript 或 JavaScript 中进行网页抓取,用于用户请求抓取 URL、绕过反爬虫防护、渲染页面等场景。
Scrappfly TypeSDK. 使用废蝇-sdk包从TypeScript/JavaScript. 中刮网页 使用代理旋转,反机器人绕行(ASP),Java是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
使用 scrapfly-sdk 包,可在 TypeScript/JavaScript 中抓取网页,支持代理轮换、反爬绕过(ASP)、JavaScript 渲染、截图及 AI 提取。兼容 Node.js、Deno、Bun 及边缘运行时(Cloudflare Workers、AWS Lambda)。
npm install scrapfly-sdk # Deno / JSR:从 'jsr:@scrapfly/scrapfly-sdk' 导入 export SCRAPFLY_API_KEY="your-api-key"
请在 scrapfly.io 获取您的 API 密钥。
import { ScrapflyClient, ScrapeConfig } from 'scrapfly-sdk';
const client = new ScrapflyClient({ key: process.env.SCRAPFLY_API_KEY });
const result = await client.scrape(
new ScrapeConfig({ url: 'https://web-scraping.dev/products' }),
);
console.log(result.result.content);
ScrapeConfig 使用 snake_case 风格的选项键名,与后端 API 保持一致。
const result = await client.scrape(
new ScrapeConfig({
url: 'https://web-scraping.dev/products',
asp: true, // 绕过反爬机制
country: 'us', // 代理所在国家(ISO 3166-1 alpha-2 编码)
proxy_pool: 'public_residential_pool',
render_js: true, // 启用无头浏览器渲染
wait_for_selector: 'div.product', // 需配合 render_js 使用
rendering_wait: 5000, // 毫秒,需配合 render_js 使用
format: 'markdown', // 可选值:raw | clean_html | json | markdown | text
}),
);
import { ScreenshotConfig, ExtractionConfig } from 'scrapfly-sdk';
const shot = await client.screenshot(
new ScreenshotConfig({ url: 'https://web-scraping.dev/products' }),
);
// shot.image 为二进制图像数据
const html = (await client.scrape(
new ScrapeConfig({ url: 'https://web-scraping.dev/reviews' }),
)).result.content;
const data = await client.extract(
new ExtractionConfig({
body: html,
content_type: 'text/html',
extraction_prompt: 'extract the reviews as JSON with fields: review, date, rating, author',
}),
);
console.log(data.data);
const configs = [
new ScrapeConfig({ url: 'https://web-scraping.dev/products?page=1' }),
new ScrapeConfig({ url: 'https://web-scraping.dev/products?page=2' }),
];
for await (const result of client.concurrentScrape(configs)) {
console.log(result.result.content.slice(0, 100));
}
render_js: true 是启用 rendering_wait、wait_for_selector 和截图功能的前提条件asp: true 的同时,指定 proxy_pool: 'public_residential_pool'format: 'markdown'key 参数传入(例如传入 process.env.SCRAPFLY_API_KEY)result.result.content 访问