BeautifulSoup

Gyermekcsomópontok keresése gyönyörű levessel

Gyermekcsomópontok keresése gyönyörű levessel
A webes kaparás feladata az, amely megköveteli a weboldalak felépítésének megértését. Ahhoz, hogy a szükséges információkat weboldalakról szerezze be, meg kell értenie a weboldalak felépítését, elemeznie kell a szükséges információkat tartalmazó címkéket, majd a címkék attribútumait.

A BeautifulSoup segítségével történő webes kaparás kezdőknek itt található egy cikk, amely a webes kaparás fogalmát tárgyalja ezzel az erőteljes könyvtárral.

Ez a cikk azoknak a programozóknak, adatelemzőknek, tudósoknak vagy mérnököknek szól, akik már rendelkeznek a készséggel a weboldalak tartalmának kibontására a BeautifulSoup segítségével. Ha nincsenek ismeretei erről a könyvtárról, azt tanácsolom, hogy nézze át a kezdőknek szóló BeautifulSoup oktatóanyagot.

Most folytathatjuk - azt akarom hinni, hogy már telepítette ezt a könyvtárat.  Ha nem, akkor ezt az alábbi paranccsal teheti meg:

pip telepítse a BeautifulSoup4-et

Mivel az adatok HTML-ből történő kinyerésével dolgozunk, rendelkeznünk kell egy alapvető HTML-oldallal, amelyen ezeket a fogalmakat gyakorolhatjuk.  Ebben a cikkben ezt a HTML-kódrészletet használnánk a gyakorlathoz. A következő HTML-kódrészletet hozzárendelem egy változóhoz a Python hármas idézeteinek felhasználásával.

sample_content = "" "

LinuxHint



Rendezetlen lista készítéséhez az ul címkét használják:
 




Rendezett lista készítéséhez az ol taget használják:
 


    Itt van egy rendezett lista
  1. Első számú

  2. Második



Linux Tipp, 2018



"" "

Most, hogy ezt rendeztük, lépjünk jobbra a BeautifulSoup könyvtárral való együttműködésre.

Néhány olyan módszert és attribútumot fogunk használni, amelyeket a BeautifulSoup objektumunkra hívnánk meg. A karakterláncunkat azonban elemeznünk kell a BeautifulSoup segítségével, majd hozzá kell rendelnünk egy „mi_csoportunk” változóhoz.

a bs4-ből importálja a BeautifulSoup-ot bso-ként
mi_csoportunk = bso (minta_tartalom, "lxml")

Ezentúl a „mi_csoportunk” változóval dolgozunk, és minden attribútumunkat vagy módszerünket meghívnánk rajta.

Röviden: ha még nem tudja, mi a gyermek csomópont, akkor ez alapvetően egy másik csomóponton belül található csomópont (címke). Például a HTML-kódrészletben a li tagek az „ul” és az „ol” címkék gyermekcsomópontjai.

Itt vannak a módszerek, amelyeket megnéznénk:

findChild ():

A findChild metódust használják a HTML elemek első gyermekcsomópontjának megkeresésére. Például, ha megnézzük az „ol” vagy „ul” címkéinket, két gyermek címkét találunk benne. Amikor azonban a findChild metódus, csak az első csomópontot adja vissza gyermekcsomópontként.

Ez a módszer nagyon hasznosnak bizonyulhat, ha egy HTML elemnek csak az első gyermekcsomópontját akarjuk megszerezni, mivel az azonnal megadja a kívánt eredményt.

A visszaküldött objektum típusa bs4.elem.Címke. Kihúzhatjuk belőle a szöveget, ha meghívjuk a text attribútumot.

Íme egy példa:

first_child = csoportunk.lelet ("test").megtalálni ("ol")
nyomtatás (first_child.findChild ()

A fenti kód a következőket adja vissza:

  • Első számú
  • A szöveg megszerzéséhez a címkéből hívjuk a szöveg attribútum rajta.

    Mint:

    nyomtatás (first_child.findChild ().szöveg)

    A következő eredmény eléréséhez:

    'Első számú'
    findChildren ():

    Megnéztük a findChild módszert, és látta, hogyan működik. A findGyerekek A módszer hasonló módon működik, azonban amint a neve is mutatja, nem csak egy gyermek csomópontot talál, hanem az összes gyermek csomópontot megkapja egy címkében.

    Amikor az összes gyermek csomópontját be kell illesztenie egy címkébe, akkor a findGyerekek módszer a járható út. Ez a módszer a listában szereplő összes gyermekcsomópontot visszaadja, az Ön által választott címkét annak indexszáma alapján érheti el.

    Íme egy példa:

    first_child = csoportunk.lelet ("test").megtalálni ("ol")
    nyomtatás (first_child.findChildren ()

    Ez visszaadná a gyermekek csomópontjait egy listában:

    [
  • Első számú
  • ,
  • Második
  • ]

    A lista második gyermekcsomópontjának megszerzéséhez a következő kód végzi a munkát:

    nyomtatás (first_child.findGyerekek () [1])

    A következő eredmény eléréséhez:

  • Második
  • Ennyit nyújt a BeautifulSoup a módszerekről. Ezzel azonban még nincs vége. Attribútumok is meghívhatók a BeautifulSoup objektumainkra, hogy a gyermek / gyermekek / leszármazottak csomópontját HTML elemből kapják meg.

    tartalma:

    Amíg a findGyerekek módszer a gyerekcsomópontok kibontásának egyszerű feladatát végezte el, a tartalmát attribútumok csinál egy kicsit más.

    A tartalmát attribútum egy HTML elem összes tartalmának listáját adja vissza, beleértve a gyermek csomópontokat is. Tehát amikor felhívja a tartalmát attribútum egy BeautifulSoup objektumon, a szöveget karakterláncként, a címkékben lévő csomópontokat pedig a-ként adja vissza bs4.elem.Címke tárgy.

    Íme egy példa:

    first_child = csoportunk.lelet ("test").megtalálni ("ol")
    nyomtatás (first_child.tartalma)

    Ez a következőket adja vissza:

    ["\ n Itt van egy rendezett lista \ n",
  • Első számú
  • ,
    '\ n',
  • Második
  • , '\ n']

    Mint látható, a lista tartalmazza a gyermekcsomópont elé kerülő szöveget, a gyermekcsomópontot és a gyermekcsomópont után érkező szöveget.

    A második gyermekcsomópont eléréséhez mindössze annyit kell tennünk, hogy felhasználjuk az indexszámát az alábbiak szerint:

    nyomtatás (first_child.tartalom [3])

    Ez a következőket eredményezné:

  • Második
  • gyermekek:

    Itt van egy attribútum, amely majdnem ugyanazt csinálja, mint a content attribútum. Van azonban egy apró különbsége, amely hatalmas hatást gyakorolhat (azok számára, akik komolyan veszik a kódoptimalizálást).

    A children attribútum visszaadja a gyermek csomópont elé kerülő szöveget, magát a gyermek csomópontot és a gyermek csomópont után érkező szöveget is. A különbség itt az, hogy egy lista helyett generátorként adja vissza őket.

    Vessünk egy pillantást a következő példára:

    first_child = csoportunk.lelet ("test").megtalálni ("ol")
    nyomtatás (first_child.gyermekek)

    A fenti kód a következő eredményeket adja (a számítógépen szereplő címnek nem kell egyeznie az alábbi címmel):

    Mint látható, csak a generátor címét adja vissza. Átalakíthatnánk ezt a generátort listára.

    Ezt láthatjuk az alábbi példában:

    first_child = csoportunk.lelet ("test").megtalálni ("ol")
    print (list (első_gyerek.gyermekek))

    Ez a következő eredményt adja:

    ["\ n Itt van egy rendezett lista \ n",
  • Első számú
  • ,
    '\ n',
  • Második
  • , '\ n']

    leszármazottak:

    Amíg a gyermekek Az attribútum azon dolgozik, hogy csak a tartalom kerüljön egy címkébe, i.e. a szöveget, és az első szint csomópontjai, a leszármazottak attribútum elmélyül és többet tesz.

    A leszármazottak attribútum megkapja a gyermek csomópontokban található összes szöveget és csomópontokat. Tehát nem csak a gyermekek, hanem az unokák csomópontjait is visszaadja.

    A szöveg és a címkék visszaküldése mellett a címkék tartalmát is karakterláncként adja vissza.

    Akárcsak a gyermekek tulajdonság, leszármazottak az eredményeket generátorként adja vissza.

    Ezt láthatjuk az alábbiakban:

    first_child = csoportunk.lelet ("test").megtalálni ("ol")
    nyomtatás (first_child.leszármazottak)

    Ez a következő eredményt adja:

    Mint korábban láttuk, ezt a generátorobjektumot átalakíthatjuk listává:

    first_child = csoportunk.lelet ("test").megtalálni ("ol")
    print (list (első_gyerek.leszármazottak))

    Az alábbi listát kapnánk:

    ["\ n Itt van egy rendezett lista \ n",
  • Első számú
  • ,
    "Első számú", "\ n",
  • Második
  • , 'Második szám', '\ n']

    Következtetés

    Itt van, öt különböző módon érheti el a gyermek csomópontjait a HTML elemekben. Lehetne több módszer is, azonban az ebben a cikkben tárgyalt módszerekkel és attribútumokkal képesnek kell lennie hozzáférni bármely HTML elem gyermekcsomópontjához.

    Hogyan lehet megváltoztatni a bal és jobb egérgombokat a Windows 10 PC-n
    Elég általános, hogy az összes számítógépes egéreszközt ergonómikusan a jobbkezes felhasználók számára tervezték. De vannak olyan egéreszközök, amelye...
    Az egérkattintások emulálása az egérrel a Clickless Mouse használatával a Windows 10 rendszerben
    Ha az egeret vagy a billentyűzetet nem megfelelő testtartásban, túlzott használat mellett használhatja, számos egészségügyi problémát okozhat, beleért...
    Ezekkel az ingyenes eszközökkel adja hozzá az egérmozdulatokat a Windows 10 rendszerhez
    Az elmúlt években a számítógépek és az operációs rendszerek nagymértékben fejlődtek. Volt idő, amikor a felhasználóknak parancsokkal kellett navigálni...