闲社

标题: 【教程】Firecrawl实战:用一行代码搞定网页数据抓取,告别手写爬虫 [打印本页]

作者: dcs2000365    时间: 昨天 21:26
标题: 【教程】Firecrawl实战:用一行代码搞定网页数据抓取,告别手写爬虫
前言

做AI项目最头疼的是什么?数据!训练模型需要数据,做RAG需要数据,做分析也需要数据。但网页数据抓取一直是门槛很高的活——要写爬虫、处理反爬、解析HTML、管理请求频率...

今天介绍一个GitHub 13.6万星的开源神器 Firecrawl,让你用一行代码就能抓取任何网页,还能自动转Markdown、处理动态页面、绕过反爬。

一、Firecrawl是什么?

Firecrawl是一个开源的网页抓取和转换API,核心能力:



GitHub地址:https://github.com/firecrawl/firecrawl

二、前置条件



三、实战步骤

步骤1:基础抓取——一行代码搞定

Python版本:
  1. from firecrawl import FirecrawlApp
  2. app = FirecrawlApp(api_key="your-api-key")
  3. # 抓取单个页面,自动转Markdown
  4. result = app.scrape_url("https://example.com")
  5. print(result["markdown"])
复制代码

Node.js版本:
  1. import FirecrawlApp from "@mendable/firecrawl-js";
  2. const app = new FirecrawlApp({ apiKey: "your-api-key" });
  3. const result = await app.scrapeUrl("https://example.com");
  4. console.log(result.markdown);
复制代码

就这么简单,不需要写xpath、不需要处理编码、不需要管User-Agent。

步骤2:抓取动态页面(SPA/JS渲染)

很多现代网站是React/Vue写的,内容靠JS动态加载。Firecrawl内置了浏览器渲染:
  1. # 抓取SPA页面,等待JS执行完成
  2. result = app.scrape_url(
  3.     "https://spa-example.com",
  4.     params={
  5.         "waitFor": 2000,  # 等待2秒让JS渲染
  6.         "screenshot": True  # 同时截图留存
  7.     }
  8. )
复制代码

步骤3:按Schema提取结构化数据

这是最强功能。定义一个JSON Schema,Firecrawl自动从页面提取对应字段:
  1. schema = {
  2.     "type": "object",
  3.     "properties": {
  4.         "title": {"type": "string"},
  5.         "author": {"type": "string"},
  6.         "publish_date": {"type": "string"},
  7.         "content_summary": {"type": "string"},
  8.         "tags": {
  9.             "type": "array",
  10.             "items": {"type": "string"}
  11.         }
  12.     },
  13.     "required": ["title", "content_summary"]
  14. }
  15. result = app.scrape_url(
  16.     "https://news-site.com/article/123",
  17.     params={"extract": {"schema": schema}}
  18. )
  19. # 直接拿到结构化JSON
  20. data = result["extracted_data"]
  21. print(data["title"])
  22. print(data["tags"])
复制代码

做RAG知识库、做竞品监控、做舆情分析,这个能力直接省掉80%的代码量。

步骤4:全站抓取(sitemap模式)

需要抓整个网站?不用自己遍历:
  1. # 抓取全站,自动发现所有页面
  2. result = app.crawl_url(
  3.     "https://docs.example.com",
  4.     params={
  5.         "limit": 100,  # 最多抓100页
  6.         "scrapeOptions": {"formats": ["markdown"]}
  7.     },
  8.     wait_until_done=True
  9. )
  10. # 拿到所有页面的Markdown
  11. for page in result["data"]:
  12.     print(f"URL: {page['url']}")
  13.     print(f"内容: {page['markdown'][:500]}...")
  14.     print("---")
复制代码

步骤5:批量URL处理

有几百个URL要抓?用批量接口:
  1. urls = [
  2.     "https://site1.com/page1",
  3.     "https://site2.com/page2",
  4.     "https://site3.com/page3"
  5. ]
  6. result = app.batch_scrape_urls(urls, {"formats": ["markdown"]})
复制代码

四、常见问题

Q1:免费额度够用吗?
A:免费版每月500 credits,轻度使用完全够。抓取一个页面约1 credit,批量抓取有优惠。

Q2:数据敏感不想用云服务?
A:Firecrawl完全开源,可以https://github.com/firecrawl/firecrawl拉代码本地部署,Docker一键启动。

Q3:遇到反爬怎么办?
A:Firecrawl内置了代理轮换、请求头随机化、速率控制。如果还是被拦,可以配置自己的代理池。

Q4:抓取结果不准确?
A:试试调整waitFor参数(等久一点让JS渲染),或者开启screenshot对比确认页面内容。

Q5:和Playwright/Puppeteer比有什么优势?
A:Playwright是浏览器自动化工具,你需要自己写抓取逻辑。Firecrawl是专门的抓取服务,自动处理渲染、解析、格式化,上层封装更完整。

五、实战场景推荐



六、总结

Firecrawl把网页抓取这个脏活累活封装得极其干净,从一行代码的基础抓取,到Schema提取、全站爬取、批量处理,覆盖了90%的数据抓取需求。

如果你还在手写爬虫、处理反爬、解析DOM,试试Firecrawl,把精力放回核心业务逻辑上。

相关资源:


有问题欢迎在楼下交流!




欢迎光临 闲社 (https://fzgmgmantis.xianshe.com/) Powered by Discuz! X5.0