我正在尝试从这个 html 元素中提取数字:
<td bgcolor="green"> <font color="white"> "49.8 " <small>dBmV</small> </font> </td>
如何仅提取 49.8 而不获取 bBmV?
我能够使用 xpath 返回全部 49.8 dbmv,但是当仅搜索“49.8”的 xpath 时,我收到错误
错误:
invalid selector: The result of the xpath expression "/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/text()" is: [object Text]. It should be an element.
我尝试过:
browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
返回 49.8 dBmV
进而:
browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/text()").text
返回上述异常。
我只想要数字 49.8(显然会发生变化)。我知道我可以稍后提取该数字,但我希望有一些东西可以用来直接从 html 中获取详细信息,一些更整洁的东西
要从这个 HTML 元素中提取出数字 49.8(而不是包括单位的 dBmV),你可以使用以下几种方法。
49.8
dBmV
XPath 本身不支持直接的正则表达式匹配,但可以通过结合 .text 方法和 Python 的正则表达式来实现。
.text
首先,你可以使用 XPath 获取文本内容,然后使用正则表达式从中提取出数字部分。
import re from selenium import webdriver # 设置浏览器驱动 driver = webdriver.Chrome() # 假设你已经打开了页面 driver.get('your_webpage_url') # 使用XPath获取包含数字和单位的文本 element = driver.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text # 使用正则表达式提取数字部分 match = re.search(r'(\d+\.\d+)', element) if match: value = match.group(1) print(f"提取的数字是: {value}") else: print("没有找到匹配的数字")
driver.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
49.8 dBmV
re.search(r'(\d+\.\d+)', element)
(\d+\.\d+)
如果你不想使用正则表达式,还可以使用 XPath 来获取文本内容并通过字符串处理来提取数字部分。以下是通过字符串截取的实现方法。
# 使用XPath获取包含文本的元素 element = driver.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text # 去掉 'dBmV' 后面的空白字符,保留数字部分 numeric_value = element.split()[0] # 默认 split() 会按空白字符分割 print(f"提取的数字是: {numeric_value}")
split()
.find_elements()
有时,文本可能会分布在不同的子元素中,像你给的 HTML 结构中,"49.8" 是在 <font> 标签内,而 dBmV 在 <small> 标签内。你可以使用 .find_elements() 获取所有子元素的文本内容,然后进行拼接或选择你需要的部分。
"49.8"
<font>
<small>
# 使用XPath获取所有子元素 elements = driver.find_elements_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/*") # 提取第一个文本节点 value = elements[0].text # 应该是 '49.8' print(f"提取的数字是: {value}")
这些方法可以帮助你从 HTML 中提取纯数字部分,并根据你的需要进行进一步处理。