Raspe y guarde los datos de la tabla en un archivo CSV usando Selenium en Python

Selenium WebDriver es una API de código abierto que le permite interactuar con un navegador de la misma manera que lo haría un usuario real y sus scripts están escritos en varios lenguajes, es decir, Python, Java, C#, etc. Aquí trabajaremos con Python para raspar datos de tablas en la web y almacenarlos como un archivo CSV. Como Google Chrome es el navegador más popular, para facilitar las cosas, lo usaremos. Además, para almacenar los datos, utilizaremos los módulos pandas y csv de python.

Nota: asegúrese de tener Chromedriver instalado en su sistema y debe estar en la misma carpeta que el archivo python. El controlador de cromo se puede encontrar aquí .

Primero, necesitamos ubicar los elementos de la tabla, para este WebDriver de selenium. Usaremos el método xpath ya que la mayoría de los elementos en la página web tienen un xpath único . 

Implementación paso a paso:

Paso 1: Importe los módulos requeridos. 

Python3

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait 
import time
import pandas as pd
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import csv

Paso 2: Inicialice el navegador web con un controlador variable , mencione executable_path como la ubicación donde tiene el archivo chromedriver y diríjase a la URL requerida.

Python3

driver = webdriver.Chrome(
  executable_path='/usr/lib/chromium-browser/chromedriver') 
driver.get('https://www.geeksforgeeks.org/selenium-python-tutorial/')

Paso 3: Espere a que se cargue la página web. Puede hacerlo mediante el método implicitly_wait(​) . Cuando esté completamente cargada, maximiza la ventana usando maximizar_window() .

Python3

driver.implicitly_wait(10)
driver.maximize_window()

Paso 4: intente encontrar un patrón en los xpath de las filas y ubíquelos usando find_element_by_xpath() , y ejecute un ciclo para encontrar todas las celdas de la tabla y convertirlas en texto agregando .text() al final de cada elemento ubicado a través del xpath generalizado.

Python3

while(1): 
    
    try:
        method=driver.find_element_by_xpath('//*[@id="post-427949"]\
        /div[3]/table[2]/tbody/tr['+str(r)+']/td[1]').text  
        Desc=driver.find_element_by_xpath('//*[@id="post-427949"]\
        /div[3]/table[2]/tbody/tr['+str(r)+']/td[2]').text 
        Table_dict={
        'Method':method,
        'Description':Desc
        }
        templist.append(Table_dict) 
        df=pd.DataFrame(templist)
        r+=1
      
    except NoSuchElementException: 
        break

Paso 5: exporte el marco de datos a un archivo CSV y cierre la salida del navegador.

Python3

df.to_csv('table.csv')
driver.close()

A continuación se muestra la implementación completa:

Python3

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait 
import time
import pandas as pd
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import csv
  
driver = webdriver.Chrome(executable_path = 
                          '/usr/lib/chromium-browser/chromedriver') 
  
driver.get('https://www.geeksforgeeks.org/selenium-python-tutorial/')
driver.implicitly_wait(10)
driver.maximize_window()
r=1
templist = [] 
  
while(1): 
    try:
        method=driver.find_element_by_xpath('//*[@id="post-427949"]\
        /div[3]/table[2]/tbody/tr['+str(r)+']/td[1]').text 
        Desc=driver.find_element_by_xpath('//*[@id="post-427949"]/\
        div[3]/table[2]/tbody/tr['+str(r)+']/td[2]').text
          
        Table_dict={ 'Method': method,
                    'Description':Desc}
          
        templist.append(Table_dict) 
        df = pd.DataFrame(templist)
          
        r + = 1
          
    # if there are no more table data to scrape
    except NoSuchElementException: 
        break
          
# saving the dataframe to a csv
df.to_csv('table.csv') 
driver.close()

Producción:

Publicación traducida automáticamente

Artículo escrito por adityamutharia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *