如何用BeautifulSoup更高效提取Lipidmaps中离子的m/z与分子式?
从LipidMaps页面提取离子数据的优化方案
你不需要将option标签转为字符串再用strip处理,BeautifulSoup直接支持读取标签的自定义data属性,这是更简洁可靠的方法。以下是优化后的实现代码:
from bs4 import BeautifulSoup import requests # 请求并解析页面 url = "https://www.lipidmaps.org/databases/lmsd/LMFA08040013" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # 遍历所有option标签提取数据 ion_data_list = [] for option in soup.find_all('option'): # 提取离子形式(自动去除前后空白) ion = option.get_text(strip=True) # 提取分子式(直接读取结构化属性) ion_formula = option.get('data-formula') # 提取m/z值(直接读取结构化属性) m_z = option.get('data-mass-z-ratio') # 过滤无效数据 if all([ion, ion_formula, m_z]): ion_data_list.append({ 'ion': ion, 'ion_formula': ion_formula, 'm_z': m_z }) # 打印示例结果 for data in ion_data_list: print(f"m_z = {data['m_z']}") print(f"ion-formula = {data['ion_formula']}") print(f"ion = {data['ion']}\n")
核心优化点:
option.get_text(strip=True):直接获取标签内文本并自动清理空白,替代手动字符串处理option.get('data-formula'):读取页面原生存储的结构化分子式数据,比解析HTML字符串更准确option.get('data-mass-z-ratio'):直接读取m/z的结构化数值,无需额外解析操作
示例输出:
m_z = 300.2897 ion-formula = C18H38NO2 ion = [M+H]+
内容的提问来源于stack exchange,提问作者Nima Hojat
相关产品推荐
相关产品推荐

