Python网页爬取遇AttributeError: 'ResultSet' object has no attribute 'get'错误求助
解决AttributeError: 'ResultSet' object has no attribute 'get'问题
嘿,我来帮你排查这个困扰你的错误!即使把find_all()换成find()还是报错,大概率是这几个常见原因,咱们一个个捋:
1. find()没找到匹配元素,返回了None
当find()找不到符合你指定条件的标签时,它会返回None,而None是没有get()方法的——这是最常见的原因。比如你要找一个带特定class的div,但页面里根本不存在这个元素,这时候直接调用.get('attr')就会触发错误。
解决办法:先判断元素是否存在,再调用方法:
# 先获取元素 target_element = soup.find('div', class_='your-target-class') # 先检查是否找到元素 if target_element: desired_value = target_element.get('data-value') else: print("糟了,没找到目标元素!可能是选择器不对或者页面结构变了")
2. 你仍在处理ResultSet对象(嵌套查询没遍历)
有时候你可能在find()之后又调用了find_all(),然后忘记遍历结果就直接用get()。比如:
# 错误示例:parent是单个元素,但children是ResultSet集合 parent = soup.find('div', class_='parent-container') children = parent.find_all('a') # 直接对children调用get()会报错,因为它是多个元素的集合 children.get('href')
解决办法:遍历ResultSet中的每个元素再处理:
for child in children: href = child.get('href') # 这里对每个href做你需要的操作,比如加入payload
3. 选择器写得有问题,导致结果不符合预期
可能你的find()选择器写错了(比如标签名拼错、属性名不对),或者页面结构和你预期的不一样——比如你以为会返回单个元素,但实际上返回的是None,或者你误把某个集合当成了单个元素。
解决办法:打印调试一下,看看find()到底返回了什么:
element = soup.find('your-tag', attrs={'your-attr': 'your-value'}) print(type(element)) # 看看是bs4.element.Tag(正常)还是None print(element) # 看看具体内容,确认是不是你要找的元素
先从这几点入手排查,应该能找到问题所在!
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

