用DeepSeek+Crawl4AI生成智能爬虫框架
说真的,我之前写爬虫写得快吐了。每次搞一些项目,最费时间的不是拿数据,而是想怎么绕过反爬,怎么去页面里找到我想要的那一小撮信息。更别说那些五花八门的页面结构,写个 XPath 就跟玩“华容道”一样,今天能抓明天就不行。是不是有种,干爬虫干出了亲切的中年危机感?
后来我就开始琢磨:现在大模型都这么强了,写文章能写、写代码能写,那为啥不能帮我抓点网页数据呢?再不济你能告诉我“我要的数据在哪”也行啊,别让我天天瞪着 DOM 树啊兄弟!直到我遇到了 Crawl4AI,配合 Deepseek 大模型用下来之后,我真想跟公司老板说:“这不是员工,这是员工的外挂。”
是不是每次写 XPath 的时候,都会在想人生?
我印象特别深,有次做一个生物医药产品库的采集,本来以为就是个正常的表格抓取,结果那站点每点开一个产品详情页,就像开盲盒,页面结构变着法儿给你整花活,有的用表格、有的用 div 嵌套,还有些直接写个 Canvas 让你截图。那时候真觉得:你一个卖化学品的网站,怎么整这么多 UI 特效啊,你是怕客户看不见价格吗?
就在我头秃、想跑路的时候,朋友给我安利了这个“长得像爬虫工具,实则 LLM 联动助手”的神器——Crawl4AI(https://github.com/unclecode/crawl4ai)。
说白了,它就是个能跑在浏览器里的智能爬虫系统,配合 AI 模型(我用的是 Deepseek),你只需要告诉它“我要表格里的价格、纯度、货号”这些字段,它就自己去爬网页,自己分析结构,自己提取出来,还能格式化成 JSON。连我那点脆弱的代码洁癖都给它治好了,干净整洁还规范。
Crawl4AI + Deepseek 怎么玩的?
先来说个简单场景:我要抓某化学品销售页面上的产品信息,像什么 CAS 编号、分子式、纯度、价格这些。以前我可能要:
- 抓网页源代码;
- 手动分析 DOM;
- 写 CSS/XPath;
- 遇到动态加载还要上 Selenium,配合等待时间、节点监听。
用 Crawl4AI,直接来一波轻操作:
python
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 的执行支持:
python
result = await crawler.arun(
url="https://动态内容站点.com",
js_code="window.scrollTo(0, document.body.scrollHeight);",
wait_for="document.querySelector('.loaded')"
)
它真的是在浏览器里面执行你写的 JS 脚本,把网页滚动一遍,再等指定的节点加载出来,确保你抓到的是“最终呈现”的完整内容。你不再需要疯狂调试“点击事件”和 DOM 延迟加载,Crawl4AI 扛下了这些事,咱只负责收菜。
配置灵活到变态
说个平时不太被关注但我特别在意的点:错误处理。
爬虫一旦遇上断网、页面结构突变或者超时,如果报错信息不给力,排查就跟刮彩票一样难受。但 Crawl4AI 做了详细的日志提示和异常捕获,甚至你可以自己定义在什么阶段执行什么钩子函数:
python
try:
result = await crawler.arun(url="https://任意页面.com")
except Exception as e:
print("爬虫崩了,兄弟来看一下是啥情况:", e)
钩子函数还可以自定义行为,比如在爬之前自动登录、加载 Cookie,或者在爬完之后统一清洗格式。这种可控又可扩展的设计,对于稍微复杂点的项目真的是解放了人力。
真实案例
我搞了个实验,拿 ChemShuttle 这种做化学合成产品的站点做了测试目标。我让 Deepseek 分析页面中一个复杂的产品信息表格,并返回结构化数据,结果如下:
json
[
{
"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 标签!