Hi ha principalment dues maneres d'extreure dades d'un lloc web:
- Utilitzeu l'API del lloc web (si existeix). Per exemple, Facebook té l'API de Facebook Graph que permet recuperar les dades publicades a Facebook.
- Accediu a l'HTML de la pàgina web i extreu-ne informació/dades útils. Aquesta tècnica s'anomena web scraping o web harvesting o extracció de dades web.
Aquest article analitza els passos implicats en el raspat web mitjançant la implementació d'un marc de raspat web de Python anomenat Beautiful Soup. Passos implicats en el raspat web:
- Envieu una sol·licitud HTTP a l'URL de la pàgina web a la qual voleu accedir. El servidor respon a la sol·licitud retornant el contingut HTML de la pàgina web. Per a aquesta tasca, utilitzarem una biblioteca HTTP de tercers per a les sol·licituds de Python.
- Un cop hem accedit al contingut HTML, ens queda la tasca d'analitzar les dades. Com que la majoria de les dades HTML estan imbricades, no podem extreure dades simplement mitjançant el processament de cadenes. Es necessita un analitzador que pugui crear una estructura imbricada/d'arbre de les dades HTML. Hi ha moltes biblioteques d'analitzadors HTML disponibles, però la més avançada és html5lib.
- Ara, tot el que hem de fer és navegar i cercar l'arbre d'anàlisi que hem creat, és a dir, el recorregut de l'arbre. Per a aquesta tasca, utilitzarem una altra biblioteca de Python de tercers, Sopa preciosa . És una biblioteca de Python per extreure dades dels fitxers HTML i XML.
Pas 1: instal·lar les biblioteques de tercers necessàries
- La manera més senzilla d'instal·lar biblioteques externes a Python és utilitzar pip. pip és un sistema de gestió de paquets utilitzat per instal·lar i gestionar paquets de programari escrits en Python. Tot el que has de fer és:
pip install requests pip install html5lib pip install bs4>
- Una altra manera és descarregar-los manualment des d'aquests enllaços:
Pas 2: Accés al contingut HTML des de la pàgina web
Python
import> requests> URL> => 'https:> /> /> www.techcodeview.com> /> data> -> structures> /> '> r> => requests.get(URL)> print> (r.content)> |
>
cadena de substitució de java
>
Intentem entendre aquest fragment de codi.
- En primer lloc, importeu la biblioteca de peticions.
- A continuació, especifiqueu l'URL de la pàgina web que voleu raspar.
- Envieu una sol·licitud HTTP a l'URL especificat i deseu la resposta del servidor en un objecte de resposta anomenat r.
- Ara, com a print r.content per obtenir el contingut HTML en brut de la pàgina web. És de tipus 'cadena'.
Nota: De vegades és possible que obtingueu un error No s'accepta, així que proveu d'afegir un agent d'usuari del navegador com el següent. Trobeu el vostre agent d'usuari segons el dispositiu i el navegador des d'aquí https://deviceatlas.com/blog/list-of-user-agent-strings
Python 3
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)> |
>
>
Pas 3: analitzar el contingut HTML
Exemples de codi c#
Python
iterant un mapa en java
#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())> |
>
>
Una cosa molt bona de la biblioteca BeautifulSoup és que està construïda a la part superior de les biblioteques d'anàlisi HTML com html5lib, lxml, html.parser, etc. Així que l'objecte BeautifulSoup i especificar la biblioteca analitzadora es poden crear alhora. En l'exemple anterior,
soup = BeautifulSoup(r.content, 'html5lib')>
Creem un objecte BeautifulSoup passant dos arguments:
- r.content : és el contingut HTML en brut. html5lib : especificant l'analitzador HTML que volem utilitzar.
Ara soup.prettify() està imprès, proporciona la representació visual de l'arbre d'anàlisi creat a partir del contingut HTML en brut. Pas 4: cercar i navegar per l'arbre d'anàlisi Ara, ens agradaria extreure algunes dades útils del contingut HTML. L'objecte sopa conté totes les dades de l'estructura imbricada que es podrien extreure mitjançant programació. En el nostre exemple, estem raspant una pàgina web que consta d'algunes cometes. Per tant, ens agradaria crear un programa per desar aquestes cotitzacions (i tota la informació rellevant sobre elles).
Python
#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)> |
>
>
Abans de continuar, us recomanem que reviseu el contingut HTML de la pàgina web que vam imprimir amb el mètode soup.prettify() i intenteu trobar un patró o una manera de navegar a les cometes.
- Es nota que totes les cometes es troben dins d'un contenidor div l'identificador del qual és 'all_quotes'. Per tant, trobem aquest element div (anomenat taula al codi anterior) utilitzant trobar () mètode:
table = soup.find('div', attrs = {'id':'all_quotes'})>
- El primer argument és l'etiqueta HTML que voleu cercar i el segon argument és un element de tipus diccionari per especificar els atributs addicionals associats a aquesta etiqueta. trobar () El mètode retorna el primer element coincident. Podeu provar d'imprimir table.prettify() per tenir una idea del que fa aquest fragment de codi.
- Ara, a l'element taula, es pot notar que cada cita es troba dins d'un contenidor div la classe del qual és quote. Per tant, iterem a través de cada contenidor div la classe del qual és quote. Aquí, utilitzem el mètode findAll() que és similar al mètode find en termes d'arguments, però retorna una llista de tots els elements coincidents. Ara cada cita s'itera utilitzant una variable anomenada fila. Aquí teniu una mostra de contingut HTML de fila per a una millor comprensió:
Ara considereu aquest fragment de codi:
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)>
- Creem un diccionari per guardar tota la informació sobre un pressupost. Es pot accedir a l'estructura imbricada mitjançant la notació de punts. Per accedir al text dins d'un element HTML, fem servir .text :
quote['theme'] = row.h5.text>
- Podem afegir, eliminar, modificar i accedir als atributs d'una etiqueta. Això es fa tractant l'etiqueta com un diccionari:
quote['url'] = row.a['href']>
- Finalment, totes les cometes s'afegeixen a la llista cridada cites.
- Finalment, ens agradaria desar totes les nostres dades en algun fitxer 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)>
- Aquí creem un fitxer CSV anomenat inspirational_quotes.csv i desem totes les cometes per a qualsevol altre ús.
Per tant, aquest va ser un exemple senzill de com crear un rascador web a Python. Des d'aquí, podeu provar d'eliminar qualsevol altre lloc web que trieu. En cas de qualsevol consulta, publiqueu-les a continuació a la secció de comentaris.
kat timpf alçada
Nota : El raspat web es considera il·legal en molts casos. També pot provocar que un lloc web bloquegi permanentment la vostra IP. Aquest blog està col·laborat per Nikhil Kumar .