Ya tienes todo listo para usar PycURL y BeautifulSoup. Para utilizar estos paquetes, primero debemos importarlos a nuestro archivo `scraper.py`. Simplemente añade este fragmento de código al principio del archivo:
import pycurl
import certify
from io import BytesIO
from bs4 import BeautifulSoup
# All our logic will go underneath this line
Ahora que has importado los paquetes, vamos a ocuparnos de la lógica de nuestro rastreador web. Por lo que hemos visto hasta ahora, sabemos que debemos abordar dos aspectos: la extracción de datos y el manejo de datos. La primera parte la cubre PycURL y la segunda, BeautifulSoup. Para una mejor estructura, sugiero que tratemos cada parte por separado.
3.1. Scraping de datos con cURL y Python
Cuando hablo de scraping, me refiero a la parte de extracción del rastreador web. Teniendo esto en cuenta y sabiendo cómo usar curl en Python interactuando con la interfaz de PycURL, escribamos el código:
# Setting global variables
TARGET_URL = 'https://httpbin.org/forms/post'
# Using cURL and Python to gather data from a server via PycURL
buffer = BytesIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, TARGET_URL)
curl.setopt(curl.WRITEDATA, buffer)
curl.setopt(curl.CAINFO, certifi.where())
curl.perform()
curl.close()
# Using BytesIO to retrieve the scraped data
body = buffer.getvalue()
# Saving the output and printing it in terminal
data = body.decode('iso-8859-1')
print(data)
En el código anterior, comenzamos declarando la variable global `TARGET_URL`, que contiene la URL del sitio web del que queremos extraer datos. A continuación, creamos un búfer utilizando `BufferIO`, inicializamos PycURL y configuramos dos opciones: una para la transferencia de datos y otra para el nombre del archivo que contiene los certificados. Por último, pero no menos importante, ejecutamos la acción de cURL y cerramos la sesión después.
Eso es todo, has utilizado con éxito Python para realizar una solicitud cURL e imprimir el archivo HTML en tu consola. Ahora solo nos queda ocuparnos de la segunda sección, es decir, el manejo de datos.
3.2. Análisis de HTML con Python y BeautifulSoup
Disponer de los datos sin procesar es redundante en el web scraping, a menos que realicemos algún tipo de acción sobre ellos. El objetivo más básico de cualquier web scraper es extraer datos del HTML. Para nuestro ejemplo, supongamos que queremos extraer todo el texto dentro de los elementos `<p>` de la variable `data` (que actualmente contiene todo el HTML extraído). Así es como lo hacemos utilizando BeautifulSoup:
# Parsing data using BeautifoulSoup
soup = BeautifulSoup(data, 'html.parser')
# Finding elements using BeautifoulSoup
paragraphs = soup.find_all("p")
for p in paragraphs:
print(p.text)
Como puedes ver, con BeautifulSoup solo se necesitan 4 líneas de código para extraer el resultado deseado. Al ejecutar el script completo, ahora debería mostrarse el texto dentro de cada párrafo que se encuentre en el archivo HTML que hemos recopilado de nuestro sitio web de destino.
Así pues, suponiendo que has seguido las instrucciones y que tu `scraper.py` incluye todo el código que hemos escrito en esta sección, volvamos al terminal y ejecutemos el script:
~/desktop/py_scraper » python3 scraper.py
Customer name:
Telephone:
E-mail address:
Small
Medium
Large
Bacon
Extra Cheese
Onion
Mushroom
Preferred delivery time:
Delivery instructions:
Submit order