Python BeautifulSoup提取含空注释标签的指定class div内容
问题原因
当前代码仅完成了价格所在div节点的定位,直接打印节点对象输出的是标签的完整HTML结构,不会返回标签内的实际文本内容。另外目标站点的价格模块存在两种前端渲染结构,仅匹配单一div类名的写法,在部分药品页面会直接定位失败。
正确提取逻辑
- 定位到目标标签后,调用标签的
.text属性即可提取内部所有文本内容,该方法会自动忽略标签内插入的注释片段,可直接获取带货币符号的价格字符串。如果需要纯数字数值,过滤掉文本中的非数字字符即可得到目标值5。 - 增加分支判断逻辑,同时兼容div、span两种价格容器的页面结构,适配不同药品页的渲染差异,避免提取失败。
- 发起请求时需要携带浏览器请求头,否则会被站点反爬策略拦截,无法拿到正确的页面源码。
可运行参考代码
import requests from bs4 import BeautifulSoup # 模拟浏览器请求头,绕过基础反爬校验 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } if __name__ == '__main__': # 替换为需要爬取的目标药品页地址 turl = '目标药品页面地址' print(turl) resp = requests.get(turl, headers=headers) soup = BeautifulSoup(resp.content, "html.parser") # 优先匹配div结构的价格标签 price_div = soup.find('div', class_='DrugPriceBox__price___dj2lv') if price_div: price_text = price_div.text print(price_text) # 提取纯数字价格 pure_num = ''.join([c for c in price_text if c.isdigit()]) print(f"纯数字价格:{pure_num}") else: # div结构匹配失败时,兼容span结构的价格标签 price_span = soup.find('span', class_="PriceBoxPlanOption__margin-right-4___2aqFt PriceBoxPlanOption__stike___pDQVN") if price_span: price_text = price_span.text print(price_text) pure_num = ''.join([c for c in price_text if c.isdigit()]) print(f"纯数字价格:{pure_num}") else: print('未提取到对应价格')
内容的提问来源于stack exchange,提问作者aLamp
相关产品推荐
相关产品推荐

