Python BeautifulSoup - jäsennä HTML- ja XML-dokumentteja Pythonissa (2023)

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ämmepip3komento asentaaksesi tarvittavat moduulit.

$ sudo pip3 asennus lxml

Meidän on asennettavalxmlmoduuli, 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 keittoluokasta alkaenbs4moduuli. TheKaunis keittoon työnteon pääluokka.

jossa open('index.html', 'r') as f: contents = f.read()

Avaammeindex.htmltiedosto ja lue sen sisältö komennollalukeamenetelmä.

keitto = BeautifulSoup(sisältö, 'lxml')

AKaunis keittoobjekti 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:h2japää.

print (soup.li)

Niitä on useitalielementtejä; rivi tulostaa ensimmäisen.

$ ./simple.py

Käyttöjärjestelmät

Otsikko
  • Solaris
  • BeautifulSoup tagit, nimi, teksti

    Thenimitagin attribuutti antaa sen nimen jatekstimää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 tekstinh2tag.

    $ ./tags_names.pyHTML: 

    Käyttöjärjestelmät

    , nimi: h2, teksti: Käyttöjärjestelmät

    BeautifulSoup traverse -tunnisteet

    Kanssarekursiivinen ChildGeneratormenetelmä, 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

    Kanssalapsetattribuutti, 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. Koskalapsetattribuutti palauttaa myös välilyönnit tunnisteiden väliin, lisäämme ehdon vain tunnisteiden nimien sisällyttämiseen.

    $ ./get_children.py['head', 'body']

    Thehtmltagilla 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äisetkehontag.

    $ ./get_descendants.py['h2', 'ul', 'li', 'li', 'li', 'li', 'li', 'p', 'p']

    Nämä ovat kaikki suvun jälkeläisiäkehontag.

    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.py Oma html-sivuniOma 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.py      Html-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 ajulkinenhakemistoon ja kopioiindex.htmlsiellä.

    $ 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ääultunniste, jolla onMinun listaniid.Kommentoitu rivi on vaihtoehtoinen tapa tehdä sama tehtävä.

    BeautifulSoup etsi kaikki tunnisteet

    Kanssaetsi_kaikkimenetelmä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 kaikenlitunnisteet.

    $ ./find_all.py li: Solarisli: FreeBSDli: Debianli: NetBSDli: Windows

    Theetsi_kaikkimenetelmä 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ää kaikenh2jaselementtejä ja tulostaa niiden tekstin.

    Theetsi_kaikkimenetelmä 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

    KanssavalitsejaValitse yksimenetelmiä, 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 tulostamiseenlielementti.

    $ ./select_nth_tag.py
  • Debian
  • Tämä on kolmaslielementti.

    #-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 listaniid.

    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ää uudenlitag.

    newtag = soup.new_tag('li')newtag.string='OpenBSD'

    Ensin luomme uuden tunnisteenuusi_tunnistemenetelmä.

    ultag = keitto.ul

    Saamme viittauksenultag.

    ultag.append(uusi tunniste)

    Lisäämme juuri luodun tunnisteenultag.

    tulosta(ultag.prettify())

    Tulostammeultagi 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 paikassaultag.

    BeautifulSoup korvaa tekstin

    Thekorvatakorvaa 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önkorvatamenetelmä.

    BeautifulSoup poista elementti

    Thehajotamenetelmä 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 toisenselementti.

    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.

    References

    Top Articles
    Latest Posts
    Article information

    Author: Dan Stracke

    Last Updated: 10/20/2023

    Views: 6562

    Rating: 4.2 / 5 (43 voted)

    Reviews: 82% of readers found this page helpful

    Author information

    Name: Dan Stracke

    Birthday: 1992-08-25

    Address: 2253 Brown Springs, East Alla, OH 38634-0309

    Phone: +398735162064

    Job: Investor Government Associate

    Hobby: Shopping, LARPing, Scrapbooking, Surfing, Slacklining, Dance, Glassblowing

    Introduction: My name is Dan Stracke, I am a homely, gleaming, glamorous, inquisitive, homely, gorgeous, light person who loves writing and wants to share my knowledge and understanding with you.