当使用 BeautifulSoup 库查找元素时,如果网站 HTML 代码发生变化,导致目标元素的 class 属性值改变,就会出现查找失败的情况。例如,代码 score_breakdown_tag = soup.find('div', attrs={'class': 'bui-spacer--large'}) 可能会返回 <div class='a6ef32f45e bui-spacer--large'>,而不是我们想要的 <div class='bui-spacer--large'>

为了避免这种情况,可以使用更加精确的选择器来定位元素,例如 CSS 选择器或 XPath 选择器。

使用 CSS 选择器

以下代码使用 CSS 选择器 div.bui-spacer--large 来查找所有 class 属性值为 'bui-spacer--large' 的 div 元素:

score_breakdown_tag = soup.select_one('div.bui-spacer--large')
print(score_breakdown_tag)

使用 select_one() 方法可以返回第一个匹配的元素。如果需要查找所有匹配的元素,可以使用 select() 方法。

使用 XPath 选择器

除了 CSS 选择器,还可以使用 XPath 选择器来查找元素。XPath 选择器可以更加灵活地定位元素,例如可以根据元素的属性、文本内容等进行查找。

score_breakdown_tag = soup.find('div', attrs={'class': 'bui-spacer--large'})  # 使用 find() 方法定位元素
print(score_breakdown_tag)

其他方法

除了使用更精确的选择器,还可以考虑以下方法来避免查找失败:

  • 使用 find_all() 方法查找所有匹配的元素,然后根据其他属性或文本内容进行筛选。
  • 使用正则表达式来匹配元素的 class 属性值。

通过以上方法,可以有效地解决网站 HTML 代码变化导致的元素查找失败问题。

Python BeautifulSoup 精确查找元素:避免 class 属性值变化

原文地址: https://www.cveoy.top/t/topic/nRIB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录