viimeksi muokattu 8.7.2023
Python BeautifulSoup -opetusohjelma on BeautifulSoup Python -kirjaston johdanto-opas. Esimerkit etsivät tunnisteita, kulkevat dokumenttipuun läpi, muokkaavat dokumenttia ja raapivat verkkosivuja.
Kaunis keitto
BeautifulSoup on Python-kirjasto HTML- ja XML-dokumenttien jäsentämiseen. Sitä käytetään usein verkon kaapimiseen. BeautifulSoup muuttaa monimutkaisen HTML-dokumentin Python-objektien monimutkaiseksi puuksi, kuten tagiksi, navigoitavaksi merkkijonoksi tai kommentiksi.
BeautifulSoupin asentaminen
Käytämmepip3
komento asentaaksesi tarvittavat moduulit.
$ sudo pip3 asennus lxml
Meidän on asennettavalxml
moduuli, jota BeautifulSoup käyttää.
$ sudo pip3 asenna bs4
BeautifulSoup asennetaan yllä olevalla komennolla.
HTML-tiedosto
Esimerkeissä käytämme seuraavaa HTML-tiedostoa:
index.html
Otsikko Käyttöjärjestelmät
- Solaris
- FreeBSD
- Debian
- NetBSD
- Windows
FreeBSD on edistynyt tietokoneiden käyttöjärjestelmä, jota käytetään nykyaikaisten palvelimien, pöytätietokoneiden ja sulautettujen alustojen virranlähteenä.
Debian on Unix-tyyppinen tietokoneen käyttöjärjestelmä, joka koostuu kokonaan ilmaisista ohjelmistoista.
Python BeautifulSoup yksinkertainen esimerkki
Ensimmäisessä esimerkissä käytämme BeautifulSoup-moduulia saadaksemme kolme tunnistetta.
simple.py
* (soup.head) print(soup.li)
Koodiesimerkki tulostaa kolmen tagin HTML-koodin.
bs4:stä Import BeautifulSoup
Tuomme maahanKaunis keitto
luokasta alkaenbs4
moduuli. TheKaunis keitto
on työnteon pääluokka.
jossa open('index.html', 'r') as f: contents = f.read()
Avaammeindex.html
tiedosto ja lue sen sisältö komennollalukea
menetelmä.
keitto = BeautifulSoup(sisältö, 'lxml')
AKaunis keitto
objekti on luotu; HTML-tiedot välitetään rakentajalle. Toinen vaihtoehto määrittää jäsentimen.
tulostaa(keitto.h2)tulostus(keitto.pää)
Tässä tulostetaan kahden tagin HTML-koodi:h2
japää
.
print (soup.li)
Niitä on useitali
elementtejä; rivi tulostaa ensimmäisen.
$ ./simple.pyKäyttöjärjestelmät
Otsikko
BeautifulSoup tagit, nimi, teksti
Thenimi
tagin attribuutti antaa sen nimen jateksti
määrittää sen tekstisisällön.
tags_names.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') print(f'HTML: { keitto.h2}, nimi: {keitto.h2.nimi}, teksti: {keitto.h2.teksti}')
Koodiesimerkki tulostaa HTML-koodin, nimen ja tekstinh2
tag.
$ ./tags_names.pyHTML:Käyttöjärjestelmät
, nimi: h2, teksti: Käyttöjärjestelmät
BeautifulSoup traverse -tunnisteet
Kanssarekursiivinen ChildGenerator
menetelmä, jolla kuljemme HTML-dokumentin läpi.
traverse_tree.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') lapselle kohdassa soup.recursiveChildGenerator( ): jos lapsen.nimi: tulosta(lapsen.nimi)
Esimerkki käy dokumenttipuun läpi ja tulostaa kaikkien HTML-tunnisteiden nimet.
$ ./traverse_tree.pyhtmlheadtitlemetabodyh2ullililililipp
HTML-dokumentissa meillä on nämä tunnisteet.
BeautifulSoup element lapset
Kanssalapset
attribuutti, voimme saada tagin lapset.
get_children.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') root = soup.html root_childs = [e.nimi e:lle root.childrenissä, jos e.nimi ei ole Ei mitään] print(root_childs)
Esimerkki hakee lapsethtml
-tunnisteen, sijoittaa ne Python-luetteloon ja tulostaa ne konsoliin. Koskalapset
attribuutti palauttaa myös välilyönnit tunnisteiden väliin, lisäämme ehdon vain tunnisteiden nimien sisällyttämiseen.
$ ./get_children.py['head', 'body']
Thehtml
tagilla on kaksi lasta:pää
jakehon
.
BeautifulSoup elementin jälkeläisiä
Kanssajälkeläisiä
attribuutti saa kaikki tunnisteen jälkeläiset (kaikkien tasojen lapset).
get_descendants.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') root = soup.body root_childs = [e.nimi e:lle root.descendantsissa, jos e.nimi ei ole Ei mitään] print(root_childs)
Esimerkki hakee kaikki:n jälkeläisetkehon
tag.
$ ./get_descendants.py['h2', 'ul', 'li', 'li', 'li', 'li', 'li', 'p', 'p']
Nämä ovat kaikki suvun jälkeläisiäkehon
tag.
BeautifulSoup-verkon kaavinta
Requests on yksinkertainen Python HTTP -kirjasto. Se tarjoaa menetelmiä käyttää Web-resursseja HTTP:n kautta.
scraping.py
#!/usr/bin/pythonfrom bs4 tuo BeautifulSoupimport-pyynnöt muodossa reqresp = req.get('http://webcode.me')soup = BeautifulSoup(resp.text, 'lxml')print(soup.title)print(soup .title.text)print(keitto.title.parent)
Esimerkki hakee yksinkertaisen verkkosivun otsikon. Se myös tulostaa emonsa.
resp = req.get('http://webcode.me')soup = BeautifulSoup(resp.text, 'lxml')
Saamme sivun HTML-tiedot.
tulostaa(keitto.otsikko)tuloste(keitto.otsikko.teksti)printti(keitto.nimike.parent)
Haemme otsikon HTML-koodin, sen tekstin ja sen ylätason HTML-koodin.
$ ./scraping.pyOma html-sivuni Oma html-sivuniHtml-sivuni
BeautifulSoup kauniisti koodi
Kanssakaunistella
-menetelmällä voimme saada HTML-koodin näyttämään paremmalta.
Prettify.py
#!/usr/bin/pythonfrom bs4 tuo BeautifulSoupimport-pyynnöt muodossa reqresp = req.get('http://webcode.me')soup = BeautifulSoup(resp.text, 'lxml')print(soup.prettify())
Teemme kauniisti yksinkertaisen verkkosivun HTML-koodin.
$ ./prettify.pyHtml-sivuni Tänään on kaunis päivä. Käymme uimassa ja kalassa.
Hei. Mitä kuuluu?
BeautifulSoup kaavinta sisäänrakennetulla verkkopalvelimella
Voimme myös palvella HTML-sivuja yksinkertaisella sisäänrakennetulla HTTP-palvelimella.
$ mkdir public$ cp index.html julkinen/
Luomme ajulkinen
hakemistoon ja kopioiindex.html
siellä.
$ python -m http.palvelin --hakemisto julkinenPalvelu HTTP:tä 0.0.0.0-portissa 8000 (http://0.0.0.0:8000/) ...
Sitten käynnistämme Python HTTP -palvelimen.
scraping2.py
#!/usr/bin/pythonfrom bs4 tuo BeautifulSoupimport-pyynnöt muodossa reqresp = req.get('http://localhost:8000/')soup = BeautifulSoup(resp.text, 'lxml')print(soup.title)print( keitto.body)
Nyt saamme asiakirjan paikallisesti käynnissä olevalta palvelimelta.
BeautifulSoup löytää elementtejä tunnuksella
Kanssalöytö
-menetelmällä voimme löytää elementtejä eri tavoilla, mukaan lukien elementin id.
find_by_id.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') #print(soup.find( 'ul', attrs={ 'id' : 'mylist'})) print(soup.find('ul', id='mylist'))
Koodiesimerkki löytääul
tunniste, jolla onMinun listani
id.Kommentoitu rivi on vaihtoehtoinen tapa tehdä sama tehtävä.
BeautifulSoup etsi kaikki tunnisteet
Kanssaetsi_kaikki
menetelmällä löydämme kaikki elementit, jotka täyttävät kriteerit.
find_all.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') tagille soup.find_all( 'li'): print(f'{tag.name}: {tag.text}')
Koodiesimerkki löytää ja tulostaa kaikenli
tunnisteet.
$ ./find_all.py li: Solarisli: FreeBSDli: Debianli: NetBSDli: Windows
Theetsi_kaikki
menetelmä voi ottaa luettelon haettavista elementeistä.
find_all2.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') tags = soup.find_all([ 'h2', 'p']) tagille tageissa: print(' '.join(tag.text.split()))
Esimerkki löytää kaikenh2
jas
elementtejä ja tulostaa niiden tekstin.
Theetsi_kaikki
menetelmä voi myös ottaa funktion, joka määrittää, mitkä elementit palautetaan.
find_by_fun.py
#!/usr/bin/pythonfrom bs4 Import BeautifulSoupdef myfun(tag): return tag.is_empty_elementwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml) ') tags = soup.find_all(myfun) print(tags)
Esimerkki tulostaa tyhjiä elementtejä.
$ ./find_by_fun.py[]
Ainoa tyhjä elementti asiakirjassa onmeta
.
On myös mahdollista löytää elementtejä käyttämällä säännöllisiä lausekkeita.
regex.py
#!/usr/bin/pythonimport lähteestä bs4 tuonti BeautifulSoupwith open('index.html', 'r') as f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') strings = soup.find_all( string=re.compile('BSD')) txt:lle merkkijonoissa: print(' '.join(txt.split()))
Esimerkki tulostaa 'BSD'-merkkijonon sisältävien elementtien sisällön.
$ ./regex.pyFreeBSDNetBSDFreeBSD on edistynyt tietokoneiden käyttöjärjestelmä, jota käytetään nykyaikaisten palvelimien, työasemien ja sulautettujen alustojen tehonlähteenä.
BeautifulSoup CSS-valitsimet
Kanssavalitse
jaValitse yksi
menetelmiä, voimme käyttää joitakin CSS-valitsimia elementtien etsimiseen.
select_nth_tag.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') print(soup.select(') li:nth-of-type(3)'))
Tämä esimerkki käyttää CSS-valitsinta kolmannen HTML-koodin tulostamiseenli
elementti.
$ ./select_nth_tag.py
Tämä on kolmasli
elementti.
#-merkkiä käytetään CSS:ssä tunnisteiden valitsemiseen niiden id-attribuuttien perusteella.
select_by_id.py
#!/usr/bin/python bs4:stä tuo BeautifulSoupwith open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') print(soup.select_one(') #Minun listani'))
Esimerkki tulostaa elementin, jolla onMinun listani
id.
BeautifulSoup-lisäelementti
Theliittää
menetelmä lisää uuden tunnisteen HTML-dokumenttiin.
append_tag.py
* li') newtag.string='OpenBSD' ultag = soup.ul ultag.append(newtag) print(ultag.prettify())
Esimerkki lisää uudenli
tag.
newtag = soup.new_tag('li')newtag.string='OpenBSD'
Ensin luomme uuden tunnisteenuusi_tunniste
menetelmä.
ultag = keitto.ul
Saamme viittauksenul
tag.
ultag.append(uusi tunniste)
Lisäämme juuri luodun tunnisteenul
tag.
tulosta(ultag.prettify())
Tulostammeul
tagi siistissä muodossa.
BeautifulSoup-elementti
Thelisää
menetelmä lisää tunnisteen määritettyyn paikkaan.
insert_tag.py
* li') newtag.string='OpenBSD' ultag = soup.ul ultag.insert(2, newtag) print(ultag.prettify())
Esimerkki lisää ali
-tunnisteen kolmannessa paikassaul
tag.
BeautifulSoup korvaa tekstin
Thekorvata
korvaa elementin tekstin.
korvaa_teksti.py
* ='Windows') tag.replace_with('OpenBSD') print(soup.ul.prettify())
Esimerkki löytää tietyn elementinlöytö
menetelmä ja korvaa sen sisällönkorvata
menetelmä.
BeautifulSoup poista elementti
Thehajota
menetelmä poistaa tunnisteen puusta ja tuhoaa sen.
decompose_tag.py
#!/usr/bin/python bs4:stä tuo BeautifulSoup with open('index.html', 'r') muodossa f: contents = f.read() soup = BeautifulSoup(contents, 'lxml') ptag2 = soup.select_one(' p:nth-of-type(2)') ptag2.decompose() print(soup.body.prettify())
Esimerkki poistaa toisens
elementti.
Tässä opetusohjelmassa olemme työskennelleet Python BeautifulSoup -kirjaston kanssa.
Tekijä
Nimeni on Jan Bodnar ja olen intohimoinen ohjelmoija, jolla on monen vuoden ohjelmointikokemus. Olen kirjoittanut ohjelmointiartikkeleita vuodesta 2007. Tähän mennessä olen kirjoittanut yli 1400 artikkelia ja 8 e-kirjaa. Minulla on yli kahdeksan vuoden kokemus ohjelmoinnin opettamisesta.
Listakaikki Python-opetusohjelmat.