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

爬取IMDB榜单调用BeautifulSoup时出现str无find_all属性报错

IMDB爬虫报错排查与修复

问题现象

爬取IMDB Top250榜单页面时运行代码抛出str object has no attribute find_all错误,报错截图如下:
IMDB爬虫运行报错截图

原实现代码:

import requests as r
from bs4 import BeautifulSoup as bs 
source= r.get('https://www.imdb.com/chart/top/')
soup=bs(source.text,'html.parser')
movies= bs.find('tbody', class_="lister-list")
print(movies)

代码中未主动调用find_all方法,但运行时触发该属性不存在的报错。

问题根源

  • 核心错误是BeautifulSoup类与实例的调用逻辑混淆:你将导入的BeautifulSoup类设置别名为bs,执行soup=bs(source.text,'html.parser')后,soup才是存储了解析后页面DOM结构的实例对象。但查找元素时你写的是bs.find(),属于直接在BeautifulSoup类上调用实例方法,方法内部绑定的self参数实际接收到的是你传入的第一个参数'tbody'字符串,后续BeautifulSoup内部逻辑自动调用find_all时,相当于在字符串对象上执行方法,因此抛出对应报错,和你有没有主动编写find_all调用代码无关。
  • 额外隐藏问题:IMDB配置了基础反爬规则,直接发起无身份标识的requests请求会被拦截返回403状态码,就算修正调用逻辑,也拿不到正常的榜单页面DOM结构。

修复方案

  1. 修正元素查找的调用主体,将bs.find()改为soup.find(),使用解析完成的页面对应实例执行查找操作
  2. 给请求添加合法的User-Agent请求头,模拟正常浏览器访问绕过基础反爬,同时增加请求状态校验,避免请求失败后执行无意义的解析逻辑

修复后可正常运行的代码:

import requests as r
from bs4 import BeautifulSoup as bs 

# 配置请求头模拟浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
source = r.get('https://www.imdb.com/chart/top/', headers=headers)
# 校验请求是否成功,失败直接抛出异常
source.raise_for_status()
soup = bs(source.text, 'html.parser')
# 用解析完成的soup实例查找元素
movies = soup.find('tbody', class_="lister-list")
print(movies)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:57:23