程序员老鬼

不写XPath也能抓数据?Crawl4AI的魔力简直炸裂!

写爬虫的朋友们都知道,最头疼的部分往往不是抓取数据本身,而是如何绕过反爬机制,如何找到那些散布在页面里的数据。特别是面对不同结构的网页时,写 XPath 简直就是一场“智力挑战”。

但你有想过,爬虫能不能像写文章、写代码一样智能一些?不需要像“打怪”一样一条一条写代码,只需告诉它“我需要啥”,它就能直接提取出来?

幸运的是,这个问题我找到了答案:Crawl4AI 和 Deepseek 的组合。

跳过繁琐,智能爬虫来帮忙

让我先给大家描述一个场景。我曾经做过一个生物医药类产品的采集,原本觉得这只是个普通的表格抓取,结果一打开页面,简直是“盲盒”——每一个产品详情页的结构都不一样。这个是用表格,这个是用 div 嵌套,甚至有些页面直接用 Canvas 绘制数据,想抓取个价格都能给你难住。

Image

这时候,我开始怀疑自己的生命选择。谁能想到,卖化学品的网站还能在网页设计上玩得这么花哨?不过,在我快要放弃的时候,我碰到了一个神器——Crawl4AI。这款工具不仅仅是个爬虫,它结合了深度学习模型 Deepseek,能自动识别网页结构,提取出我需要的数据。

Crawl4AI开源地址:
https://github.com/unclecode/crawl4ai

Crawl4AI + Deepseek:给你全自动爬虫

通常,抓取一个化学品的价格、CAS 编号、分子式这些信息,之前需要做的事情大概是:

  1. 1. 抓取网页源代码;
  2. 2. 手动分析 DOM 结构;
  3. 3. 编写 CSS/XPath 规则;
  4. 4. 动态加载的页面还得用 Selenium,再配合超时设置和节点监听。

这些事情做起来繁琐又累人,简直像是爬虫版的“职场生存法则”。但如果用 Crawl4AI,这整个流程就能被简化成以下几行代码:

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

classProduct(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",
)

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

只需要告诉它你需要哪些字段,它就能自己去抓取网页并返回你需要的数据,格式整齐而且准确。就像是有了一个聪明的“助手”帮你分担繁重的工作,简直是让人省心又省力。

动态网页?没问题

很多网站为了避免直接暴露数据,常常使用滚动加载或者异步加载来展示内容。以前遇到这种情况,我不得不使用浏览器驱动模拟用户操作,或者手动滚动页面。但是,Crawl4AI 已经为这种情况准备好了:

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

它支持在浏览器中执行 JavaScript,这样你就可以通过编写简单的脚本去模拟页面滚动,等待指定的内容加载完成,然后再抓取。这不仅节省了大量调试时间,还能确保你抓取的是完整的、最终呈现的内容。

错误处理更友好

当爬虫遇到断网、页面结构变化等问题时,如果错误信息不够详细,往往排查起来像刮彩票一样痛苦。但 Crawl4AI 提供了详细的日志提示和异常捕获,甚至可以在不同的阶段执行不同的钩子函数。比如:

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

你还可以自定义行为,比如爬虫开始之前自动登录,或爬取完之后统一清理格式等,这种灵活配置让它在处理复杂项目时特别给力。

实际应用案例

我用 Deepseek 试了一下 Crawl4AI 在 ChemShuttle 站点上的表现,目标是抓取页面上复杂的化学产品信息。结果它不仅成功提取了表格内容,还能处理那些合并单元格、动态加载的字段,最终返回的 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]..."
},
  ...
]

可以说,这个过程让我彻底告别了手写 XPath 的时代。Deepseek 直接帮我把数据提取并格式化成了我需要的样式,效率提升了不少。

结语:从“搬运工”到“爬虫调度员”

通过 Crawl4AI 和 Deepseek,我已经不再是那个忙于编写 XPath 的“数据搬运工”,而变成了一个“爬虫调度员”。我只需要告诉 AI 我要什么,它就能自动为我提取数据。而且,这个工具的本地部署功能也让我在不联网的情况下就能跑模型,既安全又节省了请求成本。

如果你也在为写爬虫而烦恼,不妨试试这款工具,它不仅能解放你的双手,还能让你从繁琐的代码世界中抽身出来,专注于数据的高效获取。

最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek

也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。

-END-

ok,今天先说到这,老规矩,给大家分享一份不错的副业资料,感兴趣的同学可以链接我,微信:hls404 找我领取。

以上,就是今天的分享了,看完文章记得右下角点赞,也欢迎在评论区写下你的留言。