如何只从html中提取数字?

时间:2019-06-20 07:29:11

标签: python selenium selenium-webdriver xpath xpath-1.0

我正在尝试从该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中获取详细信息的东西,有点整理

4 个答案:

答案 0 :(得分:2)

要提取文本 49.8 ,您可以使用以下Locator Strategy

  • 通过execute_script() textContent 使用 xpath

    print(driver.execute_script('return arguments[0].firstChild.textContent;', driver.find_element_by_xpath("//td[@bgcolor='green']/font[@color='white']")).strip())
    
  • 通过splitlines()get_attribute()使用 xpath

    print(driver.find_element_by_xpath("//td[@bgcolor='green']/font[@color='white']").get_attribute("innerHTML").splitlines()[1])
    

答案 1 :(得分:1)

您可以使用第一行,并获得如下数字:

text_num = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
print(float(text_num.split()[0]))

希望这对您有帮助!

答案 2 :(得分:1)

您可以replace这样的多余文本:

first_text = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
second_text = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/small").text
only_first_text = first_text.replace(second_text, '')

答案 3 :(得分:0)

Selenium中的find_element_by_xpath API仅支持返回元素,因此即使在XPath中也可以指定一个表达式,该表达式仅返回您要查找的文本,在这种情况下,使用XPath是不可能的