【问题标题】:Python - Extracting Text from a <td class = "text">Need This Text</td>Python - 从 <td class = "text">Need This Text</td> 中提取文本
【发布时间】:2019-01-25 21:41:59
【问题描述】:

我是 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">$3842.84M</td>

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

【问题讨论】:

  • 您正在寻找//td[@class="company_sales"],您的sn-p 中没有font 元素
  • driver.find_element_by_class_name("company_sales").text

标签: python selenium xpath web-scraping webdriverwait


【解决方案1】:

在这种情况下,您可以按类名或 CSS Sector 或 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

或者如果你想使用类名:

driver.find_element_by_class_name("company_sales").text

祝你好运!

【讨论】:

  • 我尝试了这些解决方案并输出错误:没有这样的元素:无法定位元素。
  • 它应该可以工作。我已经在 chrome 浏览器中测试了这段代码,它运行良好。如果你愿意,我可以分享你的代码。
【解决方案2】:

要提取和打印文本 $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"))
    
  • 控制台输出:

    $3842.84M
    

【讨论】:

  • 您是如何获得 XPATH 的?
  • @KenPen 我没有从任何地方获得 xpath,而是根据您的要求构建了它。
【解决方案3】:

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

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

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

//td[@class="company_sales"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2013-04-05
    • 2016-03-18
    相关资源
    最近更新 更多