Skip to content

通过 Beautifulsoup 解析 HTML,结合循环遍历多页链接,可完整提取豆瓣电影 Top250 的所有中文标题。以下是具体步骤:

一、准备工作:安装库与引入模块

  1. 安装 Beautiful Soup:在终端执行

    sh
    pip install bs4  # Windows
    # 或 pip3 install bs4 (macOS/Linux)

    显示Successfully installed bs4即安装成功。

  2. 引入所需库:在 Python 文件(如scrape_douban.py)中引入

    python
    import 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)

四、关键说明

  1. 多页逻辑:通过range(0, 250, 25)生成start参数(0 到 225,步长 25),覆盖全部 10 页。
  2. 标题过滤:利用if "/" not in title排除含斜杠的原版标题(如 “肖申克的救赎 / The Shawshank Redemption” 仅保留 “肖申克的救赎”)。
  3. 反爬处理:始终携带User-Agent请求头,避免被豆瓣识别为爬虫。

Released under the MIT License.