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-etMivel 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 = "" "
Rendezetlen lista készítéséhez az ul címkét használják:
- Első lehetőség
- Második lehetőség
Itt egy rendezetlen lista
Rendezett lista készítéséhez az ol taget használják:
- Első számú
- Második
Itt van egy rendezett lista
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éntmi_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
- findGyerekek
- tartalmát
- gyermekek
- leszármazottak
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:
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:
[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:
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",'\ 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é:
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",'\ 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ú", "\ 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.