logo

Implementarea Web Scraping în Python cu BeautifulSoup

Există în principal două moduri de a extrage date de pe un site web:

  • Utilizați API-ul site-ului web (dacă există). De exemplu, Facebook are API-ul Facebook Graph care permite preluarea datelor postate pe Facebook.
  • Accesați codul HTML al paginii web și extrageți informații/date utile din acesta. Această tehnică se numește web scraping sau web harvesting sau extragerea datelor web.

Acest articol discută pașii implicați în web scraping folosind implementarea unui cadru Web Scraping din Python numit Beautiful Soup. Pași implicați în web scraping:

  1. Trimiteți o solicitare HTTP la adresa URL a paginii web pe care doriți să o accesați. Serverul răspunde solicitării returnând conținutul HTML al paginii web. Pentru această sarcină, vom folosi o bibliotecă HTTP terță parte pentru solicitările Python.
  2. Odată ce am accesat conținutul HTML, ne rămâne cu sarcina de a analiza datele. Deoarece majoritatea datelor HTML sunt imbricate, nu putem extrage date pur și simplu prin procesarea șirurilor. Este nevoie de un parser care poate crea o structură imbricată/arboresc a datelor HTML. Există multe biblioteci HTML parser disponibile, dar cea mai avansată este html5lib.
  3. Acum, tot ce trebuie să facem este să navigăm și să căutăm arborele de analiză pe care l-am creat, adică traversarea arborilor. Pentru această sarcină, vom folosi o altă bibliotecă Python terță parte, Frumoasa Supa . Este o bibliotecă Python pentru extragerea datelor din fișierele HTML și XML.

Pasul 1: Instalarea bibliotecilor terțe necesare



  • Cel mai simplu mod de a instala biblioteci externe în python este să utilizați pip. pip este un sistem de gestionare a pachetelor folosit pentru a instala și gestiona pachete software scrise în Python. Tot ce trebuie să faci este:
pip install requests pip install html5lib pip install bs4>

Pasul 2: Accesarea conținutului HTML de pe pagina web

Piton


lista de utilizatori mysql



import> requests> URL>=> 'https:>/>/>www.techcodeview.com>/>data>->structures>/>'> r>=> requests.get(URL)> print>(r.content)>

>

java cum să suprascrieți

>

Să încercăm să înțelegem această bucată de cod.

  • În primul rând importați biblioteca de solicitări.
  • Apoi, specificați adresa URL a paginii web pe care doriți să o curățați.
  • Trimiteți o solicitare HTTP la adresa URL specificată și salvați răspunsul de la server într-un obiect de răspuns numit r.
  • Acum, ca print r.content pentru a obține conținut HTML brut a paginii web. Este de tip „șir”.

Notă: Uneori este posibil să primiți eroarea Neacceptat, așa că încercați să adăugați un agent de utilizator al browserului ca mai jos. Găsiți agentul dvs. de utilizator pe baza dispozitivului și a browserului de aici https://deviceatlas.com/blog/list-of-user-agent-strings

Python3




headers>=> {>'User-Agent'>:>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'>}> # Here the user agent is for Edge browser on windows 10. You can find your browser user agent from the above given link.> r>=> requests.get(url>=>URL, headers>=>headers)> print>(r.content)>

cartonată vs broșată
>

>

Pasul 3: Analizarea conținutului HTML

Piton




#This will not run on online IDE> import> requests> from> bs4>import> BeautifulSoup> > URL>=> 'http:>/>/>www.values.com>/>inspirational>->quotes'> r>=> requests.get(URL)> > soup>=> BeautifulSoup(r.content,>'html5lib'>)># If this line causes an error, run 'pip install html5lib' or install html5lib> print>(soup.prettify())>

>

>

Un lucru foarte frumos despre biblioteca BeautifulSoup este că este construită pe partea de sus a bibliotecilor de analiză HTML, cum ar fi html5lib, lxml, html.parser, etc. Deci obiectul BeautifulSoup și specificați biblioteca de analiză pot fi create în același timp. În exemplul de mai sus,

soup = BeautifulSoup(r.content, 'html5lib')>

Creăm un obiect BeautifulSoup trecând două argumente:

    r.content : este conținutul HTML brut. html5lib : Specificarea parserului HTML pe care dorim să-l folosim.

Acum supa.frumoasa() este tipărită, oferă reprezentarea vizuală a arborelui de analiză creat din conținutul HTML brut. Pasul 4: Căutarea și navigarea prin arborele de analiză Acum, am dori să extragem câteva date utile din conținutul HTML. Obiectul supă conține toate datele din structura imbricată care ar putea fi extrase programatic. În exemplul nostru, răzuim o pagină web constând din câteva citate. Deci, am dori să creăm un program pentru a salva aceste citate (și toate informațiile relevante despre ele).

gestionarea excepțiilor java

Piton




#Python program to scrape website> #and save quotes from website> import> requests> from> bs4>import> BeautifulSoup> import> csv> > URL>=> 'http:>/>/>www.values.com>/>inspirational>->quotes'> r>=> requests.get(URL)> > soup>=> BeautifulSoup(r.content,>'html5lib'>)> > quotes>=>[]># a list to store quotes> > table>=> soup.find(>'div'>, attrs>=> {>'id'>:>'all_quotes'>})> > for> row>in> table.findAll(>'div'>,> >attrs>=> {>'class'>:>'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'>}):> >quote>=> {}> >quote[>'theme'>]>=> row.h5.text> >quote[>'url'>]>=> row.a[>'href'>]> >quote[>'img'>]>=> row.img[>'src'>]> >quote[>'lines'>]>=> row.img[>'alt'>].split('>#')[0]> >quote[>'author'>]>=> row.img[>'alt'>].split('>#')[1]> >quotes.append(quote)> > filename>=> 'inspirational_quotes.csv'> with>open>(filename,>'w'>, newline>=>'') as f:> >w>=> csv.DictWriter(f,[>'theme'>,>'url'>,>'img'>,>'lines'>,>'author'>])> >w.writeheader()> >for> quote>in> quotes:> >w.writerow(quote)>

>

>

Înainte de a continua, vă recomandăm să parcurgeți conținutul HTML al paginii web pe care am tipărit-o folosind metoda soup.prettify() și să încercați să găsiți un model sau o modalitate de a naviga la ghilimele.

  • Se observă că toate ghilimele sunt în interiorul unui container div al cărui id este „all_quotes”. Deci, găsim acel element div (numit tabel în codul de mai sus) folosind găsi() metoda:
table = soup.find('div', attrs = {'id':'all_quotes'})>
  • Primul argument este eticheta HTML pe care doriți să o căutați, iar al doilea argument este un element de tip dicționar pentru a specifica atributele suplimentare asociate etichetei respective. găsi() metoda returnează primul element de potrivire. Puteți încerca să imprimați table.prettify() pentru a avea o idee despre ceea ce face această bucată de cod.
  • Acum, în elementul tabel, se poate observa că fiecare citat se află în interiorul unui container div a cărui clasă este citat. Deci, iterăm prin fiecare container div a cărui clasă este citat. Aici, folosim metoda findAll() care este similară cu metoda find în ceea ce privește argumentele, dar returnează o listă cu toate elementele care se potrivesc. Fiecare citat este acum repetat folosind o variabilă numită rând. Iată un exemplu de conținut HTML pe rând pentru o mai bună înțelegere: Acum luați în considerare această bucată de cod:
for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(' #')[0] quote['author'] = row.img['alt'].split(' #')[1] quotes.append(quote)>
  • Creăm un dicționar pentru a salva toate informațiile despre o cotație. Structura imbricată poate fi accesată folosind notația cu puncte. Pentru a accesa textul din interiorul unui element HTML, folosim .text :
quote['theme'] = row.h5.text>
  • Putem adăuga, elimina, modifica și accesa atributele unei etichete. Acest lucru se face prin tratarea etichetei ca pe un dicționar:
quote['url'] = row.a['href']>
  • În cele din urmă, toate ghilimele sunt atașate la lista apelată citate.
  • În cele din urmă, am dori să salvăm toate datele noastre într-un fișier CSV.
filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)>
  • Aici creăm un fișier CSV numit inspirational_quotes.csv și salvăm toate citatele din el pentru orice utilizare ulterioară.

Deci, acesta a fost un exemplu simplu despre cum să creați un web scraper în Python. De aici, puteți încerca să eliminați orice alt site web la alegere. În cazul oricăror întrebări, postați-le mai jos în secțiunea de comentarii.

linux $home

Notă : Web Scraping este considerat ilegal în multe cazuri. De asemenea, poate cauza ca IP-ul dvs. să fie blocat permanent de către un site web. Acest blog este contribuit de Nikhil Kumar .