You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Beautiful Soup新手求助:如何从目标HTML中提取多位演员姓名?

问题

我从IMDB获取了一段HTML代码,想从中提取文本元素:

<p class="">
    Director:
<a href="/name/nm0001104/">Frank Darabont</a>
<span class="ghost">|</span> 
    Stars:
<a href="/name/nm0000209/">Tim Robbins</a>, 
<a href="/name/nm0000151/">Morgan Freeman</a>, 
<a href="/name/nm0348409/">Bob Gunton</a>, 
<a href="/name/nm0006669/">William Sadler</a>
</p>

目前我能用这段代码提取导演姓名:

html_code.find('a').text

但没法提取Tim Robbins、Morgan Freeman这些演员的姓名。作为Beautiful Soup新手,请问怎么用类似语法提取这些演员姓名?

解决方案

1. 提取所有姓名(包含导演)

find('a')只会返回第一个匹配的标签,所以只能拿到导演。要获取所有名字,换成find_all('a')即可,它会返回所有符合条件的标签列表:

# 获取所有a标签元素
all_name_tags = html_code.find_all('a')
# 遍历列表提取每个标签的文本
all_names = [tag.text for tag in all_name_tags]
# 结果:['Frank Darabont', 'Tim Robbins', 'Morgan Freeman', 'Bob Gunton', 'William Sadler']

2. 单独提取演员姓名

如果只需要演员的名字,借助第一个<a>是导演的结构特点,对列表做切片就行:

all_name_tags = html_code.find_all('a')
# 从索引1开始取后面的元素,也就是所有演员的标签
actor_names = [tag.text for tag in all_name_tags[1:]]
# 结果:['Tim Robbins', 'Morgan Freeman', 'Bob Gunton', 'William Sadler']

3. 更稳定的定位(应对页面结构变化)

要是担心后续IMDB页面结构调整,第一个<a>不再是导演,也可以先定位到"Stars:"文本,再抓取它后面的<a>标签:

# 找到包含"Stars:"的文本节点
stars_label = html_code.find(text=lambda t: t and 'Stars:' in t.strip())
# 获取该节点之后的所有a标签
actor_tags = stars_label.find_next_siblings('a')
actor_names = [tag.text for tag in actor_tags]

内容的提问来源于stack exchange,提问作者user10678782

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:43:28