乐于分享
好东西不私藏

用 OpenClaw 构建自动爬虫,从 0 到 1 实战教程

用 OpenClaw 构建自动爬虫,从 0 到 1 实战教程

"写个爬虫要多久?"

以前你要:

  • 分析网页结构(30 分钟)
  • 写解析代码(1 小时)
  • 处理反爬(2 小时)
  • 调试修复(1 小时)

现在,用 OpenClaw + AI 代理,10 分钟搞定。


🎯 实战目标

任务:自动抓取 GitHub Trending 项目

# 期望输出{"name": "openclaw/openclaw","stars": "15.2k","description": "AI 自动化框架","language": "Python"}

🔧 工具准备

工具
用途
OpenClaw
AI 代理框架
Playwright
浏览器自动化
Python
数据处理

安装:

npm install -g openclawpip install playwrightplaywright install

📝 步骤 1:配置 OpenClaw

创建配置文件config.json:

{"name":"github-trending-crawler","description":"自动抓取 GitHub Trending","triggers":["每天 9:00"],"actions":[{"type":"browser","url":"https://github.com/trending","screenshot":true},{"type":"extract","selector":"article.Box-row","fields":["name","stars","description"]},{"type":"save","format":"json","path":"./output/trending.json"}]}

🤖 步骤 2:让 AI 生成代码

提示词:

请用 OpenClaw 和 Playwright 写一个爬虫:- 目标:https://github.com/trending- 提取:项目名称、star 数、描述、语言- 输出:JSON 格式- 要求:处理反爬、添加延迟、错误重试

AI 生成的代码:

from playwright.async_api import async_playwrightimport jsonimport asyncioasyncdefcrawl_github_trending():asyncwith async_playwright() as p:        browser = await p.chromium.launch(            headless=True,            args=['--no-sandbox']        )        page = await browser.new_page()# 访问页面await page.goto('https://github.com/trending',                        wait_until='networkidle')# 提取数据        projects = await page.evaluate('''() => {            const rows = document.querySelectorAll('article.Box-row');            return Array.from(rows).map(row => ({                name: row.querySelector('h2 a')?.textContent.trim(),                stars: row.querySelector('[aria-label="Stars"]')?.textContent.trim(),                description: row.querySelector('p')?.textContent.trim(),                language: row.querySelector('[itemprop="programmingLanguage"]')?.textContent.trim()            }));        }''')await browser.close()return projects# 运行projects = asyncio.run(crawl_github_trending())withopen('trending.json', 'w') as f:    json.dump(projects, f, indent=2)

🪝 步骤 3:处理反爬

常见问题 + 解决方案:

# 1. 设置 User-Agentawait page.set_extra_http_headers({'User-Agent': 'Mozilla/5.0 ...'})# 2. 添加随机延迟import randomawait asyncio.sleep(random.uniform(2, 5))# 3. 使用代理池proxy = {'server': 'http://proxy.example.com:8080','username': 'user','password': 'pass'}browser = await p.chromium.launch(proxy=proxy)# 4. 处理验证码(需要人工介入)ifawait page.query_selector('#captcha'):print("⚠️ 检测到验证码,需要人工处理")await browser.close()

📊 步骤 4:数据清洗

原始数据:

{"name":"  openclaw/openclaw  ","stars":"15.2k  ","description":null}

清洗代码:

defclean_data(projects):    cleaned = []for p in projects:        cleaned.append({'name': p['name'].strip() if p['name'] else'','stars': int(p['stars'].replace('k', '000').strip()) if p['stars'] else0,'description': p['description'].strip() if p['description'] else'','language': p['language'].strip() if p['language'] else'Unknown'        })return cleaned

📤 步骤 5:推送结果

推送到飞书/微信:

import requestsdefsend_to_feishu(data, webhook_url):    content = "🔥 GitHub Trending Top 5\n\n"for i, p inenumerate(data[:5], 1):        content += f"{i}. {p['name']} ⭐{p['stars']}\n"    requests.post(webhook_url, json={"msg_type": "text","content": {"text": content}    })

🎁 完整代码

crawler.py:

from playwright.async_api import async_playwrightimport jsonimport asyncioimport randomclassGithubTrendingCrawler:def__init__(self):self.url = "https://github.com/trending"asyncdefcrawl(self):asyncwith async_playwright() as p:            browser = await p.chromium.launch(headless=True)            page = await browser.new_page()await page.goto(self.url, wait_until='networkidle')await asyncio.sleep(random.uniform(2, 5))            projects = awaitself.extract_data(page)await browser.close()returnself.clean_data(projects)asyncdefextract_data(self, page):returnawait page.evaluate('''() => {            const rows = document.querySelectorAll('article.Box-row');            return Array.from(rows).map(row => ({                name: row.querySelector('h2 a')?.textContent,                stars: row.querySelector('[aria-label="Stars"]')?.textContent,                description: row.querySelector('p')?.textContent,                language: row.querySelector('[itemprop="programmingLanguage"]')?.textContent            }));        }''')defclean_data(self, projects):# 清洗逻辑...pass# 运行if __name__ == "__main__":    crawler = GithubTrendingCrawler()    data = asyncio.run(crawler.crawl())print(json.dumps(data, indent=2))

📌 总结

传统爬虫:

分析 → 编码 → 调试 → 修复3-4 小时

AI 代理爬虫:

描述需求 → AI 生成 → 微调 → 运行10 分钟

关键:

  • ✅ 让 AI 写基础代码
  • ✅ 人工处理反爬和边界情况
  • ✅ 添加监控和告警

你用 AI 写过爬虫吗?评论区聊聊~

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料