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