news 2026/4/16 16:00:19

初学者如何用 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/4/16 15:37:26

3分钟极速安装Maven的秘诀

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个极简Maven安装器&#xff0c;要求&#xff1a;1.将完整安装流程压缩到3分钟内 2.使用国内CDN加速下载 3.自动跳过非必要配置步骤 4.提供一键回滚功能 5.内置常见问题自动修…

作者头像 李华
网站建设 2026/4/15 14:43:01

告别虚拟机:EXT2FSD让跨平台文件访问效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个性能对比测试工具&#xff0c;可测量&#xff1a;1.EXT2FSD直接访问 2.虚拟机共享文件夹 3.Samba/NFS网络共享 4.云存储同步 四种方案的&#xff1a;文件传输速度、CPU占用…

作者头像 李华
网站建设 2026/4/16 14:28:06

Vue3组件通信零基础入门:从hello world到实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向初学者的Vue3组件通信教学示例&#xff0c;包含&#xff1a;1)最简单的props传值示例(父传子显示文本)&#xff1b;2)基础emit示例(子组件按钮触发父组件方法)&#x…

作者头像 李华
网站建设 2026/4/16 15:45:16

零基础也能玩转AI绘画!unet person image cartoon compound镜像保姆级教程

零基础也能玩转AI绘画&#xff01;unet person image cartoon compound镜像保姆级教程 你是不是也刷到过那些惊艳的朋友圈头像——二次元风格、线条灵动、色彩明快&#xff0c;像从动漫里走出来的自己&#xff1f;但又觉得“AI绘画复杂代码显卡烧钱调参玄学”&#xff0c;直接…

作者头像 李华
网站建设 2026/4/16 15:56:09

REDIS入门:5分钟搭建你的第一个缓存系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个REDIS入门教程项目&#xff0c;包含REDIS的本地安装指南、基本数据类型操作示例&#xff08;字符串、哈希、列表等&#xff09;、以及一个简单的文章浏览计数应用。要求有…

作者头像 李华
网站建设 2026/4/16 12:35:43

逆向工程实战:用JD-GUI分析流行Java框架的源码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个教学演示项目&#xff0c;展示如何用JD-GUI分析Spring框架核心模块。要求&#xff1a;1.提供Spring-core.jar的预加载 2.标记关键设计模式实现点 3.对比源码和反编译结果 …

作者头像 李华