Xogando Con Web Scraping
Xogando con web scraping en Python
Para realizar web scraping en Python é preciso empregar as seguintes librerías.
- urllib , para a podes descargar o html dos sitios web.
- beautifulsoup , para realizar consultas e filtrados sobre o html.
Para a instalación pódese empregar pip install.
pip install urllib
pip install beautifulsoup4
Exemplo 1, no cal se verifica o uso de urllib
# Instalación de URLLIB ==> pip install urllib
import urllib.request
datos = urllib.request.urlopen("https://pbelay.github.io/belaygal/").read().decode()
print (datos)
Exemplo 2, con casos de uso moi sinxelos con beautifulsoup4
# Instalación de beautifulsoup ==> pip install beautifulsoup4
import urllib.request
import sys
#Recollida dos datos
datos = urllib.request.urlopen("https://pbelay.github.io/belaygal/").read().decode()
#print (datos)
#Procesado
from bs4 import BeautifulSoup
soup = BeautifulSoup(datos)
# Imprimir título da páxina
print(soup.title)
# Mostrar contido formateado
print(soup.prettify())
# Imprimir primeiro "p" da páxina
p1 = soup.p
print(p1)
# Acceder ao meta ao atributo charset
print(soup.meta['charset'])
# Acceder ao script ao atributo type
print(soup.script['type'])
# Acceder ao link
print(soup.link['rel'])
# Div de nivel 1
print(" >>>> Div nivel 1")
print(soup.div)
# Lista de todos os fillos do nivel 2
print(" >>>> Fillos de de div")
print(soup.div.contents)
# children --> Retorna iterador dos fillos de nivel 1
# descendants --> Retorna todos os fillos de calquera nivel
print(" >>>> Fillos de calquera nivel")
fillos = soup.div.descendants
for child in fillos:
if child.name:
print(f'{child.name}')
# =========================
#FILTROS
# =========================
# Filtro pola etiqueta ligazóns
print(" >>>> Filtro pola etiqueta ligazóns")
links = soup.find_all('a')
for item in links:
print(item)
# Filtro por atributo -->
print(" >>>> Filtro por atributo")
filtro = soup.find_all(id='nav-trigger')
for item in filtro:
print(item)
# Filtro por atributo --> rel="stylesheet"
print(" >>>> Filtro por atributo")
filtro = soup.find_all(rel='stylesheet')
for item in filtro:
print(item)
# Filtro por clase CSS -->
print(" >>>> Filtro por clase CSS sobre as etiequetas a")
filtro = soup.find_all('a', class_="post-link")
for item in filtro:
print(item)
# Filtro por clase CSS -->
print(" >>>> Filtro por clase CSS sobre as etiquetas span ")
filtro = soup.find_all('span', class_="post-meta")
for item in filtro:
print(item.contents)
# Filtro por clase CSS -->
print(" >>>> Filtro por clase CSS sobre as etiquetas span ")
filtro = soup.find_all(class_="post-meta")
for item in filtro:
print(item)
Hai que evolucionar o código para xerar por exemplo CSVs coa información estruturada.
Fontes: