BeautifulSoup循环报错:ResultSet对象无'%s'属性问题排查
问题排查与修复方案
嘿,我一眼就瞅到你代码里的关键问题了,咱们一步步拆解:
核心bug:变量名覆盖了BeautifulSoup类
你这段代码里有个致命的变量名冲突:
soup = soup(c, "html.parser")
第一次循环时,soup会被赋值为一个BeautifulSoup实例对象。但到第二次循环的时候,你再写soup(c, ...),其实是在调用这个已经变成实例的soup,而不是初始化新的BeautifulSoup对象!这就直接触发了那个"ResultSet object has no attribute..."的错误——因为BeautifulSoup实例不是可调用的,而且如果中间逻辑返回了列表类型的ResultSet,错误会更明显。
第一步:修复变量名冲突
把实例变量名改成和类名不一样的,比如page_soup,同时确保你正确导入了BeautifulSoup类:
from bs4 import BeautifulSoup # 先确认导入了这个类 import requests for i in range(0,2): url = "https://www.blah.com/" + get_chapter(chron_list[i]) book = requests.get(url, headers=headers) c = book.content page_soup = BeautifulSoup(c, "html.parser") # 这里用新的变量名,避免覆盖类引用 print(page_soup.prettify())
第二步:验证get_chapter的返回值
虽然单独跑索引0或1时代码能运行,但还是得确认get_chapter(chron_list[i])每次都返回字符串类型的章节路径。如果这个函数里用了find_all,返回的会是ResultSet(也就是列表),拼接URL时会出问题。你可以加个打印来验证:
for i in range(0,2): chapter_path = get_chapter(chron_list[i]) print(f"索引{i}的章节路径:{chapter_path},类型:{type(chapter_path)}") url = "https://www.blah.com/" + chapter_path # 后续请求和解析代码...
如果输出的类型是bs4.element.ResultSet,那你得修改get_chapter函数,比如把find_all换成find(取单个元素),或者从ResultSet里提取你需要的字符串元素。
为啥单独循环0或1时没问题?
因为单次循环时,程序在page_soup(原soup)被赋值为实例后就直接结束了,不会触发第二次调用实例的错误。但循环两次时,第二次会尝试把之前的实例当函数用,自然就报错了。
内容的提问来源于stack exchange,提问作者tazboy
相关产品推荐
相关产品推荐

