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

Python爬取IMDb网站触发SyntaxError语法错误如何解决

报错根因

这个语法错误和IMDb站点本身没有关系,是代码存在两处基础语法问题导致的:

  1. 所有语句没有正确换行:导入模块、变量赋值、函数调用、注释全挤在同一行,Python解释器无法正确识别语句边界。
  2. 传参规则错误:Python函数的关键字参数名不允许包含横杠-,你直接写data-testid='title'时,解释器会把-识别为减法运算符,判定你在表达式里写了赋值操作,直接抛出SyntaxError: expression cannot contain assignment, perhaps you meant "=="?错误。

另外就算你修好语法问题,直接用默认的requests请求IMDb也会被反爬规则拦截,拿不到正常页面内容。

修复方案
  • 拆分所有挤在同一行的代码,每个独立语句单独占一行,不要把注释和执行代码写在同一行。
  • 给requests请求添加浏览器UA头,模拟真实用户访问,绕过基础反爬校验。注意不要把请求返回值命名为request,会和导入的requests模块重名引发变量覆盖问题,统一命名为response更规范。
  • 查找带横杠的HTML属性时,不要直接作为关键字参数传入find_all,把属性键值对封装到attrs字典参数中传递。

修复后的可运行代码如下:

import requests
import pandas as pd
from bs4 import BeautifulSoup

# 模拟Chrome浏览器的请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
response = requests.get(
    'https://www.imdb.com/what-to-watch/fan-favorites/?ref_=hm_fanfav_sm',
    headers=headers
)
soup = BeautifulSoup(response.content, 'html.parser')
# 带特殊字符的属性放到attrs字典中传递
names = soup.find_all('span', attrs={'data-testid': 'title'})
print(names)

补充说明:所有包含横杠、特殊字符的HTML属性(比如data-*系列自定义属性、aria-*系列无障碍属性),在BeautifulSoup里查找时都要放到attrs字典里传参,只要属性名不符合Python标识符命名规则(不能有横杠、不能数字开头、不能包含特殊符号),就不能直接当关键字参数写,否则一定会触发同类语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:45:56