Skip to main content

LangChain Go 网页爬虫学习案例

这是一个使用 LangChain Go 构建的智能网页爬虫项目,展示了如何结合网页爬取和 AI 分析功能。

🚀 项目特性

  • 智能内容提取: 使用 goquery 库精确提取网页核心内容
  • AI 驱动分析: 集成 OpenAI GPT 模型进行内容分析和总结
  • 批量处理: 支持批量爬取多个网页
  • 数据持久化: 将结果保存为 JSON 格式
  • 友好输出: 提供详细的进度显示和结果摘要

📁 项目结构

langchain_scraper/
├── cmd/ # 主程序目录
│ ├── basic.go # 基础爬虫示例
│ ├── batch.go # 批量爬虫
│ └── enhanced.go # 增强版爬虫
├── pkg/ # 包目录
│ └── scraper/ # 爬虫工具包
│ ├── utils.go # 工具函数
│ └── utils_test.go # 测试文件
├── go.mod # Go 模块定义
├── .env.example # 环境变量模板
├── Makefile # 构建脚本
└── README.md # 项目说明

🛠️ 安装和设置

1. 安装依赖

go mod tidy

2. 设置 OpenAI API Key

复制环境变量模板:

cp .env.example .env

编辑 .env 文件,添加你的 OpenAI API Key:

OPENAI_API_KEY=your_actual_api_key_here

📖 使用说明

基础爬虫示例

运行基础爬虫,爬取默认网页(golang.org):

make run-basic
# 或直接运行
go run cmd/basic.go

爬取指定网页:

make run-basic-url
# 或直接运行
go run cmd/basic.go https://example.com

高级批量爬虫

运行批量爬虫,爬取默认网页列表:

make run-batch
# 或直接运行
go run cmd/batch.go

爬取自定义网页列表:

make run-batch-urls
# 或直接运行
go run cmd/batch.go https://golang.org https://pkg.go.dev https://go.dev/blog

增强版智能爬虫

运行增强版爬虫:

make run-enhanced
# 或直接运行
go run cmd/enhanced.go

爬取自定义网页:

make run-enhanced-urls
# 或直接运行
go run cmd/enhanced.go https://golang.org https://pkg.go.dev

🎯 功能演示

1. 基础爬虫功能

  • 爬取网页内容
  • 提取标题和主要文本
  • AI 内容总结
  • 智能问答

2. 批量爬虫功能

  • 批量处理多个 URL
  • 智能延迟避免被封
  • 结构化数据输出
  • JSON 格式结果保存

📊 输出示例

控制台输出

🚀 LangChain Go 网页爬虫学习案例
===============================
📖 正在爬取网页: https://golang.org/
✅ 成功爬取内容,共 2847 字符

📝 部分原始内容:
================
标题: The Go Programming Language

🤖 正在使用 AI 分析内容...

📊 AI 内容总结:
===============
Go 是 Google 开发的开源编程语言,专注于简洁性、可靠性和效率...

❓ 回答问题: 这个网站主要介绍什么?有什么特色功能?
=================================
🤖 AI 回答:
这个网站主要介绍 Go 编程语言...

JSON 输出格式

[
{
"url": "https://golang.org/",
"title": "The Go Programming Language",
"content": "网页内容文本...",
"summary": "AI 生成的内容摘要",
"keywords": ["Go", "编程语言", "Google"],
"timestamp": "2024-01-01T12:00:00Z",
"word_count": 1234
}
]

🔧 自定义配置

修改请求延迟

batch_scraper.go 中修改延迟时间:

// 创建批量爬虫(每次请求间隔 5 秒)
scraper, err := NewBatchScraper(5)

更换 AI 模型

在代码中修改模型配置:

llm, err := openai.New(
openai.WithToken(apiKey),
openai.WithModel("gpt-4"), // 使用 GPT-4
)

自定义内容提取规则

修改 CSS 选择器来提取特定内容:

// 只提取文章内容
doc.Find("article p, .content p").Each(func(i int, s *goquery.Selection) {
// 处理逻辑
})

🚨 注意事项

  1. API 费用: 使用 OpenAI API 会产生费用,请合理控制调用次数
  2. 请求频率: 批量爬取时建议设置适当延迟,避免被目标网站封锁
  3. 内容长度: 长文本会被截断以适应 AI 模型的 token 限制
  4. 网站政策: 请遵守目标网站的 robots.txt 和使用条款

🎓 学习要点

LangChain Go 集成

  • 如何初始化和配置 LLM 客户端
  • 消息格式和上下文管理
  • 错误处理最佳实践

网页爬取技术

  • HTTP 客户端配置和优化
  • HTML 解析和内容提取
  • 批量处理和并发控制

数据处理

  • 结构化数据建模
  • JSON 序列化和存储
  • 结果分析和可视化

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!

📝 许可证

MIT License

🔗 相关链接