我带你做3个从易到难的爬虫实战项目,全程复制粘贴就能跑通,学会后能爬90%的常规网页。
先准备环境(1分钟搞定)
打开电脑终端/CMD,执行安装依赖:
# 安装爬虫核心库
pip install requests beautifulsoup4 lxml
requests:发送网络请求,获取网页源码BeautifulSoup:解析网页,提取数据lxml:解析器,速度更快
项目1:最简单爬虫 —— 爬取静态网页文字(入门)
目标:爬取一个测试网页的标题、段落文字
完整代码
# 1. 导入库
import requests
from bs4 import BeautifulSoup
# 2. 目标网址(测试用静态网页)
url = "https://www.baidu.com/"
# 3. 发送请求,获取网页源码
response = requests.get(url)
response.encoding = "utf-8" # 设置编码,防止乱码
# 4. 解析网页
soup = BeautifulSoup(response.text, "lxml")
# 5. 提取数据
title = soup.title.string # 提取网页标题
print("网页标题:", title)
# 提取所有超链接文字
print("\n超链接文字:")
for a in soup.find_all("a"):
print(a.get_text())
运行结果
会直接打印出百度首页的标题和所有链接文字。
核心知识点(必记)
requests.get(url)→ 获取网页源码BeautifulSoup(源码, "lxml")→ 把源码变成可解析对象soup.find_all("标签名")→ 查找所有指定标签标签.get_text()→ 获取标签内的文字
项目2:实战爬虫 —— 爬取豆瓣电影TOP25(进阶)
目标:批量爬取电影名称、评分、主演、简介,并保存到本地文件
完整代码
import requests
from bs4 import BeautifulSoup
# 目标网址
url = "https://movie.douban.com/top250?start=0"
# 请求头(必须加!伪装成浏览器,防止被反爬)
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"
}
# 发送请求
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "lxml")
# 找到所有电影条目
movies = soup.find_all("div", class_="item")
# 打开文件保存数据
with open("豆瓣电影TOP25.txt", "w", encoding="utf-8") as f:
# 遍历提取数据
for movie in movies:
# 电影名称
name = movie.find("span", class_="title").get_text()
# 评分
score = movie.find("span", class_="rating_num").get_text()
# 简介
info = movie.find("div", class_="bd").find("p").get_text().strip()
# 打印+写入文件
data = f"电影:{name}\n评分:{score}\n简介:{info}\n-------------------\n"
print(data)
f.write(data)
运行结果
- 控制台打印出电影数据
- 自动生成
豆瓣电影TOP25.txt文件,保存所有爬取内容
关键技巧
- 必须加请求头
User-Agent:豆瓣会拦截没有浏览器标识的爬虫 - 定位元素:右键网页 → 检查,查看标签和class名称
- 保存数据:用
with open自动保存,不会丢失文件
项目3:高级实战 —— 翻页爬取+数据去重(就业级)
目标:爬取豆瓣TOP25全部250部电影,自动翻页+去重
完整代码
import requests
from bs4 import BeautifulSoup
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"
}
# 翻页规律:start=0、25、50...225
page_urls = [f"https://movie.douban.com/top250?start={i*25}" for i in range(10)]
all_movies = [] # 存储所有电影,用于去重
# 遍历所有页面
for page in page_urls:
print(f"正在爬取:{page}")
response = requests.get(page, headers=headers)
soup = BeautifulSoup(response.text, "lxml")
movies = soup.find_all("div", class_="item")
for movie in movies:
name = movie.find("span", class_="title").get_text()
score = movie.find("span", class_="rating_num").get_text()
# 去重:只保存不重复的电影
if name not in [m["name"] for m in all_movies]:
all_movies.append({"name": name, "score": score})
# 保存最终数据
with open("豆瓣TOP250全量电影.txt", "w", encoding="utf-8") as f:
for idx, m in enumerate(all_movies, 1):
f.write(f"第{idx}名:{m['name']} | 评分:{m['score']}\n")
print(f"\n爬取完成!共爬取 {len(all_movies)} 部电影")
你能学到
- 自动翻页:找到网址规律,批量生成链接
- 数据去重:避免重复爬取
- 结构化存储:用列表+字典管理数据
爬虫必备技能(避坑指南)
1. 反爬应对
- 加
User-Agent(90%网页需要) - 不要请求太快:加
time.sleep(1)延迟 - 不爬敏感/付费数据,遵守《网络安全法》
2. 如何定位网页元素(手把手)
- 打开目标网页
- 右键 → 检查
- 点击左上角箭头 → 点你要爬的内容
- 复制对应的标签名和class名称
3. 常见问题
- 报错403:没加
User-Agent - 乱码:加
response.encoding="utf-8" - 爬不到数据:标签/class写错了
总结
- 3个项目从静态文字→单页数据→翻页全量爬取,零基础全覆盖
- 核心工具:
requests+BeautifulSoup - 关键技巧:请求头、元素定位、翻页、去重、数据保存