Python爬虫出现'NoneType' object is not iterable报错如何解决?
问题原因
- 直接触发报错的原因是你实际执行的代码用了
find()方法而非业务逻辑中写的find_all():find()方法在匹配不到符合条件的元素时会返回None,直接遍历None对象就会触发'NoneType' object is not iterable的类型错误。而find_all()匹配不到时会返回空列表,遍历空列表不会触发报错。 - 匹配规则存在失效可能:你用的正则
re.compile('p p*')是匹配class属性值为「p开头+后续0个或多个p」的内容,如果目标p标签的class属性不符合这个格式(比如多类顺序调整、存在其他类名、类名格式和你预期不符),就会匹配不到内容,导致find()返回None。
修复方案
- 统一使用
find_all()获取元素,避免单元素匹配返回None的问题 - 优化class匹配规则,也可以直接用CSS选择器简化写法,匹配更稳定
- 可选增加判空逻辑,进一步兼容异常情况
修复后代码示例
import re # 原有逻辑修改部分 test_list = [] # 用find_all替代find,匹配不到返回空列表不会报错 test = call.find_all('p', class_ = re.compile(r'p p.*')) # 正则调整为匹配p 开头后面跟任意字符,适配p p1、p p_text这类类名 for c in test: x = c.text.strip() test_list.append(x) if ('Operator' in test_list) and ('Conference Call Participants' in test_list): # 后续业务逻辑不变 cc_id = counter
如果你的目标是匹配所有class包含p类的p标签,也可以用更简单的CSS选择器写法,不需要正则:
test = call.select('p.p')
内容的提问来源于stack exchange,提问作者bencolo
相关产品推荐
相关产品推荐

