Python Web Scraping - processamento de dados
Nos capítulos anteriores, aprendemos como extrair os dados de páginas da web ou web scraping por vários módulos Python. Neste capítulo, vamos examinar várias técnicas para processar os dados que foram coletados.
Introdução
Para processar os dados que foram extraídos, devemos armazenar os dados em nossa máquina local em um formato específico como planilha (CSV), JSON ou às vezes em bancos de dados como MySQL.
Processamento de dados CSV e JSON
Primeiro, vamos gravar as informações, depois de retiradas da página da web, em um arquivo CSV ou planilha. Vamos primeiro entender por meio de um exemplo simples em que primeiro pegaremos as informações usandoBeautifulSoup módulo, como fizemos anteriormente, e então usando o módulo Python CSV vamos escrever essas informações textuais no arquivo CSV.
Primeiro, precisamos importar as bibliotecas Python necessárias da seguinte forma -
import requests
from bs4 import BeautifulSoup
import csv
Nesta linha de código a seguir, usamos solicitações para fazer solicitações GET HTTP para o url: https://authoraditiagarwal.com/ fazendo uma solicitação GET.
r = requests.get('https://authoraditiagarwal.com/')
Agora, precisamos criar um objeto Soup da seguinte maneira -
soup = BeautifulSoup(r.text, 'lxml')
Agora, com a ajuda das próximas linhas de código, escreveremos os dados capturados em um arquivo CSV denominado dataprocessing.csv.
f = csv.writer(open(' dataprocessing.csv ','w'))
f.writerow(['Title'])
f.writerow([soup.title.text])
Depois de executar este script, as informações textuais ou o título da página da web serão salvos no arquivo CSV mencionado acima em sua máquina local.
Da mesma forma, podemos salvar as informações coletadas em um arquivo JSON. A seguir está um script Python fácil de entender para fazer o mesmo no qual pegamos as mesmas informações que fizemos no último script Python, mas desta vez as informações capturadas são salvas em JSONfile.txt usando o 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)
Depois de executar este script, as informações obtidas, ou seja, o título da página da Web, serão salvas no arquivo de texto mencionado acima em sua máquina local.
Processamento de dados usando AWS S3
Às vezes, podemos querer salvar dados copiados em nosso armazenamento local para fins de arquivamento. Mas e se precisarmos armazenar e analisar esses dados em grande escala? A resposta é um serviço de armazenamento em nuvem denominado Amazon S3 ou AWS S3 (Simple Storage Service). Basicamente, o AWS S3 é um armazenamento de objeto desenvolvido para armazenar e recuperar qualquer quantidade de dados de qualquer lugar.
Podemos seguir as seguintes etapas para armazenar dados no AWS S3 -
Step 1- Primeiro, precisamos de uma conta AWS que nos fornecerá as chaves secretas para usar em nosso script Python enquanto armazenamos os dados. Isso criará um bucket S3 no qual podemos armazenar nossos dados.
Step 2 - Em seguida, precisamos instalar boto3Biblioteca Python para acessar o bucket S3. Ele pode ser instalado com a ajuda do seguinte comando -
pip install boto3
Step 3 - Em seguida, podemos usar o seguinte script Python para extrair dados da página da web e salvá-los no bucket AWS S3.
Primeiro, precisamos importar bibliotecas Python para fazer scraping, aqui estamos trabalhando com requests, e boto3 salvando dados no balde S3.
import requests
import boto3
Agora podemos extrair os dados de nosso URL.
data = requests.get("Enter the URL").text
Agora, para armazenar dados no intervalo S3, precisamos criar o cliente S3 da seguinte forma -
s3 = boto3.client('s3')
bucket_name = "our-content"
A próxima linha de código criará o intervalo S3 da seguinte maneira -
s3.create_bucket(Bucket = bucket_name, ACL = 'public-read')
s3.put_object(Bucket = bucket_name, Key = '', Body = data, ACL = "public-read")
Agora você pode verificar o intervalo com o nome nosso-conteúdo de sua conta AWS.
Processamento de dados usando MySQL
Vamos aprender como processar dados usando MySQL. Se você deseja aprender sobre MySQL, siga o linkhttps://www.tutorialspoint.com/mysql/.
Com a ajuda das etapas a seguir, podemos extrair e processar dados na tabela MySQL -
Step 1- Primeiro, usando o MySQL, precisamos criar um banco de dados e uma tabela na qual queremos salvar nossos dados extraídos. Por exemplo, estamos criando a tabela com a seguinte consulta -
CREATE TABLE Scrap_pages (id BIGINT(7) NOT NULL AUTO_INCREMENT,
title VARCHAR(200), content VARCHAR(10000),PRIMARY KEY(id));
Step 2- Em seguida, precisamos lidar com o Unicode. Observe que o MySQL não lida com Unicode por padrão. Precisamos ativar esse recurso com a ajuda dos seguintes comandos que irão alterar o conjunto de caracteres padrão para o banco de dados, para a tabela e para ambas as colunas -
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- Agora, integre o MySQL com Python. Para isso, precisaremos do PyMySQL que pode ser instalado com a ajuda do seguinte comando
pip install PyMySQL
Step 4- Agora, nosso banco de dados chamado Scrap, criado anteriormente, está pronto para salvar os dados, depois de extraídos da web, na tabela chamada Scrap_pages. Aqui, em nosso exemplo, vamos extrair dados da Wikipedia e salvá-los em nosso banco de dados.
Primeiro, precisamos importar os módulos Python necessários.
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import pymysql
import re
Agora, faça uma conexão, que é integrar isso com 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()
Agora, conecte-se à Wikipedia e obtenha dados dela.
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, precisamos fechar o cursor e a conexão.
finally:
cur.close()
conn.close()
Isso salvará os dados coletados da Wikipedia em uma tabela chamada scrap_pages. Se você estiver familiarizado com MySQL e web scraping, o código acima não será difícil de entender.
Processamento de dados usando PostgreSQL
PostgreSQL, desenvolvido por uma equipe mundial de voluntários, é um sistema de gerenciamento de banco de dados relacional de código aberto (RDMS). O processo de processamento dos dados capturados usando PostgreSQL é semelhante ao do MySQL. Haveria duas mudanças: primeiro, os comandos seriam diferentes do MySQL e, segundo, usaremos aquipsycopg2 Biblioteca Python para realizar sua integração com Python.
Se você não está familiarizado com PostgreSQL, você pode aprendê-lo em https://www.tutorialspoint.com/postgresql/. E com a ajuda do comando a seguir, podemos instalar a biblioteca Python psycopg2 -
pip install psycopg2