DeepSeek教程

Crawl4AI 是一款结合大语言模型的智能开源爬虫工具,专注于网页数据提取与处理,适合 AI 数据采集和动态网页抓取

说真的,我之前写爬虫写得快吐了。每次搞一些项目,最费时间的不是拿数据,而是想怎么绕过反爬,怎么去页面里找到我想要的那一小撮信息。更别说那些五花八门的页面结构,写个 XPath 就跟玩 “华容道” 一样,今天能抓明天就不行。是不是有种,干爬虫干出了亲切的中年危机感?

后来我就开始琢磨:现在大模型都这么强了,写文章能写、写代码能写,那为啥不能帮我抓点网页数据呢?再不济你能告诉我 “我要的数据在哪” 也行啊,别让我天天瞪着 DOM 树啊兄弟!直到我遇到了 Crawl4AI,配合 Deepseek 大模型用下来之后,我真想跟公司老板说:“这不是员工,这是员工的外挂。”

是不是每次写 XPath 的时候,都会在想人生?

我印象特别深,有次做一个生物医药产品库的采集,本来以为就是个正常的表格抓取,结果那站点每点开一个产品详情页,就像开盲盒,页面结构变着法儿给你整花活,有的用表格、有的用 div 嵌套,还有些直接写个 Canvas 让你截图。那时候真觉得:你一个卖化学品的网站,怎么整这么多 UI 特效啊,你是怕客户看不见价格吗?

就在我头秃、想跑路的时候,朋友给我安利了这个 “长得像爬虫工具,实则 LLM 联动助手” 的神器——**Crawl4AI(https://github.com/unclecode/crawl4ai)**。

说白了,它就是个能跑在浏览器里的智能爬虫系统,配合 AI 模型(我用的是 Deepseek),你只需要告诉它 “我要表格里的价格、纯度、货号” 这些字段,它就自己去爬网页,自己分析结构,自己提取出来,还能格式化成 JSON。连我那点脆弱的代码洁癖都给它治好了,干净整洁还规范。

Crawl4AI + Deepseek 怎么玩的?

先来说个简单场景:我要抓某化学品销售页面上的产品信息,像什么 CAS 编号、分子式、纯度、价格这些。以前我可能要:

  1. 抓网页源代码;
  2. 手动分析 DOM;
  3. 写 CSS/XPath;
  4. 遇到动态加载还要上 Selenium,配合等待时间、节点监听。

用 Crawl4AI,直接来一波轻操作:

from crawl4ai import AsyncWebCrawler
from crawl4ai.extraction_strategy import LLMExtractionStrategy
from pydantic import BaseModel

class Product(BaseModel):
    CASNo: str
    size: str
    price: str
    stock: str
    purity: str
    MF: str
    MW: str
    SMILES: str

strategy = LLMExtractionStrategy(
    provider="deepseek/deepseek-chat",
    api_token="你的API密钥",
    schema=Product.model_json_schema(),
    extraction_type="schema",
    instruction="从页面主表格提取出产品的 CASNo、purity、MF、MW、SMILES、size、price、stock",
    chunk_token_threshold=1000,
    apply_chunking=True,
    input_format="markdown",
)

async def run():
    async with AsyncWebCrawler() as crawler:
        result = await crawler.arun(
            url="https://某化学站点地址.com/product-detail",
            extraction_strategy=strategy
        )
        print(result.extracted_content)


整个过程就是——你说你要啥,它去找给你。你都不用亲自 “打怪”,它像一个聪明的“实习生” 替你去网页上自己找答案。

这里需要注意的是 DeepSeek 获取 API 密钥可能会有一些波折,需要申请第三方的 API,大家可以参考这个教程:【获取 API KEY】

动态网页照样抓

有些站点爱搞那种 “页面初始不加载数据、滚动再加载” 的骚操作,这种以前都得配合浏览器驱动模拟操作,但现在 Crawl4AI 内置了对 JavaScript 的执行支持:

result = await crawler.arun(
    url="https://动态内容站点.com",
    js_code="window.scrollTo(0, document.body.scrollHeight);",
    wait_for="document.querySelector('.loaded')"
)


它真的是在浏览器里面执行你写的 JS 脚本,把网页滚动一遍,再等指定的节点加载出来,确保你抓到的是 “最终呈现” 的完整内容。你不再需要疯狂调试 “点击事件” 和 DOM 延迟加载,Crawl4AI 扛下了这些事,咱只负责收菜。

配置灵活到变态

说个平时不太被关注但我特别在意的点:错误处理。

爬虫一旦遇上断网、页面结构突变或者超时,如果报错信息不给力,排查就跟刮彩票一样难受。但 Crawl4AI 做了详细的日志提示和异常捕获,甚至你可以自己定义在什么阶段执行什么钩子函数:

try:
    result = await crawler.arun(url="https://任意页面.com")
except Exception as e:
    print("爬虫崩了,兄弟来看一下是啥情况:", e)


钩子函数还可以自定义行为,比如在爬之前自动登录、加载 Cookie,或者在爬完之后统一清洗格式。这种可控又可扩展的设计,对于稍微复杂点的项目真的是解放了人力。

真实案例

我搞了个实验,拿 ChemShuttle 这种做化学合成产品的站点做了测试目标。我让 Deepseek 分析页面中一个复杂的产品信息表格,并返回结构化数据,结果如下:

[
  {
    "CASNo": "269398-78-9",
    "size": "1g",
    "price": "$150.00",
    "stock": "Typically in stock",
    "purity": "95%",
    "MF": "C25H22N2O6",
    "MW": "446.459",
    "SMILES": "OC(=O)C[C@@H]..."
  },
  ...
]


这个表格有合并单元格、隐藏字段、还有动态价格加载,我本来都做好自己调格式半天的准备了,结果 Deepseek 一步拿捏,全提出来,格式还规整得跟产品数据库一样。这种场景下,我真的想说一句:你再让我手写 XPath,那你就是让我倒退回石器时代。

最后

现在我已经习惯了用 Crawl4AI + Deepseek 来干活。不光省事,它最让我满意的是:省脑子。

过去写爬虫,除了要懂代码,还得像侦探一样去琢磨网站结构。现在我只要告诉 AI:我要这个字段,它帮我提出来。我从 “数据搬运工” 成功转型为“爬虫调度员”,一人一 AI,效率翻倍不止。

还有一个细节特别感人:它支持本地部署模型,比如用 Deepseek R1 版本在本地跑,不联网也能提取内容,既安全又节省请求成本。

这工具真是适合所有和数据打交道的打工人,尤其是做爬虫、数据分析的兄弟姐妹,建议赶紧试一下,别再写 XPath 折磨自己了,咱要做的是高效信息获取,不是手工抓 HTML 标签!