news 2026/6/15 17:54:53

初学者如何用 Python 写第一个爬虫?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
初学者如何用 Python 写第一个爬虫?

初学者写第一个Python 爬虫的最友好路径,通常是使用requests + BeautifulSoup4的组合。这套组合在 2026 年仍然是入门首选:简单、强大、社区资源最多。

目标:爬取一个静态网页(比如“豆瓣图书 Top 250” 或 “示例网站”),提取书名、评分、简介等信息,并打印出来。

第一步:准备环境(5 分钟)

确保你已经安装 Python(推荐 3.10+ 或 3.11/3.12/3.13)。

在命令行(cmd / PowerShell / 终端)执行:

pipinstallrequests beautifulsoup4

验证安装:

importrequestsfrombs4importBeautifulSoupprint("安装成功!")

第二步:最简单可运行的第一个爬虫(复制粘贴就能跑)

我们选择一个非常友好的练习目标:httpbin.org(专门给爬虫练习用的网站,不会封 IP,也不会变结构)。

# 文件名可以叫:my_first_spider.pyimportrequestsfrombs4importBeautifulSoup# 1. 目标网址url="https://httpbin.org/html"# 2. 发送请求(模拟浏览器)headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}try:response=requests.get(url,headers=headers,timeout=10)response.raise_for_status()# 非 200 就抛异常exceptExceptionase:print("请求失败:",e)exit()# 3. 把网页内容交给 BeautifulSoup 解析soup=BeautifulSoup(response.text,"html.parser")# 4. 提取我们想要的内容# 这个页面有一个 <h1> 标题 和一段正文title=soup.find("h1").get_text(strip=True)content=soup.find("div",class_="jumbotron").p.get_text(strip=True)print("页面标题:",title)print("主要内容:")print(content)

运行方式

python my_first_spider.py

预期输出类似:

页面标题:Herman Melville - Moby-Dick 主要内容: ...</p>

恭喜!你已经成功完成了第一个爬虫!

第三步:升级版 —— 爬取真实网页(豆瓣图书 Top 250 前 10 本)

目标网址:https://book.douban.com/top250

importrequestsfrombs4importBeautifulSoupimporttime headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}books=[]forpageinrange(0,2):# 前两页(前50本),初学者先爬前10本即可url=f"https://book.douban.com/top250?start={page*25}"try:response=requests.get(url,headers=headers,timeout=8)response.raise_for_status()exceptExceptionase:print(f"第{page+1}页请求失败:{e}")continuesoup=BeautifulSoup(response.text,"html.parser")# 找到所有图书的 <tr> 行items=soup.select("tr.item")foriteminitems:title_tag=item.select_one(".pl2 a")title=title_tag.get_text(strip=True)iftitle_tagelse"未知"author_tag=item.select_one("p.pl")author_info=author_tag.get_text(strip=True)ifauthor_tagelse""rating_tag=item.select_one(".rating_nums")rating=rating_tag.get_text(strip=True)ifrating_tagelse"无评分"quote_tag=item.select_one(".inq")quote=quote_tag.get_text(strip=True)ifquote_tagelse""books.append({"书名":title,"作者/出版信息":author_info,"评分":rating,"短评":quote})print(f"第{page+1}页爬取完成,已有{len(books)}本书")time.sleep(2)# 非常重要!防止被封# 打印前 10 本print("\n前 10 本书:")fori,bookinenumerate(books[:10],1):print(f"{i}. 《{book['书名']}》 评分:{book['评分']}{book['短评']}")

运行前注意

  • 第一次运行很可能成功,但如果频繁运行,豆瓣可能会暂时限制你的 IP。
  • 真实爬虫必须加延时(time.sleep(1~5))。
  • 建议只跑一次,保存结果,不要反复运行。

第四步:常见问题 & 避坑指南(初学者最容易踩的 8 个点)

问题现象解决方案
403 Forbidden被网站拒绝加真实的 User-Agent + 随机延时
404 / 连接超时网络问题加 timeout=10 + try-except
提取不到内容find / select 返回 None右键“检查元素” → 确认 class/id 正确
乱码中文显示 ???response.encoding = ‘utf-8’
被封 IP跑几页就 403/429加代理(proxies)、降低频率、用 requests.Session() 保持会话
动态加载数据为空切换到 Selenium(浏览器自动化)或找 API
道德/法律爬私有/收费内容只爬公开数据,遵守 robots.txt,控制频率
代码太乱后期维护难把请求、解析、保存拆成函数

第五步:下一步推荐(学完第一个爬虫后)

  1. 保存数据→ 用 csv 或 json 存储

    importcsvwithopen("douban_top250.csv","w",newline="",encoding="utf-8")asf:writer=csv.DictWriter(f,fieldnames=["书名","作者/出版信息","评分","短评"])writer.writeheader()writer.writerows(books)
  2. 学习 XPath / CSS 选择器(更精准定位)

  3. 掌握 requests 高级用法(代理、cookies、session、重试)

  4. 尝试简单反爬网站(如 quotes.toscrape.com)

  5. 进阶工具:Scrapy(框架级)、Playwright / Selenium(动态页)、httpx(异步)

一句话总结给初学者:

先用requests + BeautifulSoup爬 1~2 个静态网站,成功后再考虑反爬、动态页、框架。

如果你运行上面代码遇到具体报错,把错误信息贴出来,我帮你 debug。

现在就去试试吧!第一个爬虫跑通的那一刻真的很爽~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:50:14

快学快用系列:一文学会java后端WebApi开发

快学快用系列&#xff1a;一文学会 Java 后端 Web API 开发&#xff08;2026 年实用版&#xff09; 目标读者&#xff1a;有 Java 基础&#xff08;会写类、接口、集合&#xff09;&#xff0c;想快速上手企业级 RESTful API 开发的同学。 核心技术栈&#xff1a;Spring Boot …

作者头像 李华
网站建设 2026/6/15 11:40:43

【MySQL】内置函数和内外连

MySQL 内置函数 内外连接 超实用总结&#xff08;2026 面试生产必备&#xff09; 一、MySQL 最常用内置函数&#xff08;背会这 50 个&#xff0c;够用 99% 场景&#xff09; 1. 字符串函数&#xff08;最常用 TOP10&#xff09; 函数说明示例结果CONCAT(str1,str2,…)拼接…

作者头像 李华
网站建设 2026/6/15 11:40:36

Live Avatar GitHub项目结构:CLAUDE.md与todo文件用途说明

Live Avatar GitHub项目结构&#xff1a;CLAUDE.md与todo文件用途说明 1. 项目背景与定位 Live Avatar是由阿里联合高校开源的数字人生成模型&#xff0c;聚焦于高质量、低延迟的实时数字人视频合成。它不是简单的图像驱动或音频驱动动画工具&#xff0c;而是一个融合文本理解…

作者头像 李华
网站建设 2026/6/15 11:50:32

5分钟快速原型:用快马构建API测试工具MVP

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个最小可行API测试工具原型&#xff0c;要求&#xff1a;1. 支持GET/POST请求 2. 简单参数输入 3. 响应展示 4. 历史记录 5. 一键分享功能。使用纯前端实现&#xff0c;…

作者头像 李华
网站建设 2026/6/15 12:40:09

企业级应用中处理GPG签名验证失败的实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个企业级应用案例&#xff0c;展示如何处理GPG签名验证失败问题。案例应包括&#xff1a;1) 问题描述和错误日志&#xff1b;2) 分析缺失的公钥来源&#xff1b;3) 从企业内…

作者头像 李华