Python 如何仅从html中提取数字?

Python 如何仅从html中提取数字?,python,selenium,selenium-webdriver,xpath,xpath-1.0,Python,Selenium,Selenium Webdriver,Xpath,Xpath 1.0,我试图从这个html元素中提取数字: <td bgcolor="green"> <font color="white"> "49.8 " <small>dBmV</small> </font> </td> 我试过: browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/t

我试图从这个html元素中提取数字:

<td bgcolor="green">
    <font color="white">
        "49.8 "
        <small>dBmV</small>
    </font>
</td>
我试过:

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获取细节,一些更整洁的东西

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

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

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

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]))
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, '')

希望这有帮助

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

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]))
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, '')
希望这有帮助

您可以这样替换额外的文本:

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]))
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, '')
您可以这样替换额外的文本:

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]))
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, '')
要提取文本49.8,可以使用以下命令:

通过执行脚本和文本内容使用xpath:

通过拆分行使用xpath并获取_属性:

要提取文本49.8,可以使用以下命令:

通过执行脚本和文本内容使用xpath:

通过拆分行使用xpath并获取_属性:


对于这一点,当selenium方法欺骗我时,我实际上只是使用内置funcs根据需要拆分html文本,但我不知道您是否仍然希望使用selenium而不是49.8dBmV?结果之间是否有空白?是的,有一个空格使用.split,然后从列表中获取第0个元素a=49.8dBmV a.split[0],结果->49.8。因此,当selenium方法愚弄我时,我实际上只是使用内置函数根据需要拆分html文本,但我不知道您是否仍然希望使用selenium而不是49.8dBmV?结果之间是否有空白?是的,有一个空格使用.split,然后从列表中获取第0个元素a=49.8 dBmV a.split[0],结果->“49.8”这个注释很有意义,谢谢,但是我尝试了那一行,仍然得到了一个错误,尽管现在它给出了无法定位:NoTouchElementException:没有这样的元素:无法定位元素:{方法:xpath,选择器:/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/text[0]}我也尝试了几个变体,试图制作和工作,但没有得到这样的元素或无效的选择器exceptions@GlennDavies抱歉,我在查看Xpath时没有正确考虑selenium上下文。find_元素\u by_Xpath只支持返回元素,它不支持返回任何其他内容的Xpath。我将更新我的nswer now。该评论很有意义,谢谢,但我尝试了那一行,仍然得到了一个错误,尽管现在它给出了无法定位:NoTouchElementException:没有这样的元素:无法定位元素:{方法:xpath,选择器:/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/text[0]}我也尝试了几个变体,试图制作和工作,但没有得到这样的元素或无效的选择器exceptions@GlennDavies抱歉,我在查看Xpath时没有正确考虑selenium上下文。find_元素\u by_Xpath只支持返回元素,它不支持返回任何其他内容的Xpath。我将更新我的现在回答。我可以这样做,但我更愿意直接从html中提取,如果可能的话。我可以这样做,但我更愿意直接从html中提取,如果可能的话。嗯,是的,这会起作用,但仍然希望能够直接提取数字,而无需另一行来删除文本。我可以忽略/小部分搜索元素吗?嗯m是的,这会起作用,但仍然希望能够直接提取数字,而无需另一行来删除文本。我可以忽略/小部分来搜索元素吗?很好!没有想到拆分行!完成了!printdriver.execute_script'return arguments[0]。firstChild.textContent;',driver.find_element_by_xpath//td[@bgcolor='green']/font[@color='white'].strip对我有用。谢谢你的帮助!@Glendavies Upvote如果这个答案对你有帮助的话,为了将来的读者的利益,请投票回答。好的!没有想到分割线!就这样!printdriver.execute_脚本'return arguments[0]。firstChild.textContent;',driver.find_element_by_xpath//td[@bgcolor='green']/font[@color='white'].strip对我有用。谢谢你的帮助!@GlennDavies向上投票,如果这个答案对你有帮助,对未来的读者有好处。