Módulos de Python para web scraping
En este capítulo, aprendamos varios módulos de Python que podemos usar para web scraping.
Entornos de desarrollo de Python usando virtualenv
Virtualenv es una herramienta para crear entornos Python aislados. Con la ayuda de virtualenv, podemos crear una carpeta que contenga todos los ejecutables necesarios para usar los paquetes que requiere nuestro proyecto Python. También nos permite agregar y modificar módulos de Python sin acceso a la instalación global.
Puede usar el siguiente comando para instalar virtualenv -
(base) D:\ProgramData>pip install virtualenv
Collecting virtualenv
Downloading
https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c3
5d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl
(1.9MB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 1.9MB 86kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0
Ahora, necesitamos crear un directorio que representará el proyecto con la ayuda del siguiente comando:
(base) D:\ProgramData>mkdir webscrap
Ahora, ingrese a ese directorio con la ayuda de este siguiente comando:
(base) D:\ProgramData>cd webscrap
Ahora, necesitamos inicializar la carpeta del entorno virtual de nuestra elección de la siguiente manera:
(base) D:\ProgramData\webscrap>virtualenv websc
Using base prefix 'd:\\programdata'
New python executable in D:\ProgramData\webscrap\websc\Scripts\python.exe
Installing setuptools, pip, wheel...done.
Ahora, active el entorno virtual con el comando que se proporciona a continuación. Una vez activado con éxito, verá su nombre en el lado izquierdo entre paréntesis.
(base) D:\ProgramData\webscrap>websc\scripts\activate
Podemos instalar cualquier módulo en este entorno de la siguiente manera:
(websc) (base) D:\ProgramData\webscrap>pip install requests
Collecting requests
Downloading
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl (9
1kB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 148kB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
Downloading
https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca
55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133
kB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 369kB/s
Collecting certifi>=2017.4.17 (from requests)
Downloading
https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee6364
4d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl
(147kB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 153kB 527kB/s
Collecting urllib3<1.24,>=1.21.1 (from requests)
Downloading
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl (133k
B)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 517kB/s
Collecting idna<2.8,>=2.5 (from requests)
Downloading
https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746
a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 61kB 339kB/s
Installing collected packages: chardet, certifi, urllib3, idna, requests
Successfully installed certifi-2018.8.24 chardet-3.0.4 idna-2.7 requests-2.19.1
urllib3-1.23
Para desactivar el entorno virtual, podemos usar el siguiente comando:
(websc) (base) D:\ProgramData\webscrap>deactivate
(base) D:\ProgramData\webscrap>
Puede ver que (websc) se ha desactivado.
Módulos de Python para web scraping
El raspado web es el proceso de construcción de un agente que puede extraer, analizar, descargar y organizar información útil de la web automáticamente. En otras palabras, en lugar de guardar manualmente los datos de los sitios web, el software de raspado web automáticamente cargará y extraerá datos de varios sitios web según nuestro requisito.
En esta sección, vamos a discutir acerca de las bibliotecas Python útiles para web scraping.
Peticiones
Es una biblioteca de raspado web de Python simple. Es una biblioteca HTTP eficiente que se utiliza para acceder a páginas web. Con la ayuda deRequests, podemos obtener el HTML sin procesar de las páginas web que luego se pueden analizar para recuperar los datos. Antes de usarrequests, entendamos su instalación.
Instalación de solicitudes
Podemos instalarlo en nuestro entorno virtual o en la instalación global. Con la ayuda depip comando, podemos instalarlo fácilmente de la siguiente manera:
(base) D:\ProgramData> pip install requests
Collecting requests
Using cached
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Requirement already satisfied: idna<2.8,>=2.5 in d:\programdata\lib\sitepackages
(from requests) (2.6)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in
d:\programdata\lib\site-packages (from requests) (1.22)
Requirement already satisfied: certifi>=2017.4.17 in d:\programdata\lib\sitepackages
(from requests) (2018.1.18)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in
d:\programdata\lib\site-packages (from requests) (3.0.4)
Installing collected packages: requests
Successfully installed requests-2.19.1
Ejemplo
En este ejemplo, estamos realizando una solicitud GET HTTP para una página web. Para esto, primero debemos importar la biblioteca de solicitudes de la siguiente manera:
In [1]: import requests
En esta siguiente línea de código, usamos solicitudes para realizar solicitudes GET HTTP para la URL: https://authoraditiagarwal.com/ haciendo una solicitud GET.
In [2]: r = requests.get('https://authoraditiagarwal.com/')
Ahora podemos recuperar el contenido usando .text propiedad de la siguiente manera:
In [5]: r.text[:200]
Observe que en la siguiente salida, obtuvimos los primeros 200 caracteres.
Out[5]: '<!DOCTYPE html>\n<html lang="en-US"\n\titemscope
\n\titemtype="http://schema.org/WebSite" \n\tprefix="og: http://ogp.me/ns#"
>\n<head>\n\t<meta charset
="UTF-8" />\n\t<meta http-equiv="X-UA-Compatible" content="IE'
Urllib3
Es otra biblioteca de Python que se puede utilizar para recuperar datos de URL similares a la requestsbiblioteca. Puede leer más sobre esto en su documentación técnica en https://urllib3.readthedocs.io/en/latest/.
Instalación de Urllib3
Utilizando el pip comando, podemos instalar urllib3 ya sea en nuestro entorno virtual o en una instalación global.
(base) D:\ProgramData>pip install urllib3
Collecting urllib3
Using cached
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl
Installing collected packages: urllib3
Successfully installed urllib3-1.23
Ejemplo: raspado usando Urllib3 y BeautifulSoup
En el siguiente ejemplo, estamos raspando la página web usando Urllib3 y BeautifulSoup. Estamos usandoUrllib3en el lugar de la biblioteca de solicitudes para obtener los datos brutos (HTML) de la página web. Entonces estamos usandoBeautifulSoup para analizar esos datos HTML.
import urllib3
from bs4 import BeautifulSoup
http = urllib3.PoolManager()
r = http.request('GET', 'https://authoraditiagarwal.com')
soup = BeautifulSoup(r.data, 'lxml')
print (soup.title)
print (soup.title.text)
Esta es la salida que observará cuando ejecute este código:
<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal
Selenio
Es un conjunto de pruebas automatizadas de código abierto para aplicaciones web en diferentes navegadores y plataformas. No es una sola herramienta, sino un conjunto de software. Tenemos enlaces de selenio para Python, Java, C #, Ruby y JavaScript. Aquí vamos a realizar web scraping usando selenium y sus enlaces de Python. Puede obtener más información sobre Selenium con Java en el enlace Selenium .
Los enlaces de Selenium Python proporcionan una API conveniente para acceder a Selenium WebDrivers como Firefox, IE, Chrome, Remote, etc. Las versiones actuales de Python compatibles son 2.7, 3.5 y superiores.
Instalación de selenio
Utilizando el pip comando, podemos instalar urllib3 ya sea en nuestro entorno virtual o en una instalación global.
pip install selenium
Como selenium requiere un controlador para interactuar con el navegador elegido, necesitamos descargarlo. La siguiente tabla muestra diferentes navegadores y sus enlaces para descargar el mismo.
Chrome |
https://sites.google.com/a/chromium.org/ |
Edge |
https://developer.microsoft.com/ |
Firefox |
https://github.com/ |
Safari |
https://webkit.org/ |
Ejemplo
Este ejemplo muestra el raspado web con selenio. También se puede utilizar para pruebas que se denominan pruebas de selenio.
Después de descargar el controlador particular para la versión especificada del navegador, necesitamos programar en Python.
Primero, necesito importar webdriver de selenio de la siguiente manera:
from selenium import webdriver
Ahora, proporcione la ruta del controlador web que hemos descargado según nuestro requisito:
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)
Ahora, proporcione la URL que queremos abrir en ese navegador web ahora controlado por nuestro script de Python.
browser.get('https://authoraditiagarwal.com/leadershipmanagement')
También podemos raspar un elemento en particular proporcionando el xpath como se proporciona en lxml.
browser.find_element_by_xpath('/html/body').click()
Puede comprobar el resultado del navegador, controlado por el script Python.
Scrapy
Scrapy es un marco de rastreo web rápido y de código abierto escrito en Python, que se utiliza para extraer los datos de la página web con la ayuda de selectores basados en XPath. Scrapy se lanzó por primera vez el 26 de junio de 2008 con la licencia BSD, y se lanzó un hito 1.0 en junio de 2015. Nos proporciona todas las herramientas que necesitamos para extraer, procesar y estructurar los datos de los sitios web.
Instalación de Scrapy
Utilizando el pip comando, podemos instalar urllib3 ya sea en nuestro entorno virtual o en una instalación global.
pip install scrapy
Para un estudio más detallado de Scrapy puedes ir al enlace Scrapy