Scrape un site web cu acest frumos tutorial de supă Python

Scrape un site web cu acest frumos tutorial de supă Python

Beautiful Soup este o bibliotecă Python open-source. Folosește analizoare de navigare pentru a răzuie conținutul fișierelor XML și HTML. Aveți nevoie de date pentru mai multe scopuri analitice. Cu toate acestea, dacă sunteți nou în Python și web scraping, biblioteca Python's Beautiful Soup merită încercată pentru un proiect de web scraping.





Cu biblioteca open-source Python Beautiful Soup, puteți obține date prin răzuirea oricărei părți sau element a unei pagini web cu control maxim asupra procesului. În acest articol, ne uităm la modul în care puteți folosi Beautiful Soup pentru a răzuie un site web.





Cum să instalați o supă frumoasă și să începeți cu aceasta

Înainte de a continua, în acest articol tutorial Beautiful Soup, vom folosi Python 3 și beautifulsoup4 , ultima versiune a Beautiful Soup. Asigură-te că tu creați un mediu virtual Python pentru a izola proiectul și pachetele sale de cele de pe mașina dvs. locală.





cum se creează un cont facebook anonim

Pentru a începe, trebuie să instalați biblioteca Beautiful Soup în mediul dvs. virtual. Beautiful Soup este disponibil ca pachet PyPi pentru toate sistemele de operare, astfel încât să îl puteți instala cu pip instalează beautifulsoup4 comandă prin terminal.

Cu toate acestea, dacă sunteți pe Debian sau Linux, comanda de mai sus funcționează în continuare, dar o puteți instala cu managerul de pachete executând apt-get install python3-bs4 .



Beautiful Soup nu răzuiește direct adresele URL. Funcționează numai cu fișiere HTML sau XML gata preparate. Asta înseamnă că nu puteți trece o adresă URL direct în ea. Pentru a rezolva această problemă, trebuie să obțineți adresa URL a site-ului țintă cu biblioteca de solicitări a Python înainte de a o alimenta la Beautiful Soup.

Pentru a face acea bibliotecă disponibilă pentru răzuitorul dvs., rulați solicitări de instalare pip comandă prin terminal.





Pentru a utiliza biblioteca parser XML, rulați pip instalează lxml pentru a-l instala.

Inspectați pagina web pe care doriți să o scrapați

Înainte de a scrapa orice site web cu care nu sunteți familiarizați, o bună practică este să inspectați elementele acestuia. Puteți face acest lucru trecând browserul la modul dezvoltator. Este destul de ușor să utilizați Chrome DevTools dacă utilizați Google Chrome.





Cu toate acestea, este necesar să inspectați o pagină web pentru a afla mai multe despre etichetele, atributele, clasele și ID-urile sale HTML. În acest fel, se expun elementele de bază ale unei pagini web și tipurile sale de conținut.

De asemenea, vă ajută să dezvoltați cele mai bune strategii pe care le puteți utiliza pentru a obține datele exacte pe care le doriți de pe un site web și cum le puteți obține.

Cum să răzuiești datele unui site web cu o supă frumoasă

Acum, că aveți totul gata, deschideți un editor de cod preferat și creați un nou fișier Python, dându-i numele ales. Cu toate acestea, puteți și utilizați IDE-uri web, cum ar fi Jupyter Notebook dacă nu sunteți familiarizat cu rularea Python prin linia de comandă.

Apoi, importați bibliotecile necesare:

from bs4 import BeautifulSoup
import requests

În primul rând, să vedem cum funcționează biblioteca de cereri:

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

Când rulați codul de mai sus, acesta returnează o stare de 200, indicând faptul că solicitarea dvs. este reușită. În caz contrar, veți obține o stare 400 sau alte stări de eroare care indică o solicitare GET eșuată.

Nu uitați să înlocuiți întotdeauna adresa URL a site-ului din paranteză cu adresa URL țintă.

Odată ce obțineți site-ul web cu obține solicitați, apoi îl transmiteți la Beautiful Soup, care poate citi acum conținutul ca fișiere HTML sau XML folosind parserul său XML sau HTML încorporat, în funcție de formatul ales.

Aruncați o privire la următorul fragment de cod pentru a vedea cum puteți face acest lucru cu analizorul HTML:

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

Codul de mai sus returnează întregul DOM al unei pagini web cu conținutul său.

De asemenea, puteți obține o versiune mai aliniată a DOM utilizând îndrăgostiți metodă. Puteți încerca acest lucru pentru a vedea rezultatul:

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

De asemenea, puteți obține conținutul pur al unei pagini web fără a încărca elementul acesteia cu .text metodă:

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

Cum să răzuiești conținutul unei pagini web după numele etichetei

De asemenea, puteți răzuie conținutul într-o anumită etichetă cu Beautiful Soup. Pentru a face acest lucru, trebuie să includeți numele etichetei țintă în solicitarea dvs. de răzuitor Beautiful Soup.

De exemplu, să vedem cum puteți obține conținutul în h2 etichetele unei pagini web.

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

În fragmentul de cod de mai sus, supă.h2 returnează primul h2 element al paginii web și ignoră restul. Pentru a încărca toate h2 elemente, puteți utiliza Găsiți toate funcția încorporată și pentru bucla Python:

de unde știi dacă te blochează cineva pe Snapchat
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)

Acest bloc de cod returnează toate h2 elemente și conținutul acestora. Cu toate acestea, puteți obține conținutul fără a încărca eticheta folosind .şir metodă:

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)

Puteți utiliza această metodă pentru orice etichetă HTML. Tot ce trebuie să faceți este să înlocuiți h2 etichetați cu cea care vă place.

Cu toate acestea, puteți răzuie și mai multe etichete trecând o listă de etichete în Găsiți toate metodă. De exemplu, blocul de cod de mai jos zgârie conținutul la , h2 , și titlu Etichete:

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)

Cum să răzuiești o pagină web folosind ID-ul și numele clasei

După inspectarea unui site web cu DevTools, acesta vă permite să aflați mai multe despre atributele id și clasă care dețin fiecare element în DOM-ul său. După ce aveți acea informație, puteți răzuia acea pagină web folosind această metodă. Este util atunci când conținutul unei componente țintă se desprinde din baza de date.

Puteți utiliza găsi metoda pentru racletele de identificare și clasă. spre deosebire de Găsiți toate metoda care returnează un obiect iterabil, găsi metoda funcționează pe o țintă unică, neiterabilă, care este id în acest caz. Deci, nu este nevoie să utilizați pentru bucla cu ea.

Să vedem un exemplu despre cum puteți răzuie conținutul unei pagini de mai jos folosind id-ul:

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)

Pentru a face acest lucru pentru un nume de clasă, înlocuiți id cu clasă . Cu toate acestea, scriind clasă duce direct la confuzie de sintaxă, deoarece Python o vede ca un cuvânt cheie. Pentru a ocoli această eroare, trebuie să scrieți un subliniat în fața clasei astfel: clasă_ .

În esență, linia care conține id-ul devine:

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

Cu toate acestea, puteți răci și o pagină web apelând un anumit nume de etichetă cu codul sau clasa corespunzătoare:

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

Cum se face un răzuitor reutilizabil cu supă frumoasă

Puteți crea o clasă și puteți pune tot codul anterior împreună într-o funcție din clasa respectivă pentru a crea un răzuitor reutilizabil care obține conținutul unor etichete și ID-urile lor. Putem face acest lucru creând o funcție care acceptă cinci argumente: o adresă URL, două nume de etichete și ID-urile sau clasele corespunzătoare.

Să presupunem că doriți să răscoliți prețul cămășilor de pe un site de comerț electronic. Exemplul de clasă de scraper de mai jos extrage etichetele de preț și cămașă cu ID-urile sau clasele corespunzătoare și apoi le returnează ca cadru de date Pandas, cu „Preț” și Numele cămășii ca nume de coloană.

Asigură-te că tu pip instalează panda prin terminal dacă nu ați făcut deja acest lucru.

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!')

Scraperul pe care tocmai l-ați făcut este un modul reutilizabil și îl puteți importa și utiliza în alt fișier Python. Pentru a apela racla funcția din clasa sa, pe care o utilizați scrapeit.scrape („URL-ul site-ului web”, „price_tag”, „price_id”, „shirt_tag”, „shirt_id”) . Dacă nu furnizați adresa URL și alți parametri, fișierul altceva declarația vă solicită să faceți acest lucru.

Pentru a utiliza acel scaper într-un alt fișier Python, îl puteți importa astfel:

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

Notă: scraper_module este numele fișierului Python care deține clasa scraper.

De asemenea, puteți verifica Documentație de supă frumoasă dacă doriți să vă scufundați mai adânc în modul în care puteți folosi cel mai bine.

Supa frumoasă este un instrument valoros de răzuire web

Beautiful Soup este un puternic răzuitor de ecran Python care vă oferă control asupra modului în care datele dvs. trec prin răzuire. Este un instrument de afaceri valoros, deoarece vă poate oferi acces la datele web ale concurenților, cum ar fi prețurile, tendințele pieței și multe altele.

cum se adaugă efecte la imessage

Deși am creat un răzuitor de etichete în acest articol, puteți juca în continuare cu această puternică bibliotecă Python pentru a crea instrumente de răzuire mai utile.

Acțiune Acțiune Tweet E-mail Cele mai bune instrumente de răzuire web online

Trebuie să colectați date de pe site-uri web în scopuri analitice? Aceste instrumente de răzuire web o ușurează.

Citiți în continuare
Subiecte asemănătoare
  • Programare
  • Piton
Despre autor Idisou Omisola(94 articole publicate)

Idowu este pasionat de orice tehnologie inteligentă și productivitate. În timpul liber, se joacă cu codificarea și trece la tabla de șah când se plictisește, dar îi place, de asemenea, să se rupă de rutină din când în când. Pasiunea sa pentru a arăta oamenilor calea în jurul tehnologiei moderne îl motivează să scrie mai multe.

Mai multe de la Idowu Omisola

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Faceți clic aici pentru a vă abona