Python - 从<td class = "text">需要此文本</td>中提取文本

Python - Extracting Text from a <td class = "text">Need This Text</td>

我是 selenium 和 python 的新手,所以我的总体目标是从网站 Hoovers 中提取公司的收入值。

当前代码:

company = 'Trelleborg'
page = 'https://hoovers.com/company-information/cs.html?term=' + company
driver.get(page)

r = driver.find_element_by_xpath('//td/font[@class="company_sales"]').text
print(r)

HTML 期望收入

<td class="company_name">
  <a href="/company-information/cs/company- 
  profile.trelleborg_ab.a545a8005aced58d.html">
  Trelleborg AB</a>
</td>
<td class="company_location">Trelleborg, Skåne, Sweden</td>
<td class="company_sales">42.84M</td>

我想将 $3842.84M 文本提取到一个变量中。我尝试了很多在网上找到的不同解决方案,但一直收到 NoSuchElementException 错误消息。任何帮助将不胜感激!!!

看起来像是 XPath 的问题。一般Xpath格式是这样的。

Xpath=//tagname[@attribute='value']
  • // : Select 当前节点。
  • 标记名:特定节点的标记名。
  • @: Select 属性。
  • Attribute:节点的属性名称。
  • 值:属性的值。

因此,您的情况下的结果 xpath 必须看起来像。

//td[@class="company_sales"]

在这种情况下,您可以通过 class 名称或 CSS 扇区或 XPath 找到元素。

如果你想使用 XPath:

driver.find_element_by_xpath('//td[@class="company_sales"]').text

或者如果您想使用 CSS 扇区:

driver.find_element_by_css_selector("td.company_sales").text

driver.find_element_by_css_selector(".company_sales").text

或者如果你想使用 class 名称:

driver.find_element_by_class_name("company_sales").text

祝你好运!

要提取和打印文本 $3842.84M,您需要引入 WebDriverWait 以获得所需的 元素可见性 并且您可以使用以下解决方案:

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    company = 'Trelleborg'
    driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    page = 'https://hoovers.com/company-information/cs.html?term=' + company
    driver.get(page)
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='cmp-company-directory']//tbody//td/a[contains(., '"+company +"')]//following::td[2]"))).get_attribute("innerHTML"))
    
  • 控制台输出:

    42.84M