Python Web Scraping: procesamiento de datos

En capítulos anteriores, aprendimos sobre la extracción de datos de páginas web o el web scraping mediante varios módulos de Python. En este capítulo, veamos varias técnicas para procesar los datos que se han extraído.

Introducción

Para procesar los datos que se han extraído, debemos almacenar los datos en nuestra máquina local en un formato particular como hoja de cálculo (CSV), JSON o, a veces, en bases de datos como MySQL.

Procesamiento de datos CSV y JSON

Primero, vamos a escribir la información, después de tomarla de la página web, en un archivo CSV o una hoja de cálculo. Primero entendamos a través de un ejemplo simple en el que primero tomaremos la información usandoBeautifulSoup módulo, como se hizo anteriormente, y luego, utilizando el módulo Python CSV, escribiremos esa información textual en un archivo CSV.

Primero, necesitamos importar las bibliotecas de Python necesarias de la siguiente manera:

import requests
from bs4 import BeautifulSoup
import csv

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.

r = requests.get('https://authoraditiagarwal.com/')

Ahora, necesitamos crear un objeto Soup de la siguiente manera:

soup = BeautifulSoup(r.text, 'lxml')

Ahora, con la ayuda de las siguientes líneas de código, escribiremos los datos capturados en un archivo CSV llamado dataprocessing.csv.

f = csv.writer(open(' dataprocessing.csv ','w'))
f.writerow(['Title'])
f.writerow([soup.title.text])

Después de ejecutar este script, la información textual o el título de la página web se guardarán en el archivo CSV mencionado anteriormente en su máquina local.

Del mismo modo, podemos guardar la información recopilada en un archivo JSON. El siguiente es un script de Python fácil de entender para hacer lo mismo en el que estamos obteniendo la misma información que hicimos en el último script de Python, pero esta vez la información obtenida se guarda en JSONfile.txt mediante el módulo JSON Python.

import requests
from bs4 import BeautifulSoup
import csv
import json
r = requests.get('https://authoraditiagarwal.com/')
soup = BeautifulSoup(r.text, 'lxml')
y = json.dumps(soup.title.text)
with open('JSONFile.txt', 'wt') as outfile:
   json.dump(y, outfile)

Después de ejecutar este script, la información capturada, es decir, el título de la página web, se guardará en el archivo de texto mencionado anteriormente en su máquina local.

Procesamiento de datos con AWS S3

A veces, es posible que deseemos guardar datos extraídos en nuestro almacenamiento local con fines de archivo. Pero, ¿y si necesitamos almacenar y analizar estos datos a gran escala? La respuesta es un servicio de almacenamiento en la nube llamado Amazon S3 o AWS S3 (Simple Storage Service). Básicamente, AWS S3 es un almacenamiento de objetos que está diseñado para almacenar y recuperar cualquier cantidad de datos desde cualquier lugar.

Podemos seguir los siguientes pasos para almacenar datos en AWS S3:

Step 1- Primero necesitamos una cuenta de AWS que nos proporcione las claves secretas para usar en nuestro script de Python mientras almacenamos los datos. Creará un bucket de S3 en el que podremos almacenar nuestros datos.

Step 2 - A continuación, necesitamos instalar boto3Biblioteca de Python para acceder al depósito de S3. Se puede instalar con la ayuda del siguiente comando:

pip install boto3

Step 3 - A continuación, podemos usar el siguiente script de Python para extraer datos de la página web y guardarlos en el bucket de AWS S3.

Primero, necesitamos importar bibliotecas de Python para raspar, aquí estamos trabajando con requestsy boto3 guardar datos en el depósito S3.

import requests
import boto3

Ahora podemos extraer los datos de nuestra URL.

data = requests.get("Enter the URL").text

Ahora, para almacenar datos en el depósito S3, necesitamos crear el cliente S3 de la siguiente manera:

s3 = boto3.client('s3')
bucket_name = "our-content"

La siguiente línea de código creará el depósito S3 de la siguiente manera:

s3.create_bucket(Bucket = bucket_name, ACL = 'public-read')
s3.put_object(Bucket = bucket_name, Key = '', Body = data, ACL = "public-read")

Ahora puede verificar el depósito con el nombre our-content de su cuenta de AWS.

Procesamiento de datos usando MySQL

Aprendamos a procesar datos usando MySQL. Si desea obtener más información sobre MySQL, puede seguir el enlacehttps://www.tutorialspoint.com/mysql/.

Con la ayuda de los siguientes pasos, podemos extraer y procesar datos en la tabla MySQL:

Step 1- Primero, al usar MySQL necesitamos crear una base de datos y una tabla en la que queremos guardar nuestros datos raspados. Por ejemplo, estamos creando la tabla con la siguiente consulta:

CREATE TABLE Scrap_pages (id BIGINT(7) NOT NULL AUTO_INCREMENT,
title VARCHAR(200), content VARCHAR(10000),PRIMARY KEY(id));

Step 2- A continuación, debemos ocuparnos de Unicode. Tenga en cuenta que MySQL no maneja Unicode por defecto. Necesitamos activar esta función con la ayuda de los siguientes comandos que cambiarán el juego de caracteres predeterminado para la base de datos, para la tabla y para ambas columnas:

ALTER DATABASE scrap CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CONVERT TO CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CHANGE title title VARCHAR(200) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE pages CHANGE content content VARCHAR(10000) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

Step 3- Ahora, integre MySQL con Python. Para esto, necesitaremos PyMySQL que se puede instalar con la ayuda del siguiente comando

pip install PyMySQL

Step 4- Ahora, nuestra base de datos llamada Scrap, creada anteriormente, está lista para guardar los datos, después de extraerlos de la web, en una tabla llamada Scrap_pages. Aquí, en nuestro ejemplo, vamos a extraer datos de Wikipedia y se guardarán en nuestra base de datos.

Primero, necesitamos importar los módulos de Python requeridos.

from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import pymysql
import re

Ahora, haga una conexión, es decir, integre esto con Python.

conn = pymysql.connect(host='127.0.0.1',user='root', passwd = None, db = 'mysql',
charset = 'utf8')
cur = conn.cursor()
cur.execute("USE scrap")
random.seed(datetime.datetime.now())
def store(title, content):
   cur.execute('INSERT INTO scrap_pages (title, content) VALUES ''("%s","%s")', (title, content))
   cur.connection.commit()

Ahora, conéctese con Wikipedia y obtenga datos de ella.

def getLinks(articleUrl):
   html = urlopen('http://en.wikipedia.org'+articleUrl)
   bs = BeautifulSoup(html, 'html.parser')
   title = bs.find('h1').get_text()
   content = bs.find('div', {'id':'mw-content-text'}).find('p').get_text()
   store(title, content)
   return bs.find('div', {'id':'bodyContent'}).findAll('a',href=re.compile('^(/wiki/)((?!:).)*$'))
links = getLinks('/wiki/Kevin_Bacon')
try:
   while len(links) > 0:
      newArticle = links[random.randint(0, len(links)-1)].attrs['href']
      print(newArticle)
      links = getLinks(newArticle)

Por último, debemos cerrar el cursor y la conexión.

finally:
   cur.close()
   conn.close()

Esto guardará los datos recopilados de Wikipedia en una tabla llamada scrap_pages. Si está familiarizado con MySQL y web scraping, entonces el código anterior no sería difícil de entender.

Procesamiento de datos usando PostgreSQL

PostgreSQL, desarrollado por un equipo mundial de voluntarios, es un sistema de gestión de bases de datos relacionales (RDMS) de código abierto. El proceso de procesamiento de los datos extraídos con PostgreSQL es similar al de MySQL. Habría dos cambios: Primero, los comandos serían diferentes a MySQL y segundo, aquí usaremospsycopg2 Librería Python para realizar su integración con Python.

Si no está familiarizado con PostgreSQL, puede aprenderlo en https://www.tutorialspoint.com/postgresql/. Y con la ayuda del siguiente comando podemos instalar la biblioteca Python psycopg2 -

pip install psycopg2