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

如何用BeautifulSoup提取script标签内filmData的电影名与上映年份

解决方法

你可以通过以下两种常用方式提取对应字段:


方法1:正则表达式匹配(实现简单,适合固定结构的内容)

直接通过正则匹配name和releaseYear对应的值,完整可运行代码如下:

import requests
import re
from bs4 import BeautifulSoup

url = 'https://letterboxd.com/film/dogville/'
req = requests.get(url)
soup = BeautifulSoup(req.content, 'html.parser')
# 提取script标签的纯文本内容
script_content = soup.find_all("script")[10].text

# 匹配name字段值
name = re.search(r'name:\s*"([^"]+)"', script_content).group(1)
# 匹配releaseYear字段值
release_year = re.search(r'releaseYear:\s*"([^"]+)"', script_content).group(1)

print(f"电影名称:{name}")
print(f"上映年份:{release_year}")

方法2:JS对象转JSON解析(结构更稳定,适合多字段提取场景)

先提取filmData对应的对象字符串,将不符合JSON规范的部分替换后用json模块解析为Python字典,后续可以直接取任意字段:

import requests
import re
import json
from bs4 import BeautifulSoup

url = 'https://letterboxd.com/film/dogville/'
req = requests.get(url)
soup = BeautifulSoup(req.content, 'html.parser')
script_content = soup.find_all("script")[10].text

# 提取filmData赋值语句中等于号后、分号前的对象内容
film_data_str = re.search(r'var filmData = (.*?);', script_content).group(1)
# 给JS对象的所有键添加双引号,转为合法JSON格式
film_data_str = re.sub(r'(\w+):', r'"\1":', film_data_str)
# 转为Python字典
film_data = json.loads(film_data_str)

name = film_data['name']
release_year = film_data['releaseYear']

print(f"电影名称:{name}")
print(f"上映年份:{release_year}")

两种方法运行后输出结果一致:

电影名称:Dogville
上映年份:2003

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:39:03