簡體   English   中英

如何只從html中提取數字?

[英]How to extract just the number from html?

我試圖從這個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中獲取詳細信息的東西,有點小巧

要提取文本49.8 ,可以使用以下定位策略

  • 通過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]) 

您可以使用第一行,並獲得如下所示的數字:

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

希望這對您有所幫助!

您可以這樣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, '')

Selenium中的find_element_by_xpath API僅支持返回元素,因此即使在XPath中也可以指定一個表達式,該表達式僅返回您要查找的文本,在這種情況下,僅使用XPath是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM