使用BeautifulSoup/ETree提取嵌套div中esrs-value内容失败求助
解决ESRS字段值提取不全的问题
问题原因
页面部分esrs-value元素为动态加载,直接获取page_source会漏掉未渲染的内容;同时未限定提取范围在Summary板块内,可能导致提取逻辑偏离目标区域。
解决方案
- 等待动态内容加载完成:用Selenium的
WebDriverWait等待Summary板块核心元素出现,确保所有字段渲染完毕。 - 限定提取范围:先定位Summary板块的父容器,再在容器内提取
esrs-value,避免跨板块干扰。
完整代码示例
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup import lxml.etree as etree driver = webdriver.Chrome() try: driver.get('https://disclosures.ifc.org/project-detail/AS/604080/india-climate-smart-cities-ppp-program') # 等待Summary板块加载完成,定位到对应父容器 summary_container = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//div[contains(@class, "esrs-section") and .//h5[text()="Summary"]]')) ) # 仅获取Summary板块内的HTML内容 summary_html = summary_container.get_attribute('innerHTML') # 用BeautifulSoup提取字段值 soup = BeautifulSoup(summary_html, 'lxml') bs_values = [div.text.strip() for div in soup.find_all('div', class_='esrs-value')] # 或用ETree提取字段值 dom = etree.HTML(summary_html) xpath_values = [x.text.strip() for x in dom.xpath('//div[@class="esrs-value"]')] print("提取到的Summary字段值:") print(bs_values) finally: driver.quit()
关键说明
WebDriverWait设置10秒超时,足够页面加载动态内容;- 聚焦Summary板块的父容器解析,确保只提取目标区域的字段;
- 用
strip()清理文本前后空白,优化结果可读性。
内容的提问来源于stack exchange,提问作者ashah
相关产品推荐
相关产品推荐

