初学者写第一个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,控制频率 |
| 代码太乱 | 后期维护难 | 把请求、解析、保存拆成函数 |
第五步:下一步推荐(学完第一个爬虫后)
保存数据→ 用 csv 或 json 存储
importcsvwithopen("douban_top250.csv","w",newline="",encoding="utf-8")asf: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。
现在就去试试吧!第一个爬虫跑通的那一刻真的很爽~