2025 AI爬蟲最佳實踐:Deepseek+Crawl4ai+Playwright MCP

0 評論 4884 瀏覽 9 收藏 15 分鐘

在 2025 年,AI 爬蟲領(lǐng)域迎來了全新變革。本文聚焦于 2025AI 爬蟲最佳實踐,深入實戰(zhàn)演示如何運(yùn)用 Deepseek、Crawl4ai 以及 Playwright MCP 這三大工具組合,實現(xiàn)高效、智能的爬蟲操作,從環(huán)境搭建到代碼實踐,再到動態(tài)加載與數(shù)據(jù)提取,全方位展現(xiàn) AI 爬蟲的魅力與潛力,讓你輕松掌握前沿爬蟲技術(shù)。

今天來做一個實戰(zhàn):用Crawl4ai做一次AI爬蟲,看看是什么樣子的

小試牛刀

先根據(jù)官方的代碼安裝起來:

# 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())

官方的測試是一個新聞網(wǎng)站

新建py文件,把代碼黏貼進(jìn)去,直接運(yùn)行后,結(jié)果顯示,確實能正常抓取。

提取表格

最新版的Crawl4ai 有個新的功能:把網(wǎng)站上的表格抓取下來后,解析成pandas的DataFrame格式。

簡單來說,之前我們需要手動去把下載下來的數(shù)據(jù),清洗、結(jié)構(gòu)化后,轉(zhuǎn)成DataFrame格式再做分析。

現(xiàn)在是可以一步到位了。

我們看下這個官方示例給的是一個虛擬貨幣的網(wǎng)站,我們需要把下圖中的表格給爬下來,并轉(zhuǎn)成python 的表格,可以直接用于下一步分析。

但這里出了一個問題:官方給的示例無法用,如圖,是不完整的,都是紅色波浪線,直接運(yùn)行會報錯,我代碼能力又差,不會改,怎么辦?

很簡單,讓AI去改就好了。直接上Cursor。

但接下來又有新問題:因為這是crawl4ai的新功能,有些AI應(yīng)該是沒有學(xué)習(xí)的。

此時就可以用我們之前介紹的context7MCP,讓AI自己去學(xué)習(xí)最新的文檔,再來補(bǔ)全代碼。紅溫了!Cursor又亂寫代碼?1分鐘裝上Context7 MCP享受實時文檔檢索服務(wù)

我用的提示詞:

文件代碼是crawl4ai的官方示例,效果是把如圖 的網(wǎng)站表格數(shù)據(jù)抓取下來,保存為pandas的dataframe格式但這個代碼不完整,需要你用context7 mcp 找到最新的crawl4ai文檔,把代碼補(bǔ)充完整確保能正常使用

AI一頓操作之后,拿到的代碼直接運(yùn)行就能跑了,我們看到已經(jīng)順利把前面網(wǎng)站里的表格下載成了DF

還是挺順利的,打開Excel看更完整一些,接下來就能用這些數(shù)據(jù)做分析。

動態(tài)加載

現(xiàn)在的網(wǎng)站很少靜態(tài)了,大多數(shù)都是動態(tài)加載,也就是需要不斷滾動才會加載新的內(nèi)容,如果這個流程要自己處理就太麻煩了。

幸好,Crawl4ai內(nèi)置了javascript的支持,我們可以直接寫一句js代碼,就能讓頁面一滾到底把所有內(nèi)容加載。result = await crawler.arun(? ? url=”https://動態(tài)內(nèi)容站點.com”,? ? js_code=”window.scrollTo(0, document.body.scrollHeight);”,? ? wait_for=”document.querySelector(‘.loaded’)”)

OK,至此,我們已經(jīng)跑通了Crawl4ai 官方給的爬蟲示例代碼。但還沒用上AI的地方。

要知道,我們之所以用這些框架,就是想讓AI來幫我們解決爬蟲中的難題。

所以接下來我們來看下怎么在Crawl4ai用AI來做爬蟲?進(jìn)階:大模型動態(tài)加載爬取電商評論

還是業(yè)務(wù)場景先行,我選擇了一個高頻的場景:電商商品評論爬取。(后續(xù)爬下來的評論數(shù)據(jù)還可以做文本分析,挖掘出有商業(yè)價值的信息)

網(wǎng)址是:https://www.amazon.com/PawSwing-AutoComb-Automatic-Surround-biomimetic/dp/B0DMSVNTC1

往下翻能看到評論列表:

利用playwright MCP初始化腳本

在原先Cursor的窗口下,直接讓AI先幫我們完成代碼的撰寫:現(xiàn)在需要你寫一個Crawl4ai的腳本,把這個亞馬遜產(chǎn)品下的評論抓取出來:顧客姓名、標(biāo)題、國家、時間、評論內(nèi)容等,你可以先用playwright mcp去看一下這個網(wǎng)站,然后再修改

發(fā)現(xiàn)沒有,我沒有讓AI直接去寫代碼,而是讓它先去看一眼這個網(wǎng)站長什么樣,然后再寫代碼。

因為每個網(wǎng)站加載流程、速度、結(jié)構(gòu)都是不同的,貿(mào)貿(mào)然寫一個通用的代碼,很可能跑不通。

而Playwright MCP的介紹與安裝我之前也說過,可以直接跳轉(zhuǎn)這個文章去學(xué)習(xí):用 Playwright MCP 讓 AI 改它自己寫的屎山代碼

話說回來,我們已經(jīng)能看到AI Called MCP tool,自動打開亞馬遜網(wǎng)站,并且`get_visible_html`,也就是看了一眼。

得到的代碼如下,整體很長,我截了一些關(guān)鍵部分,包括建議也放到了注釋里:

1. 定義亞馬遜評論的數(shù)據(jù)模型

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. 設(shè)置AI爬取數(shù)據(jù)的策略,關(guān)鍵就是提示詞

strategy = LLMExtractionStrategy(

llm_config=llm_config,

schema=AmazonReview.model_json_schema(),

extraction_type=”schema”,

instruction=f”””

從提供的HTML內(nèi)容中提取亞馬遜產(chǎn)品評論信息。

評論通常包含在一個帶有 ‘data-hook=”review”‘ 屬性的<div>元素中。

請為每個評論提取以下信息,并構(gòu)造成一個JSON對象列表:

1. ?`customer_name`: 評論者的名字,通常在一個帶有 ‘data-hook=”genome-widget”‘ 的span元素內(nèi)或附近。

2. ?`review_title`: 評論的標(biāo)題,通常在一個帶有 ‘data-hook=”review-title”‘ 的span或a元素內(nèi),可能是加粗的文本。

3. ?`country_and_date`: 評論的國家和日期,通常在一個帶有 ‘data-hook=”review-date”‘ 的span元素內(nèi),格式類似于 “Reviewed in [國家] on [日期]”。

4. ?`review_body`: 評論的正文內(nèi)容,通常在一個帶有 ‘data-hook=”review-body”‘ 的span元素內(nèi)。

5. ?`image_urls`: 評論中用戶上傳的圖片URL列表。圖片通常是<img>標(biāo)簽,其父元素可能帶有 ‘review-image-tile’ 或類似class。請?zhí)崛?lt;img>標(biāo)簽的’src’屬性。如果沒有圖片,則此字段為null或空列表[]。

6. ?`rating`: 評論的星級評分,通常在評論標(biāo)題附近或評論正文開頭。

確保提取盡可能多的評論。忽略頁面上非評論區(qū)域的內(nèi)容。

“””,

chunk_token_threshold=8000, # 改回合理的分塊閾值

apply_chunking=True, # 對大型頁面進(jìn)行分塊處理

input_format=”html”,

verbose=True# 開啟LLM策略的詳細(xì)日志

)

# 4. 對瀏覽器的設(shè)置,尤其是反爬厲害的網(wǎng)站一定要設(shè)置

browser_config = BrowserConfig(

headless=False, ?# 可以設(shè)為True在后臺運(yùn)行

java_script_enabled=True, ?# 確保JavaScript加載評論

# 可以添加代理、user-agent等配置來模擬真實用戶,減少被屏蔽的風(fēng)險

# 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# 開啟瀏覽器配置的詳細(xì)日志

)

# 5. 爬蟲配置

crawler_config = CrawlerRunConfig(

cache_mode=CacheMode.BYPASS,

page_timeout=90000, ?# 增加頁面加載超時時間,亞馬遜頁面可能較慢

extraction_strategy=strategy,

# 增加等待時間,確保動態(tài)加載的評論內(nèi)容出現(xiàn)

# 注意:crawl4ai目前沒有直接的wait_for_selector或類似playwright的精細(xì)等待機(jī)制

# 可以通過 page_timeout 間接控制等待時間,或者后續(xù)考慮用playwright直接操作

verbose=True# 開啟爬蟲運(yùn)行的詳細(xì)日志

)

# 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’)”

)

完成爬取

看下結(jié)果還是不錯的

尤其是image_url能直接把圖片地址整理好。

Crawl4ai的邏輯是會一開始先把HTML全部扔給AI然后讓AI出解析的策略,再拆分成多個模塊逐個給到AI去解析數(shù)據(jù)。

這里就有個要點:選擇模型要注意支持「大上下文」的

我一開始選的deepseek v3 ,太小了,導(dǎo)致一開始啃不下整個HTML導(dǎo)致報錯

后來我改用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的費(fèi)用來算,大概是1.3美金(Gemini幫我算的,幸好我用的是免費(fèi)的版本。)

總結(jié)

說實話,爬蟲的話RPA效果好很多,但RPA似乎是一個偽命題,需要自己去搭流程、去抓元素、去設(shè)計抓取邏輯等等,一個無代碼工具反而讓小白無所適從,得從頭好好學(xué)習(xí)才行。

現(xiàn)在AI爬蟲比較可行的方案是基于Cursor,搭配Playwright MCP去開發(fā)Crawl4ai的腳本。

雖然現(xiàn)在還不是非常好用,但或許在不久的未來會是一個很絲滑的AI爬蟲體驗。

本文由人人都是產(chǎn)品經(jīng)理作者【餅干哥哥】,微信公眾號:【餅干哥哥AGI】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!