尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 13 课 | 基础爬虫:requests + BeautifulSoup 爬取 IT之家

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 13 课 | 基础爬虫:requests + BeautifulSoup 爬取 IT之家 第 13 课 | 基础爬虫requests BeautifulSoup 爬取 IT之家竞品监控 Agent 的第一道工序——数据采集。这节课用 requests BeautifulSoup 搭建第一个爬虫自动抓取 IT 之家科技新闻效率提升 10 倍。一、业务价值为什么需要爬虫1.1 一个真实的场景假设你是某科技公司的市场分析师每天的工作是打开 IT 之家、36氪、虎嗅等 5-8 个科技媒体浏览首页寻找和公司产品相关的新闻复制标题、摘要、发布时间到 Excel分类整理发给团队这个过程每天至少花2-3 小时而且容易遗漏。如果覆盖 10 个数据源一个人全天都做不完。1.2 自动化后的效率对比指标人工方式爬虫自动化提升单站采集时间20-30 分钟10-30 秒100x10 站采集时间3-5 小时2-5 分钟60x遗漏率15-30%0%全量-数据格式手动整理格式不一结构化存储统一格式-可扩展性加一个站多 30 分钟加一个站多 10 行代码-核心价值把人从重复劳动中解放出来把时间花在分析和决策上。1.3 爬虫在 Agent 系统中的位置互联网IT之家/虎嗅/36氪爬虫模块自动采集数据清洗去重/格式化嵌入向量BGE 模型向量数据库ChromaDBAI Agent检索分析爬虫是整个 Agent 系统的数据入口。没有高质量的数据后面的嵌入、检索、分析都是空中楼阁。二、爬虫基础原理2.1 HTTP 请求-响应模型爬虫的本质是模拟浏览器发送 HTTP 请求解析服务器返回的 HTML。目标网站服务器Python 爬虫目标网站服务器Python 爬虫GET / HTTP/1.1User-Agent: Mozilla/5.0HTTP 200 OK​BeautifulSoup 解析 HTML提取标题、摘要、时间存入 SQLite2.2 HTML 结构速览HTML 是树形结构每个div、a、span都是一个节点divclassnews-listdivclassnews-itemaclasstitlehref/article/123新闻标题/aspanclasssummary新闻摘要.../spanspanclasstime2026-08-15/span/div/div爬虫的工作就是找到目标节点 → 提取文本或属性。2.3 三个核心工具工具作用类比requests发送 HTTP 请求获取网页 HTML浏览器地址栏输入 URLBeautifulSoup解析 HTML提取指定内容用 CSS 选择器定位元素SQLite轻量数据库存储结构化数据Excel 表格但支持 SQL 查询三、环境准备3.1 安装依赖uv pip install requests beautifulsoup4 lxmlrequestsHTTP 请求库beautifulsoup4HTML 解析库lxml高性能解析器BeautifulSoup 的底层引擎3.2 目标网站分析我们选择IT 之家ithome.com作为目标原因科技新闻聚合内容质量高适合竞品监控HTML 结构规整适合新手练习反爬策略相对宽松相比知乎、豆瓣在开始写代码之前先在浏览器中打开 IT 之家按 F12 打开开发者工具观察新闻列表的 HTML 结构新闻列表容器classnew-list每条新闻classnew的li元素标题classnew下的h2 a标签摘要classnew下的div.c或有描述文字的元素四、实战爬取 IT 之家新闻4.1 第一步发送请求importrequests headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36}urlhttps://www.ithome.com/responserequests.get(url,headersheaders,timeout10)response.encodingutf-8print(f状态码:{response.status_code})# 200 表示成功关键点User-Agent伪装成浏览器否则服务器可能拒绝请求timeout10设置超时防止无限等待encodingutf-8指定编码防止中文乱码4.2 第二步解析 HTMLfrombs4importBeautifulSoup soupBeautifulSoup(response.text,lxml)news_itemssoup.select(.new-list .new)# CSS 选择器print(f找到{len(news_items)}条新闻)select()使用 CSS 选择器语法比正则表达式更直观、更可靠。4.3 第三步提取数据foriteminnews_items[:10]:# 只取前 10 条title_elemitem.select_one(h2 a)summary_elemitem.select_one(.c)time_elemitem.select_one(time)titletitle_elem.text.strip()iftitle_elemelsesummarysummary_elem.text.strip()ifsummary_elemelseurltitle_elem.get(href)iftitle_elemelsepub_timetime_elem.get(datetime,)iftime_elemelseprint(f标题:{title})print(f摘要:{summary[:50]}...)print(f时间:{pub_time})print(---)4.4 第四步存储到 SQLiteimportsqlite3 connsqlite3.connect(news.db)conn.execute( CREATE TABLE IF NOT EXISTS news ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, summary TEXT, url TEXT UNIQUE, source TEXT, pub_time TEXT, crawled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) )foriteminnews_items[:10]:# ... 提取数据 ...conn.execute(INSERT OR IGNORE INTO news (title, summary, url, source, pub_time) VALUES (?, ?, ?, ?, ?),(title,summary,url,IT之家,pub_time))conn.commit()conn.close()INSERT OR IGNORE确保url唯一不会重复插入同一条新闻。五、职业道德做有素质的爬虫5.1 遵守 robots.txt# 检查 robots.txt# https://www.ithome.com/robots.txt# 如果 Disallow 包含你要爬的路径就不要爬5.2 请求频率控制importtimeimportrandom# 每次请求之间随机延迟 1-3 秒delayrandom.uniform(1,3)time.sleep(delay)为什么需要延迟高频请求会被服务器封 IP给服务器造成负担影响正常用户访问做个有素质的爬虫开发者5.3 请求头轮换importrandom USER_AGENTS[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0,Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Edge/120.0,Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Safari/17.0,]headers{User-Agent:random.choice(USER_AGENTS),Accept:text/html,application/xhtmlxml,Accept-Language:zh-CN,zh;q0.9,}六、完整代码运行code/ithome_crawler.py是完整的爬虫脚本包含以上所有功能。cdcode/lesson-13-web-crawler uv run ithome_crawler.py运行后生成data/ithome_news.db包含爬取的新闻数据# 查看数据sqlite3 data/ithome_news.dbSELECT title, pub_time FROM news LIMIT 5运行结果示例[2026-08-15 14:30:01] 开始爬取 IT之家... [2026-08-15 14:30:02] 状态码: 200 [2026-08-15 14:30:03] 找到 35 条新闻 [2026-08-15 14:30:03] 已保存: 苹果发布iOS 19开发者预览版 [2026-08-15 14:30:03] 已保存: 华为Mate 80系列曝光 [2026-08-15 14:30:03] 已保存: 特斯拉Optimus机器人量产计划 ... [2026-08-15 14:30:03] 完成共爬取 35 条新闻新增 12 条跳过 23 条重复七、常见问题排查7.1 状态码不是 200状态码含义解决方案403禁止访问加强 User-Agent 伪装降低请求频率404页面不存在检查 URL 是否正确429请求过多增加延迟时间等待恢复500服务器错误稍后重试7.2 解析不到数据常见原因HTML 结构变了网站改版CSS 选择器失效 → 重新分析页面结构动态加载内容由 JavaScript 渲染 → 需要 Selenium/Playwright第 14 课反爬机制服务器返回了假数据或验证码 → 需要更高级的伪装策略7.3 中文乱码response.encodingresponse.apparent_encoding# 自动检测编码# 或手动指定response.encodingutf-8八、总结这节课我们完成了 Agent 系统的数据入口——爬虫模块业务价值自动化采集替代人工浏览效率提升 60-100 倍核心技术requests 发送请求 → BeautifulSoup 解析 HTML → SQLite 存储职业道德遵守 robots.txt、控制请求频率、伪装请求头下一课我们将进阶到更复杂的爬虫场景分析 API 接口直接获取 JSON 数据以及用 Selenium 处理动态页面。本课代码code/lesson-13-web-crawler/ithome_crawler.py本课数据code/lesson-13-web-crawler/data/ithome_news.db运行后生成
返回列表