Python如何从HTML文本中提取股价、NAV及折溢价率数值?
可以使用检索目标前后固定文本的方式提取,同时也有更稳定的实现方案,具体如下:
方案1:正则匹配(基于前后固定文本检索)
该方案逻辑简单,不需要依赖第三方库,只要目标值前后的特征字符串长期不变就可以使用:
- 匹配逻辑:定位
Current</td>后的三个right-align类的td标签内容,直接用正则捕获需要的数值 - 示例代码:
import re html_str = """你的完整HTML文本""" # 正则规则,三个捕获组分别对应你需要的三个值 pattern = r'<td>Current</td><td class="right-align">(\$\d+\.\d+)</td><td class="right-align">(\$\d+\.\d+)</td><td class="right-align">(-?\d+\.\d+%)</td>' result = re.search(pattern, html_str) if result: share_price, nav, discount = result.groups() print(share_price, nav, discount)
- 注意事项:如果HTML代码里的空格、标签属性、换行有变动,会导致匹配失败,只适合结构完全固定的场景。
方案2:HTML解析库提取(更推荐,稳定性更高)
使用专门的HTML解析工具直接定位DOM元素,抗结构变动能力更强,只要表格的表头和Current行的顺序不变,就算标签属性、空格换行有调整也能正常提取:
- 首先安装依赖库:
pip install beautifulsoup4 - 示例代码:
from bs4 import BeautifulSoup html_str = """你的完整HTML文本""" soup = BeautifulSoup(html_str, "html.parser") # 定位到Current所在的行 current_tr = soup.find("td", text="Current").parent # 按顺序取后面三个td的文本 values = [td.text.strip() for td in current_tr.find_all("td")[1:]] share_price, nav, discount = values print(share_price, nav, discount)
- 优势:不用关心HTML代码的格式细节,只要页面的功能结构不变就可以长期运行,适合日常爬取使用。
内容的提问来源于stack exchange,提问作者nbafan249
相关产品推荐
相关产品推荐

