📌  相关文章
📜  使用Python从网站上抓取表格 – Selenium

📅  最后修改于: 2022-05-13 01:54:21.876000             🧑  作者: Mango

使用Python从网站上抓取表格 – Selenium

Selenium是获取网站、执行各种操作或从网站获取数据的自动化软件测试工具。它主要是为了通过自动化 Web 应用程序来简化测试工作而开发的。如今,除了用于测试之外,它还可以用于使繁琐的工作变得有趣。你知道在Selenium的帮助下,你还可以从网站上的表格中提取数据吗?答案是肯定的,我们可以轻松地从网站上抓取表格数据。这篇文章解释了从网站上抓取表格数据需要做什么。

应遵循的方法:

让我们考虑包含表格的简单 HTML 程序,以了解从网站上抓取表格的方法。

HTML


   
      Selenium Table
   
   
      
        
         
            
            
         
        
        
         
            
            
         
         
            
            
         
        
      
NameClass
Vinayak12
Ishita10
   


Python
# Python program to scrape table from website
  
# import libraries selenium and time
from selenium import webdriver
from time import sleep
  
# Create webdriver object
driver = webdriver.Chrome(
    executable_path="C:\selenium\chromedriver_win32\chromedriver.exe")
  
# Get the website
driver.get(
    "https://www.geeksforgeeks.org/find_element_by_link_text-driver-method-selenium-python/")
  
# Make Python sleep for some time
sleep(2)
  
# Obtain the number of rows in body
rows = 1+len(driver.find_elements_by_xpath(
    "/html/body/div[3]/div[2]/div/div[1]/div/div/div/article/div[3]/div/table/tbody/tr"))
  
# Obtain the number of columns in table
cols = len(driver.find_elements_by_xpath(
    "/html/body/div[3]/div[2]/div/div[1]/div/div/div/article/div[3]/div/table/tbody/tr[1]/td"))
  
# Print rows and columns
print(rows)
print(cols)
  
# Printing the table headers
print("Locators           "+"             Description")
  
# Printing the data of the table
for r in range(2, rows+1):
    for p in range(1, cols+1):
        
        # obtaining the text from each column of the table
        value = driver.find_element_by_xpath(
            "/html/body/div[3]/div[2]/div/div[1]/div/div/div/article/div[3]/div/table/tbody/tr["+str(r)+"]/td["+str(p)+"]").text
        print(value, end='       ')
    print()


浏览器输出:

请按照以下步骤操作:

创建 HTML 文件后,您可以按照以下步骤自行从网站的表格中提取数据。



  • 首先声明web驱动
  • 现在,打开要从中获取表格数据的网站
driver.get("Specify the path of the website")
  • 接下来,您需要在表中查找行
rows=1+len(driver.find_elements_by_xpath("Specify the altered path"))

在这里,修改后的 xpath 意味着如果第 1 行的 xpath 是/html/body/table/tbody/tr[1]那么,修改后的 xpath 将是/html/body/table/tbody/tr这里需要做的是删除表行的索引值。

注意:请记住将表头的行值加 1,因为在计算表行时不包括在内。

  • 此外,查找表中的列
cols=len(driver.find_elements_by_xpath("Specify the altered path"))

在这里,更改的 xpath 意味着如果显示输出 Vinayak 的列的 xpath 是/html/body/table/tbody/tr[1]/td[1]那么,更改的 xpath 将是/html/body/table/tbody/tr /td这里需要做的就是去掉表行和表数据的索引值。

  • 此外,从表体的每一列获取数据
for r in range(2, rows+1):
     for p in range(1, cols+1):
           value = driver.find_element_by_xpath("Specify the altered path").text

在这里,更改的 xpath 意味着如果显示输出 Vinayak 的列的 xpath 是/html/body/table/tbody/tr[1]/td[1]那么,更改的 xpath 将是/html/body/table/tbody/tr [“+str(r)+”]/td[“+str(p)+”]这里需要做的就是为表行和表的索引值加上str(r)和str(p)数据分别。



  • 最后,打印表的数据
print(value, end='       ')  
   print() 

如何从Selenium网站上抓取表格数据

正如我们现在看到的,在使用自动化工具Selenium时提取表数据的方法。现在,让我们看看来自网站的报废表数据的完整示例。我们将使用网站在下面给出的程序中提取其表格数据。

Python

# Python program to scrape table from website
  
# import libraries selenium and time
from selenium import webdriver
from time import sleep
  
# Create webdriver object
driver = webdriver.Chrome(
    executable_path="C:\selenium\chromedriver_win32\chromedriver.exe")
  
# Get the website
driver.get(
    "https://www.geeksforgeeks.org/find_element_by_link_text-driver-method-selenium-python/")
  
# Make Python sleep for some time
sleep(2)
  
# Obtain the number of rows in body
rows = 1+len(driver.find_elements_by_xpath(
    "/html/body/div[3]/div[2]/div/div[1]/div/div/div/article/div[3]/div/table/tbody/tr"))
  
# Obtain the number of columns in table
cols = len(driver.find_elements_by_xpath(
    "/html/body/div[3]/div[2]/div/div[1]/div/div/div/article/div[3]/div/table/tbody/tr[1]/td"))
  
# Print rows and columns
print(rows)
print(cols)
  
# Printing the table headers
print("Locators           "+"             Description")
  
# Printing the data of the table
for r in range(2, rows+1):
    for p in range(1, cols+1):
        
        # obtaining the text from each column of the table
        value = driver.find_element_by_xpath(
            "/html/body/div[3]/div[2]/div/div[1]/div/div/div/article/div[3]/div/table/tbody/tr["+str(r)+"]/td["+str(p)+"]").text
        print(value, end='       ')
    print()

此外,使用以下命令运行Python代码:

python run.py

输出:

浏览器输出: