Extraer contenido de sitios web dinámicos

Para raspar contenido de una página estática, usamos BeautifulSoup como nuestro paquete para raspar, y funciona perfectamente para páginas estáticas. Usamos requests para cargar la página en nuestro script de python. Ahora bien, si la página que intentamos cargar es de naturaleza dinámica y solicitamos esta página mediante la biblioteca de requests, enviaría el código JS para que se ejecute localmente. El paquete de requests no ejecuta este código JS y solo lo proporciona como fuente de la página.

BeautifulSoup no detecta las interacciones con DOM a través de Java Script. Supongamos que tiene una tabla generada por JS. BeautifulSoup no podrá capturarlo, mientras que Selenium sí.

Si solo hubiera una necesidad de raspar sitios web estáticos, habríamos usado solo bs4. Pero, para páginas web generadas dinámicamente, usamos selenium.
Selenium

Selenium es un marco de prueba automatizado gratuito (de código abierto) que se utiliza para validar aplicaciones web en diferentes navegadores y plataformas. Puede usar varios lenguajes de programación como Java, C#, Python, etc. para crear scripts de prueba de Selenium. Aquí, usamos Python como nuestro lenguaje principal.

Primero, la instalación:

1) enlaces de selenium en python

pip install selenium

2) Controladores web
Selenium requiere un controlador web para interactuar con el navegador elegido. Los controladores web son un paquete para interactuar con el navegador web. Interactúa con el navegador web o un servidor web remoto a través de un protocolo de conexión común a todos. Puede comprobar e instalar los controladores web de su elección de navegador.

Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads
Firefox: https://github.com/mozilla/geckodriver/releases
Safari:    https://webkit.org/blog/6900/webdriver-support-in-safari-10/ 

hermosa sopa

Beautifulsoup es una biblioteca de Python para extraer datos de archivos HTML y XML. Funciona con su analizador favorito para proporcionar formas idiomáticas de navegar, buscar y modificar el árbol de análisis. Comúnmente ahorra a los programadores horas o días de trabajo.

Para usar sopa hermosa, tenemos este enlace maravilloso en python:
1) Enlaces BS4 en python

pip install bs4

Supongamos que el sitio es dinámico y el raspado simple conduce a devolver un objeto de tipo Ninguno.

#### This program scrapes naukri.com's page and gives our result as a 
#### list of all the job_profiles which are currently present there. 
  
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
  
#url of the page we want to scrape
url = "https://www.naukri.com/top-jobs-by-designations# desigtop600"
  
# initiating the webdriver. Parameter includes the path of the webdriver.
driver = webdriver.Chrome('./chromedriver') 
driver.get(url) 
  
# this is just to ensure that the page is loaded
time.sleep(5) 
  
html = driver.page_source
  
# this renders the JS code and stores all
# of the information in static HTML code.
  
# Now, we could simply apply bs4 to html variable
soup = BeautifulSoup(html, "html.parser")
all_divs = soup.find('div', {'id' : 'nameSearch'})
job_profiles = all_divs.find_all('a')
  
# printing top ten job profiles
count = 0
for job_profile in job_profiles :
    print(job_profile.text)
    count = count + 1
    if(count == 10) :
        break
  
driver.close() # closing the webdriver

Aquí está el video del raspador en acción: Working_scraper_video

Salida del código:

Publicación traducida automáticamente

Artículo escrito por instantramen 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 *