如何抓取无类名的特定<p>标签内容,获取Height对应的数值155?
问题1:获取所有p标签文本的解决方案
你的代码存在三处问题:
- 变量引用错误:循环中定义的循环变量是
info,但实际调用查找方法时用了未定义的para,属于笔误 - 查找方法使用错误:
find('p')只会返回匹配到的第一个p标签,要获取当前节点下所有p标签需要用find_all('p') - 逻辑层级错误:所有目标p标签都在同一个class为p3的父div内部,不需要遍历p3的div列表,直接在父div下查找所有p即可
正确代码如下:
p_list = [] # 定位到class为p3的父div p3_div = soup.find('div', class_='p3') # 查找该父div下所有p标签 all_p_tags = p3_div.find_all('p') for p in all_p_tags: p_list.append(p.get_text(strip=True)) print(p_list) # 输出结果:['110', '55', '28', '155']
问题2:通过Height文本直接定位对应p标签的方案
可以利用BeautifulSoup的节点遍历能力,先定位到文本为Height的strong标签,再通过同级节点关系找到对应的p标签,不需要先存储所有p标签再筛选:
# 定位文本为Height的strong标签 height_strong = soup.find('strong', string='Height') # 向上找到父级span标签,再找下一个同级的p标签 height_p = height_strong.find_parent('span').find_next_sibling('p') height_value = height_p.get_text(strip=True) print(height_value) # 输出结果:155
内容的提问来源于stack exchange,提问作者Emma
相关产品推荐
相关产品推荐

