Rasqueu un lloc web amb aquest bell tutorial de Python de sopa

Rasqueu un lloc web amb aquest bell tutorial de Python de sopa

Beautiful Soup és una biblioteca Python de codi obert. Utilitza analitzadors de navegació per rascar el contingut dels fitxers XML i HTML. Necessiteu dades per a diversos propòsits analítics. Tanmateix, si sou nou a Python i al rascat web, la biblioteca Beautiful Soup de Python val la pena provar-lo per a un projecte de rascat web.





Amb la biblioteca Beautiful Soup de codi obert de Python, podeu obtenir dades raspant qualsevol part o element d’una pàgina web amb el màxim control del procés. En aquest article, analitzem com podeu utilitzar Beautiful Soup per rascar un lloc web.





Com instal·lar Beautiful Soup i començar-hi

Abans de continuar, en aquest article del tutorial Beautiful Soup, utilitzarem Python 3 i bella sopa4 , l’última versió de Beautiful Soup. Assegureu-vos que creeu un entorn virtual Python per aïllar el vostre projecte i els seus paquets dels de la vostra màquina local.





llocs de cites en línia gratuïts per a adolescents

Per començar, heu d’instal·lar la biblioteca Beautiful Soup al vostre entorn virtual. Beautiful Soup està disponible com a paquet PyPi per a tots els sistemes operatius, de manera que podeu instal·lar-lo amb el fitxer pip instal·la beautifulsoup4 comandament a través del terminal.

Tanmateix, si utilitzeu Debian o Linux, l'ordre anterior encara funciona, però podeu instal·lar-lo amb el gestor de paquets executant apt-get install python3-bs4 .



Beautiful Soup no ratlla els URL directament. Només funciona amb fitxers HTML o XML ja fets. Això vol dir que no podeu passar cap URL directament. Per solucionar aquest problema, heu d’obtenir l’URL del lloc web de destinació amb la biblioteca de sol·licituds de Python abans d’informar-lo a Beautiful Soup.

Per fer que aquesta biblioteca estigui disponible per al vostre rascador, executeu el fitxer peticions d'instal·lació de pip comandament a través del terminal.





Per utilitzar la biblioteca d'analitzadors XML, executeu pip instal·la lxml per instal·lar-lo.

Inspeccioneu la pàgina web que voleu rascar

Abans de rascar qualsevol lloc web que no conegueu, una bona pràctica és inspeccionar-ne els elements. Podeu fer-ho canviant el navegador al mode del desenvolupador. És bastant fàcil utilitzeu Chrome DevTools si utilitzeu Google Chrome.





Tot i això, cal inspeccionar una pàgina web per obtenir més informació sobre les seves etiquetes, atributs, classes i identificadors HTML. Fent això, s’exposen els elements bàsics d’una pàgina web i els seus tipus de contingut.

També us ajuda a desenvolupar les millors estratègies que podeu utilitzar per obtenir les dades exactes que voleu d’un lloc web i com podeu obtenir-les.

Com rascar les dades d’un lloc web amb una bella sopa

Ara que ho teniu tot preparat, obriu un editor de codi preferit i creeu un fitxer Python nou, donant-li el nom escollit. No obstant això, també podeu fer-ho feu ús d’IDE basats en web com Jupyter Notebook si no esteu familiaritzat amb l'execució de Python mitjançant la línia d'ordres.

A continuació, importeu les biblioteques necessàries:

from bs4 import BeautifulSoup
import requests

En primer lloc, vegem com funciona la biblioteca de sol·licituds:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Quan executeu el codi anterior, retorna un estat de 200, cosa que indica que la vostra sol·licitud és correcta. En cas contrari, obtindreu un estat de 400 o algun altre estat d’error que indiqui una sol·licitud GET fallida.

Recordeu que heu de substituir sempre l'URL del lloc web entre parèntesi per l'URL de destinació.

Un cop obtingueu el lloc web amb el fitxer aconseguir si ho sol·liciteu, el feu passar a Beautiful Soup, que ara pot llegir el contingut com a fitxers HTML o XML mitjançant el seu analitzador XML o HTML integrat, en funció del format escollit.

Mireu aquest següent fragment de codi per veure com fer-ho amb l’analitzador HTML:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

El codi anterior retorna tot el DOM d’una pàgina web amb el seu contingut.

També podeu obtenir una versió més alineada del DOM mitjançant el fitxer embellir mètode. Podeu provar-ho per veure'n la sortida:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

També podeu obtenir el contingut pur d'una pàgina web sense carregar-ne l'element amb .text mètode:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Com rascar el contingut d'una pàgina web pel nom de l'etiqueta

També podeu rascar el contingut d’una etiqueta concreta amb Beautiful Soup. Per fer-ho, heu d’incloure el nom de l’etiqueta de destinació a la sol·licitud de rascador Beautiful Soup.

Per exemple, vegem com podeu obtenir el contingut a h2 etiquetes d'una pàgina web.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

Al fragment de codi superior, sopa.h2 retorna el primer h2 element de la pàgina web i ignora la resta. Per carregar tots els fitxers h2 elements, podeu utilitzar el fitxer trobar_tot funció incorporada i el per bucle de Python:

es pot jugar a jocs torrentats en línia
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Aquest bloc de codi torna tot h2 elements i el seu contingut. Tanmateix, podeu obtenir el contingut sense carregar l'etiqueta mitjançant el fitxer .cord mètode:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Podeu utilitzar aquest mètode per a qualsevol etiqueta HTML. Tot el que heu de fer és substituir el fitxer h2 etiqueta amb la que més t'agradi.

Tanmateix, també podeu rascar més etiquetes passant una llista d'etiquetes al fitxer trobar_tot mètode. Per exemple, el bloc de codi següent raspa el contingut de a , h2 , i títol etiquetes:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Com rascar una pàgina web mitjançant l'identificador i el nom de la classe

Després d’inspeccionar un lloc web amb DevTools, us permet saber més sobre els atributs id i class que contenen cada element al seu DOM. Un cop tingueu aquesta informació, podeu rascar aquesta pàgina web mitjançant aquest mètode. És útil quan el contingut d’un component de destinació s’estén des de la base de dades.

Podeu utilitzar el fitxer trobar mètode per als rascadors d'identificació i classe. A diferència del trobar_tot mètode que retorna un objecte iterable, el fitxer trobar funciona en un únic objectiu no iterable, que és el identificador en aquest cas. Per tant, no cal que utilitzeu el fitxer per bucle amb ell.

Vegem un exemple de com podeu rascar el contingut d'una pàgina a continuació mitjançant l'identificador:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

Per fer-ho per un nom de classe, substituïu el fitxer identificador amb classe . Tot i això, escrivint classe es tradueix directament en confusió de sintaxi, ja que Python ho veu com a paraula clau. Per evitar aquest error, heu d’escriure un subratllat davant de la classe com aquest: classe_ .

En essència, la línia que conté l'identificador es converteix en:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Tot i això, també podeu rascar una pàgina web trucant a un nom d’etiqueta concret amb el seu identificador o classe corresponent:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Com fer un raspador reutilitzable amb una sopa bonica

Podeu crear una classe i posar tot el codi anterior en una funció d’aquesta classe per fer un rascador reutilitzable que obtingui el contingut d’algunes etiquetes i els seus identificadors. Ho podem fer creant una funció que accepti cinc arguments: un URL, dos noms d’etiquetes i els seus identificadors o classes corresponents.

Suposem que voleu rascar el preu de les samarretes d’un lloc web de comerç electrònic. L'exemple de classe de rascador que es mostra a continuació extreu les etiquetes de preu i de camisa amb els seus identificadors o classes corresponents i, a continuació, els retorna com a marc de dades Pandas amb 'Preu' i nom_camisa com a noms de columna.

Assegureu-vos que pip instal·la pandes a través del terminal si encara no ho heu fet.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

El rascador que acabeu de fer és un mòdul reutilitzable i el podeu importar i utilitzar en un altre fitxer Python. Per trucar al raspar funció de la seva classe, que utilitzeu scrapeit.scrape ('URL del lloc web', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Si no proporcioneu l'URL i altres paràmetres, el fitxer en cas contrari La declaració us demana que ho feu.

Per utilitzar aquest objectiu en un altre fitxer Python, el podeu importar així:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Nota: scraper_module és el nom del fitxer Python que conté la classe rascador.

També podeu consultar el fitxer Documentació de Sopa preciosa si voleu aprofundir en com podeu fer-ne el millor ús.

Beautiful Soup és una valuosa eina de rascat web

Beautiful Soup és un potent rascador de pantalla Python que us permet controlar com es transmeten les vostres dades durant el rascat. És una valuosa eina empresarial, ja que us pot donar accés a les dades web de la competència, com ara preus, tendències del mercat i molt més.

com retallar un vídeo a l'iPhone

Tot i que en aquest article hem creat un rascador d’etiquetes, encara podeu jugar amb aquesta potent biblioteca Python per fer eines de rascat més útils.

Compartir Compartir Tweet Correu electrònic Les millors eines de rascat web en línia

Necessiteu recopilar dades de llocs web amb finalitats analítiques? Aquestes eines de rascat web ho faciliten.

Llegiu a continuació
Temes relacionats
  • Programació
  • Python
Sobre l'autor Idisou Omisola(94 articles publicats)

Idowu és un apassionat de qualsevol tecnologia intel·ligent i productivitat. Durant el temps lliure, juga amb la codificació i canvia al tauler d’escacs quan s’avorreix, però també li agrada deixar de banda la rutina de tant en tant. La seva passió per mostrar a la gent el camí cap a la tecnologia moderna el motiva a escriure més.

Més de Idowu Omisola

Subscriu-te al nostre butlletí

Uniu-vos al nostre butlletí per obtenir consells tècnics, ressenyes, llibres electrònics gratuïts i ofertes exclusives.

Feu clic aquí per subscriure-us