网站首页 > 编程文章 正文
在 2025 年,AI 爬虫领域迎来了全新变革。本文聚焦于 2025AI 爬虫最佳实践,深入实战演示如何运用 Deepseek、Crawl4ai 以及 Playwright MCP 这三大工具组合,实现高效、智能的爬虫操作,从环境搭建到代码实践,再到动态加载与数据提取,全方位展现 AI 爬虫的魅力与潜力,让你轻松掌握前沿爬虫技术。
今天来做一个实战:用Crawl4ai做一次AI爬虫,看看是什么样子的
小试牛刀
先根据官方的代码安装起来:
# Install the package
pip install -U crawl4ai
# Run post-installation setup
crawl4ai-setup
# Verify your installation
crawl4ai-doctor
最后看到下图的样子,就证明安装、初始化成功了。
接下来我们测一下官方给的示例。
import asyncio
from crawl4ai import *
async def main:
async with AsyncWebCrawler as crawler:
result = await crawler.arun(
url=”https://www.nbcnews.com/business”,
)
print(result.markdown)
if __name__ == “__main__”:
asyncio.run(main)
官方的测试是一个新闻网站
新建py文件,把代码黏贴进去,直接运行后,结果显示,确实能正常抓取。
提取表格
最新版的Crawl4ai 有个新的功能:把网站上的表格抓取下来后,解析成pandas的DataFrame格式。
简单来说,之前我们需要手动去把下载下来的数据,清洗、结构化后,转成DataFrame格式再做分析。
现在是可以一步到位了。
我们看下这个官方示例给的是一个虚拟货币的网站,我们需要把下图中的表格给爬下来,并转成python 的表格,可以直接用于下一步分析。
但这里出了一个问题:官方给的示例无法用,如图,是不完整的,都是红色波浪线,直接运行会报错,我代码能力又差,不会改,怎么办?
很简单,让AI去改就好了。直接上Cursor。
但接下来又有新问题:因为这是crawl4ai的新功能,有些AI应该是没有学习的。
此时就可以用我们之前介绍的context7MCP,让AI自己去学习最新的文档,再来补全代码。红温了!Cursor又乱写代码?1分钟装上Context7 MCP享受实时文档检索服务
我用的提示词:
文件代码是crawl4ai的官方示例,效果是把如图 的网站表格数据抓取下来,保存为pandas的dataframe格式但这个代码不完整,需要你用context7 mcp 找到最新的crawl4ai文档,把代码补充完整确保能正常使用
AI一顿操作之后,拿到的代码直接运行就能跑了,我们看到已经顺利把前面网站里的表格下载成了DF
还是挺顺利的,打开Excel看更完整一些,接下来就能用这些数据做分析。
动态加载
现在的网站很少静态了,大多数都是动态加载,也就是需要不断滚动才会加载新的内容,如果这个流程要自己处理就太麻烦了。
幸好,Crawl4ai内置了javascript的支持,我们可以直接写一句js代码,就能让页面一滚到底把所有内容加载。result = await crawler.arun( url=”https://动态内容站点.com”, js_code=”window.scrollTo(0,
document.body.scrollHeight);”, wait_for=”document.querySelector(‘.loaded’)”)
OK,至此,我们已经跑通了Crawl4ai 官方给的爬虫示例代码。但还没用上AI的地方。
要知道,我们之所以用这些框架,就是想让AI来帮我们解决爬虫中的难题。
所以接下来我们来看下怎么在Crawl4ai用AI来做爬虫?进阶:大模型动态加载爬取电商评论
还是业务场景先行,我选择了一个高频的场景:电商商品评论爬取。(后续爬下来的评论数据还可以做文本分析,挖掘出有商业价值的信息)
网址是:
https://www.amazon.com/PawSwing-AutoComb-Automatic-Surround-biomimetic/dp/B0DMSVNTC1
往下翻能看到评论列表:
利用playwright MCP初始化脚本
在原先Cursor的窗口下,直接让AI先帮我们完成代码的撰写:现在需要你写一个Crawl4ai的脚本,把这个亚马逊产品下的评论抓取出来:顾客姓名、标题、国家、时间、评论内容等,你可以先用playwright mcp去看一下这个网站,然后再修改
发现没有,我没有让AI直接去写代码,而是让它先去看一眼这个网站长什么样,然后再写代码。
因为每个网站加载流程、速度、结构都是不同的,贸贸然写一个通用的代码,很可能跑不通。
而Playwright MCP的介绍与安装我之前也说过,可以直接跳转这个文章去学习:用 Playwright MCP 让 AI 改它自己写的屎山代码
话说回来,我们已经能看到AI Called MCP tool,自动打开亚马逊网站,并且`get_visible_html`,也就是看了一眼。
得到的代码如下,整体很长,我截了一些关键部分,包括建议也放到了注释里:
1. 定义亚马逊评论的数据模型
classAmazonReview(BaseModel):
customer_name:
review_title:
country_and_date:
review_body:
image_urls:
rating:
# 2. 使用LLMConfig来配置AI模型
llm_config = LLMConfig(
provider=provider,
api_token=api_token,
base_url=base_url
)
# 3. 设置AI爬取数据的策略,关键就是提示词
strategy = LLMExtractionStrategy(
llm_config=llm_config,
schema=AmazonReview.model_json_schema,
extraction_type=”schema”,
instruction=f”””
从提供的HTML内容中提取亚马逊产品评论信息。
评论通常包含在一个带有 ‘data-hook=”review”‘ 属性的<div>元素中。
请为每个评论提取以下信息,并构造成一个JSON对象列表:
1. `customer_name`: 评论者的名字,通常在一个带有 ‘data-hook=”genome-widget”‘ 的span元素内或附近。
2. `review_title`: 评论的标题,通常在一个带有 ‘data-hook=”review-title”‘ 的span或a元素内,可能是加粗的文本。
3. `country_and_date`: 评论的国家和日期,通常在一个带有 ‘data-hook=”review-date”‘ 的span元素内,格式类似于 “Reviewed in [国家] on [日期]”。
4. `review_body`: 评论的正文内容,通常在一个带有 ‘data-hook=”review-body”‘ 的span元素内。
5. `image_urls`: 评论中用户上传的图片URL列表。图片通常是<img>标签,其父元素可能带有 ‘review-image-tile’ 或类似class。请提取<img>标签的’src’属性。如果没有图片,则此字段为null或空列表。
6. `rating`: 评论的星级评分,通常在评论标题附近或评论正文开头。
确保提取尽可能多的评论。忽略页面上非评论区域的内容。
“””,
chunk_token_threshold=8000, # 改回合理的分块阈值
apply_chunking=True, # 对大型页面进行分块处理
input_format=”html”,
verbose=True# 开启LLM策略的详细日志
)
# 4. 对浏览器的设置,尤其是反爬厉害的网站一定要设置
browser_config = BrowserConfig(
headless=False, # 可以设为True在后台运行
java_script_enabled=True, # 确保JavaScript加载评论
# 可以添加代理、user-agent等配置来模拟真实用户,减少被屏蔽的风险
# user_agent=”Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36″
viewport={“width”: 1280, “height”: 800},
verbose=True# 开启浏览器配置的详细日志
)
# 5. 爬虫配置
crawler_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
page_timeout=90000, # 增加页面加载超时时间,亚马逊页面可能较慢
extraction_strategy=strategy,
# 增加等待时间,确保动态加载的评论内容出现
# 注意:crawl4ai目前没有直接的wait_for_selector或类似playwright的精细等待机制
# 可以通过 page_timeout 间接控制等待时间,或者后续考虑用playwright直接操作
verbose=True# 开启爬虫运行的详细日志
)
# 6. 开始爬取
result = await crawler.arun(
url=self.url,
config=self.crawler_config,
js_code=”window.scrollTo(0, document.body.scrollHeight);”,
wait_for=”document.querySelector(‘.loaded’)”
)
完成爬取
看下结果还是不错的
尤其是image_url能直接把图片地址整理好。
Crawl4ai的逻辑是会一开始先把HTML全部扔给AI然后让AI出解析的策略,再拆分成多个模块逐个给到AI去解析数据。
这里就有个要点:选择模型要注意支持「大上下文」的
我一开始选的deepseek v3 ,太小了,导致一开始啃不下整个HTML导致报错
后来我改用gemini-2.5-pro-exp-03-25才成功
很烧token,大家可以感受一下,我抓了24条评论,消耗了多少:
总消耗:992,830 (Prompt) + 6,348 (Completion) = 999,178 tokens
如果
gemini-2.5-pro-preview-03-25的费用来算,大概是1.3美金(Gemini帮我算的,幸好我用的是免费的版本。)
总结
说实话,爬虫的话RPA效果好很多,但RPA似乎是一个伪命题,需要自己去搭流程、去抓元素、去设计抓取逻辑等等,一个无代码工具反而让小白无所适从,得从头好好学习才行。
现在AI爬虫比较可行的方案是基于Cursor,搭配Playwright MCP去开发Crawl4ai的脚本。
虽然现在还不是非常好用,但或许在不久的未来会是一个很丝滑的AI爬虫体验。
本文由人人都是产品经理作者【饼干哥哥】,微信公众号:【饼干哥哥AGI】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载。
题图来自Unsplash,基于 CC0 协议。
猜你喜欢
- 2025-06-10 browser-use:AI 驱动的浏览器自动化神器——DOM识别与交互详解
- 2025-06-10 正确复制、重写别人的代码,不算抄袭
- 2025-06-10 “我们太乙变化大”——第一书记讲述贫困村变化
- 2025-06-10 如何在ReactJS应用程序中使用Wijmo控件?
- 2025-06-10 Edge Canary上架Play商城:实测性能提升明显 UI有所优化
- 2025-06-10 趋势科技杀软曝密码漏洞:允许远程代码执行
- 2025-06-10 如何坐南昌地铁2号线后通段乘火车?记者抢先体验
- 2025-06-10 微软发布轻量级 VS Code 工具,可完全在浏览器中运行
- 2024-08-12 JavaScript 开发人员更喜欢 Deno 的五大原因
- 2024-08-12 极简浏览器 Min(极简浏览器是谁家的)
你 发表评论:
欢迎- 06-1540套Solidworks草图素材分享,全部画出来你的草图模块就没问题了
- 06-15solidworks零件练习(法兰盘)(solidworks中的法兰是什么意思)
- 06-15solidworks零件拆图练习轴承(如何运用solidworks制作轴承)
- 06-15solidworks钣金练习25.6.11(solidworks钣金技巧)
- 06-1533篇 Solidworks公差查询(solidworks公差表)
- 06-15Solidworks的入门学习方法(solidworks入门基础教程视频)
- 06-15用SolidWorks画一个长相奇特的杯子
- 06-1540篇 Solidworks插件-迈迪工具集(solidworks2016迈迪插件)
- 最近发表
-
- 40套Solidworks草图素材分享,全部画出来你的草图模块就没问题了
- solidworks零件练习(法兰盘)(solidworks中的法兰是什么意思)
- solidworks零件拆图练习轴承(如何运用solidworks制作轴承)
- solidworks钣金练习25.6.11(solidworks钣金技巧)
- 33篇 Solidworks公差查询(solidworks公差表)
- Solidworks的入门学习方法(solidworks入门基础教程视频)
- 用SolidWorks画一个长相奇特的杯子
- 40篇 Solidworks插件-迈迪工具集(solidworks2016迈迪插件)
- 用SolidWorks画一个夹具,所有零件都在装配体里画的
- SolidWorks快速【正视于】的5种方法
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)