解决AttributeError并提取HTML中itemprop="brand"对应文本Hyundai的方法
问题解决:正确提取Hyundai文本
错误原因
你代码里的 soup.find(itemprop_="brand") 参数名写错了——BeautifulSoup 的 find 方法匹配属性时,不需要给属性名加下划线,应该直接写 itemprop="brand"。错误的写法导致找不到目标元素,返回了 None,所以调用 next_elements 会触发 AttributeError。
正确提取方法
以下是几种可靠的提取方式,都加入了空值判断避免报错:
方法1:定位父元素后获取子a标签文本
def get_car_datas(url): req = requests.get(url, headers=headers) src = req.text soup = BeautifulSoup(src, "lxml") # 正确匹配itemprop="brand"的dd元素 brand_container = soup.find(itemprop="brand") if brand_container: # 获取子a标签的文本,strip()清理多余空格换行 car_brand = brand_container.find("a").get_text(strip=True) print(car_brand) else: print("未找到品牌元素")
方法2:用CSS选择器直接定位目标a标签
def get_car_datas(url): req = requests.get(url, headers=headers) src = req.text soup = BeautifulSoup(src, "lxml") # 通过CSS选择器直接定位itemprop="brand"的dd下的a标签 brand_link = soup.select_one('dd[itemprop="brand"] > a') if brand_link: car_brand = brand_link.get_text(strip=True) print(car_brand) else: print("未找到品牌元素")
方法3:直接提取父元素下的所有文本
如果不确定子元素结构,可直接提取父元素内的所有文本(自动忽略标签):
def get_car_datas(url): req = requests.get(url, headers=headers) src = req.text soup = BeautifulSoup(src, "lxml") brand_container = soup.find(itemprop="brand") if brand_container: car_brand = brand_container.get_text(strip=True) print(car_brand) else: print("未找到品牌元素")
关键注意点
- 属性匹配时不要给属性名加下划线,这是BeautifulSoup的语法规范
- 必须增加空值判断,防止页面结构变化或元素不存在时触发报错
- 用
get_text(strip=True)可以自动清理文本前后的空格、换行符,得到干净的结果
内容的提问来源于stack exchange,提问作者Alberi
相关产品推荐
相关产品推荐

