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