Python-从需要此文本中提取文本

时间:2019-01-25 21:41:59

标签: python selenium xpath web-scraping webdriverwait

我对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错误消息。任何帮助将不胜感激!!!

3 个答案:

答案 0 :(得分:1)

在这种情况下,您可以按类名称或CSS扇区或XPath查找元素。

如果要使用XPath:

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

如果要使用CSS扇区,也可以:

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

OR

driver.find_element_by_css_selector(".company_sales").text

或者如果您想使用类名:

driver.find_element_by_class_name("company_sales").text

祝你好运!

答案 1 :(得分:0)

XPath似乎有问题。通常,Xpath格式类似于。

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

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

//td[@class="company_sales"]

答案 2 :(得分:0)

要提取并打印文本 $ 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