初学者写第一个 Python 爬虫 的最友好路径,通常是使用 requests + BeautifulSoup4 的组合。这套组合在 2026 年仍然是入门首选:简单、强大、社区资源最多。
目标:爬取一个静态网页(比如“豆瓣图书 Top 250” 或 “示例网站”),提取书名、评分、简介等信息,并打印出来。
第一步:准备环境(5 分钟)
确保你已经安装 Python(推荐 3.10+ 或 3.11/3.12/3.13)。
在命令行(cmd / PowerShell / 终端)执行:
pip install requests beautifulsoup4
验证安装:
import requests
from bs4 import BeautifulSoup
print("安装成功!")
第二步:最简单可运行的第一个爬虫(复制粘贴就能跑)
我们选择一个非常友好的练习目标:httpbin.org(专门给爬虫练习用的网站,不会封 IP,也不会变结构)。
# 文件名可以叫:my_first_spider.py
import requests
from bs4 import BeautifulSoup
# 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 就抛异常
except Exception as e:
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
import requests
from bs4 import BeautifulSoup
import time
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 = []
for page in range(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()
except Exception as e:
print(f"第 {page+1} 页请求失败:{e}")
continue
soup = BeautifulSoup(response.text, "html.parser")
# 找到所有图书的 <tr> 行
items = soup.select("tr.item")
for item in items:
title_tag = item.select_one(".pl2 a")
title = title_tag.get_text(strip=True) if title_tag else "未知"
author_tag = item.select_one("p.pl")
author_info = author_tag.get_text(strip=True) if author_tag else ""
rating_tag = item.select_one(".rating_nums")
rating = rating_tag.get_text(strip=True) if rating_tag else "无评分"
quote_tag = item.select_one(".inq")
quote = quote_tag.get_text(strip=True) if quote_tag else ""
books.append({
"书名": title,
"作者/出版信息": author_info,
"评分": rating,
"短评": quote
})
print(f"第 {page+1} 页爬取完成,已有 {len(books)} 本书")
time.sleep(2) # 非常重要!防止被封
# 打印前 10 本
print("\n前 10 本书:")
for i, book in enumerate(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,控制频率 |
| 代码太乱 | 后期维护难 | 把请求、解析、保存拆成函数 |
第五步:下一步推荐(学完第一个爬虫后)
- 保存数据 → 用 csv 或 json 存储
import csv
with open("douban_top250.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["书名", "作者/出版信息", "评分", "短评"])
writer.writeheader()
writer.writerows(books)
- 学习 XPath / CSS 选择器(更精准定位)
- 掌握 requests 高级用法(代理、cookies、session、重试)
- 尝试简单反爬网站(如 quotes.toscrape.com)
- 进阶工具:Scrapy(框架级)、Playwright / Selenium(动态页)、httpx(异步)
一句话总结给初学者:
先用 requests + BeautifulSoup 爬 1~2 个静态网站,成功后再考虑反爬、动态页、框架。
如果你运行上面代码遇到具体报错,把错误信息贴出来,我帮你 debug。
现在就去试试吧!第一个爬虫跑通的那一刻真的很爽~