通过 Beautifulsoup 解析 HTML,结合循环遍历多页链接,可完整提取豆瓣电影 Top250 的所有中文标题。以下是具体步骤:
一、准备工作:安装库与引入模块
安装 Beautiful Soup:在终端执行
shpip install bs4 # Windows # 或 pip3 install bs4 (macOS/Linux)
显示
Successfully installed bs4
即安装成功。引入所需库:在 Python 文件(如
scrape_douban.py
)中引入pythonimport requests from bs4 import BeautifulSoup
二、核心步骤:解析单页标题
1. 发送请求并获取 HTML
发送带User-Agent
的请求,获取豆瓣电影 Top250 第一页的 HTML:
python
# 定义请求头(伪装浏览器)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
# 第一页URL(后续扩展为多页)
url = "https://movie.douban.com/top250"
response = requests.get(url, headers=headers)
html = response.text # 存储HTML内容
2. 解析 HTML 并提取标题
通过浏览器开发者工具分析:电影标题位于class="title"
的``标签内,且中文标题不含斜杠/
(区分于原版标题)。
解析代码:
python
# 创建Beautiful Soup对象
soup = BeautifulSoup(html, "html.parser")
# 查找所有class="title"的<span>标签
all_titles = soup.find_all("span", attrs={"class": "title"})
# 提取中文标题(过滤含斜杠的原版标题)
for title_tag in all_titles:
title = title_tag.string # 获取标签内文本
if "/" not in title: # 仅保留中文标题
print(title)
三、扩展:爬取全部 10 页内容
豆瓣电影 Top250 分 10 页展示,每页 25 部电影,URL 通过start
参数区分(如start=0
为第 1 页,start=25
为第 2 页,直至start=225
为第 10 页)。
循环遍历多页
python
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
# 遍历10页(start参数:0,25,50,...,225)
for start_num in range(0, 250, 25):
# 构造每页URL
url = f"https://movie.douban.com/top250?start={start_num}"
response = requests.get(url, headers=headers)
html = response.text
# 解析当前页
soup = BeautifulSoup(html, "html.parser")
all_titles = soup.find_all("span", attrs={"class": "title"})
# 提取并打印中文标题
for title_tag in all_titles:
title = title_tag.string
if "/" not in title:
print(title)
四、关键说明
- 多页逻辑:通过
range(0, 250, 25)
生成start
参数(0 到 225,步长 25),覆盖全部 10 页。 - 标题过滤:利用
if "/" not in title
排除含斜杠的原版标题(如 “肖申克的救赎 / The Shawshank Redemption” 仅保留 “肖申克的救赎”)。 - 反爬处理:始终携带
User-Agent
请求头,避免被豆瓣识别为爬虫。