BeautifulSoup中findAll方法报错:无法调用find属性的问题求助
解决BeautifulSoup中findAll()无法链式调用find()的问题
你遇到的错误原因很明确:findAll()(或find_all())返回的是一个ResultSet对象,本质就是元素列表,而不是单个Tag对象。列表本身没有find()方法,所以直接链式调用会报错。要批量处理多个元素,你需要遍历这个列表,对每个元素单独调用find()方法。
正确代码示例
方法一:循环遍历处理
先获取所有目标父元素,再逐个提取子元素信息:
# 获取页面中所有50个styles_root__ti07r元素 all_movies = soup.find_all('div', class_='styles_root__ti07r') # 初始化列表存储所有电影信息 movie_info_list = [] for movie in all_movies: # 提取俄语名称 ru_name = movie.find('div', class_='base-movie-main-info_mainInfo__ZL_u3').find('span', class_='styles_mainTitle__IFQyZ styles_activeMovieTittle__kJdJj').text # 提取原名 original_name = movie.find('div', class_='styles_main__Y8zDm styles_mainWithNotCollapsedBeforeSlot__x4cWo').find('span', class_='desktop-list-main-info_secondaryTitle__ighTt').text # 提取简介文本 remain = movie.find('div', class_='styles_main__Y8zDm styles_mainWithNotCollapsedBeforeSlot__x4cWo').find('span', class_='desktop-list-main-info_truncatedText__IMQRP').text # 将单条电影信息存入列表 movie_info_list.append({ '俄语名称': ru_name, '原名': original_name, '简介': remain }) # 打印所有结果 for info in movie_info_list: print(info)
方法二:列表推导式(简洁写法)
如果代码逻辑简单,可以用列表推导式一次性生成结果:
all_movies = soup.find_all('div', class_='styles_root__ti07r') movie_info_list = [ { '俄语名称': movie.find('div', class_='base-movie-main-info_mainInfo__ZL_u3').find('span', class_='styles_mainTitle__IFQyZ styles_activeMovieTittle__kJdJj').text, '原名': movie.find('div', class_='styles_main__Y8zDm styles_mainWithNotCollapsedBeforeSlot__x4cWo').find('span', class_='desktop-list-main-info_secondaryTitle__ighTt').text, '简介': movie.find('div', class_='styles_main__Y8zDm styles_mainWithNotCollapsedBeforeSlot__x4cWo').find('span', class_='desktop-list-main-info_truncatedText__IMQRP').text } for movie in all_movies ]
额外注意事项
如果页面中存在个别元素缺失子标签的情况,直接调用.text会触发AttributeError。建议增加空值判断,提升代码健壮性:
# 示例:处理可能不存在的子元素 ru_name_tag = movie.find('div', class_='base-movie-main-info_mainInfo__ZL_u3').find('span', class_='styles_mainTitle__IFQyZ styles_activeMovieTittle__kJdJj') ru_name = ru_name_tag.text.strip() if ru_name_tag else '无数据'
内容的提问来源于stack exchange,提问作者Moksggwp
相关产品推荐
相关产品推荐

