Python Web Scraping: extracción de datos
Analizar una página web significa comprender su estructura. Ahora, surge la pregunta de por qué es importante para el web scraping. En este capítulo, comprendamos esto en detalle.
Análisis de páginas web
El análisis de la página web es importante porque sin analizar no podemos saber en qué forma vamos a recibir los datos (estructurados o no) de esa página web después de la extracción. Podemos hacer análisis de páginas web de las siguientes formas:
Ver fuente de página
Esta es una forma de comprender cómo está estructurada una página web examinando su código fuente. Para implementar esto, debemos hacer clic derecho en la página y luego seleccionar elView page sourceopción. Luego, obtendremos los datos de nuestro interés de esa página web en forma de HTML. Pero la principal preocupación son los espacios en blanco y el formato que nos resulta difícil de formatear.
Inspeccionar el origen de la página haciendo clic en la opción Inspeccionar elemento
Esta es otra forma de analizar la página web. Pero la diferencia es que resolverá el problema del formato y los espacios en blanco en el código fuente de la página web. Puede implementar esto haciendo clic derecho y luego seleccionando elInspect o Inspect elementopción del menú. Proporcionará la información sobre un área o elemento particular de esa página web.
Diferentes formas de extraer datos de una página web
Los siguientes métodos se utilizan principalmente para extraer datos de una página web:
Expresión regular
Son lenguajes de programación altamente especializados integrados en Python. Podemos usarlo a través deremódulo de Python. También se llama RE o expresiones regulares o patrones de expresiones regulares. Con la ayuda de expresiones regulares, podemos especificar algunas reglas para el posible conjunto de cadenas que queremos hacer coincidir a partir de los datos.
Si desea obtener más información sobre las expresiones regulares en general, vaya al enlace https://www.tutorialspoint.com/automata_theory/regular_expressions.htmy si desea saber más sobre el módulo re o la expresión regular en Python, puede seguir el enlace https://www.tutorialspoint.com/python/python_reg_expressions.htm .
Ejemplo
En el siguiente ejemplo, vamos a extraer datos sobre India de http://example.webscraping.com después de hacer coincidir el contenido de <td> con la ayuda de una expresión regular.
import re
import urllib.request
response =
urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')
html = response.read()
text = html.decode()
re.findall('<td class="w2p_fw">(.*?)</td>',text)
Salida
La salida correspondiente será como se muestra aquí:
[
'<img src="/places/static/images/flags/in.png" />',
'3,287,590 square kilometres',
'1,173,108,018',
'IN',
'India',
'New Delhi',
'<a href="/places/default/continent/AS">AS</a>',
'.in',
'INR',
'Rupee',
'91',
'######',
'^(\\d{6})$',
'enIN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc',
'<div>
<a href="/places/default/iso/CN">CN </a>
<a href="/places/default/iso/NP">NP </a>
<a href="/places/default/iso/MM">MM </a>
<a href="/places/default/iso/BT">BT </a>
<a href="/places/default/iso/PK">PK </a>
<a href="/places/default/iso/BD">BD </a>
</div>'
]
Observe que en el resultado anterior puede ver los detalles sobre el país India utilizando expresiones regulares.
Hermosa sopa
Supongamos que queremos recopilar todos los hipervínculos de una página web, luego podemos usar un analizador llamado BeautifulSoup que se puede conocer con más detalle en https://www.crummy.com/software/BeautifulSoup/bs4/doc/.En palabras simples, BeautifulSoup es una biblioteca de Python para extraer datos de archivos HTML y XML. Se puede usar con solicitudes, porque necesita una entrada (documento o url) para crear un objeto de sopa, ya que no puede obtener una página web por sí mismo. Puede utilizar la siguiente secuencia de comandos de Python para recopilar el título de la página web y los hipervínculos.
Instalación de Beautiful Soup
Utilizando el pip comando, podemos instalar beautifulsoup ya sea en nuestro entorno virtual o en una instalación global.
(base) D:\ProgramData>pip install bs4
Collecting bs4
Downloading
https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89
a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Requirement already satisfied: beautifulsoup4 in d:\programdata\lib\sitepackages
(from bs4) (4.6.0)
Building wheels for collected packages: bs4
Running setup.py bdist_wheel for bs4 ... done
Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d
52235414c3467d8889be38dd472
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1
Ejemplo
Tenga en cuenta que en este ejemplo, estamos ampliando el ejemplo anterior implementado con el módulo de solicitudes de Python. estamos usandor.text para crear un objeto de sopa que luego se usará para obtener detalles como el título de la página web.
Primero, necesitamos importar los módulos de Python necesarios:
import requests
from bs4 import BeautifulSoup
En la siguiente línea de código, usamos solicitudes para realizar solicitudes GET HTTP para la URL: https://authoraditiagarwal.com/ haciendo una solicitud GET.
r = requests.get('https://authoraditiagarwal.com/')
Ahora necesitamos crear un objeto Soup de la siguiente manera:
soup = BeautifulSoup(r.text, 'lxml')
print (soup.title)
print (soup.title.text)
Salida
La salida correspondiente será como se muestra aquí:
<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal
Lxml
Otra biblioteca de Python que vamos a discutir para web scraping es lxml. Es una biblioteca de análisis HTML y XML de alto rendimiento. Es comparativamente rápido y sencillo. Puedes leer más sobre esto enhttps://lxml.de/.
Instalación de lxml
Usando el comando pip, podemos instalar lxml ya sea en nuestro entorno virtual o en una instalación global.
(base) D:\ProgramData>pip install lxml
Collecting lxml
Downloading
https://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e
3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl
(3.
6MB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5
Ejemplo: extracción de datos usando lxml y solicitudes
En el siguiente ejemplo, estamos extrayendo un elemento particular de la página web de authoraditiagarwal.com mediante el uso de lxml y solicitudes -
Primero, necesitamos importar las solicitudes y html de la biblioteca lxml de la siguiente manera:
import requests
from lxml import html
Ahora debemos proporcionar la URL de la página web para eliminar
url = 'https://authoraditiagarwal.com/leadershipmanagement/'
Ahora necesitamos proporcionar el camino (Xpath) a un elemento particular de esa página web -
path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'
response = requests.get(url)
byte_string = response.content
source_code = html.fromstring(byte_string)
tree = source_code.xpath(path)
print(tree[0].text_content())
Salida
La salida correspondiente será como se muestra aquí:
The Sprint Burndown or the Iteration Burndown chart is a powerful tool to communicate
daily progress to the stakeholders. It tracks the completion of work for a given sprint
or an iteration. The horizontal axis represents the days within a Sprint. The vertical
axis represents the hours remaining to complete the committed work.