Znalezienie węzłów dla dzieci z piękną zupą

Znalezienie węzłów dla dzieci z piękną zupą
Zadanie skrobania internetowego to takie, które wymaga zrozumienia, w jaki sposób są ustrukturyzowane strony internetowe. Aby uzyskać potrzebne informacje ze stron internetowych, należy zrozumieć strukturę stron internetowych, przeanalizować znaczniki, które zawierają potrzebne informacje, a następnie atrybuty tych tagów.

Dla początkujących w skrobaniu internetowym z BeautifulSoup artykuł omawiający koncepcje skrobania internetowego z tą potężną biblioteką można znaleźć tutaj.

Ten artykuł jest przeznaczony dla programistów, analityków danych, naukowców lub inżynierów, którzy już mają umiejętności wyodrębnienia treści ze stron internetowych za pomocą BeautifulSoup. Jeśli nie masz żadnej wiedzy na temat tej biblioteki, radzę przejść przez samouczek Beautifulsoup dla początkujących.

Teraz możemy kontynuować - chcę wierzyć, że masz już zainstalowaną tę bibliotekę. Jeśli nie, możesz to zrobić za pomocą poniższego polecenia:

PIP Zainstaluj BeautifulSoup4

Ponieważ pracujemy z wyodrębnieniem danych z HTML, musimy mieć podstawową stronę HTML, aby ćwiczyć te pojęcia. W tym artykule użylibyśmy tego fragmentu HTML do ćwiczeń. Mam zamiar przypisać następujący fragment HTML do zmiennej za pomocą potrójnych cytatów w Pythonie.

próbka_content = "" "

Linuxhint



Aby utworzyć listę nieuporządkowaną, używany jest znacznik UL:


    Oto nieuporządkowana lista
  • Pierwsza opcja

  • Druga opcja




Aby stworzyć uporządkowaną listę, używany jest znacznik OL:


    Oto uporządkowana lista
  1. Numer jeden

  2. Numer dwa



Linux wskazówka, 2018



„” ”

Teraz, kiedy to załatwiliśmy, przejdźmy do pracy z biblioteką pięknych.

Będziemy korzystać z kilku metod i atrybutów, które wzywalibyśmy do naszego obiektu Pięknego. Musielibyśmy jednak przeanalizować nasz ciąg za pomocą pięknej grupy, a następnie przypisać do zmiennej „Our_Soup”.

z BS4 Import Beautifulsoup jako BSO
Our_Soup = bso (próbka_content, „lxml”)

Odtąd będziemy współpracować ze zmienną „Our_Soup” i wywołujemy na niej wszystkie nasze atrybuty lub metody.

Szybko, jeśli jeszcze nie wiesz, czym jest węzeł dziecięcy, jest to w zasadzie węzeł (znacznik), który istnieje w innym węźle. Na przykład w naszym fragmencie HTML znaczniki Li to węzły dla dzieci zarówno „UL”, jak i „OL”.

Oto metody, na które patrzylibyśmy na:

  • Findchild
  • FindHildrens
  • zawartość
  • dzieci
  • potomków

Findchild ():

Findchild Metoda jest stosowana do znalezienia pierwszego dziecięcego węzła elementów HTML. Na przykład, gdy patrzymy na nasze tagi „ol” lub „ul”, znaleźlibyśmy w nim dwoje dzieci. Jednak kiedy używamy Findchild Metoda, zwraca pierwszy węzeł jako węzeł dziecięcy.

Ta metoda może okazać się bardzo przydatna, gdy chcemy uzyskać tylko pierwszy dziecięcy węzeł elementu HTML, ponieważ zwraca wymagany wynik.

Zwracany obiekt jest typu BS4.element.Etykietka. Możemy wyodrębnić z niego tekst, wywołując na nim atrybut tekstowy.

Oto przykład:

First_child = nasz_soup.Znajdź („ciało”).Znajdź („OL”)
Drukuj (First_child.findChild ())

Powyższy kod zwróciłby następujące czynności:

  • Numer jeden
  • Aby uzyskać tekst z tagu, nazywamy tekst atrybut na nim.

    Tak jak:

    Drukuj (First_child.Findchild ().tekst)

    Aby uzyskać następujący wynik:

    'Numer jeden'
    FindChildren ():

    Przyjrzeliśmy się Findchild metoda i zobaczyłem, jak to działa. FindHildrens Metoda działa jednak w podobny sposób, jednak jak sama nazwa wskazuje, nie znajduje tylko jednego węzła dziecięcego, dostaje wszystkie węzły dla dzieci w znaczniku.

    Kiedy musisz dostać wszystkie węzły dla dzieci w tagu, FindHildrens Metoda to droga. Ta metoda zwraca wszystkie węzły dla dzieci na liście, możesz uzyskać dostęp do wybranego znacznika za pomocą jego numeru indeksu.

    Oto przykład:

    First_child = nasz_soup.Znajdź („ciało”).Znajdź („OL”)
    Drukuj (First_child.FindChildren ())

    To zwróciłoby węzły dla dzieci na liście:

    [[[
  • Numer jeden
  • ,
  • Numer dwa
  • ]

    Aby uzyskać drugi węzeł dziecięcy na liście, następujący kod wykonałby zadanie:

    Drukuj (First_child.FindChildren () [1])

    Aby uzyskać następujący wynik:

  • Numer dwa
  • To wszystko zapewnia, że ​​pięknaSoup, jeśli chodzi o metody. Jednak to się nie kończy. Atrybuty można również wywołać nasze obiekty pięknej, aby uzyskać węzeł dziecko/dzieci/potomek z elementu HTML.

    zawartość:

    Podczas FindHildrens Metoda wykonała prostą pracę polegającą na wydobywaniu węzłów dzieci, zawartość atrybuty robią coś nieco innego.

    zawartość Atrybut zwraca listę całej zawartości w elemencie HTML, w tym węzły dla dzieci. Więc kiedy dzwonisz zawartość atrybut na obiekt pięknej, zwróciłby tekst jako struny i węzły w znacznikach jako BS4.element.Etykietka obiekt.

    Oto przykład:

    First_child = nasz_soup.Znajdź („ciało”).Znajdź („OL”)
    Drukuj (First_child.zawartość)

    To zwraca następujące czynności:

    ["\ n Oto uporządkowana lista \ n",
  • Numer jeden
  • ,
    '\N',
  • Numer dwa
  • , '\N']

    Jak widać, lista zawiera tekst, który pojawia się przed węzłem dziecięcym, węzłem dziecięcym i tekstem, który pojawia się za węzłem dziecięcym.

    Aby uzyskać dostęp do drugiego węzła dziecięcego, wszystko, co musimy zrobić, to skorzystać z jego numeru indeksu, jak pokazano poniżej:

    Drukuj (First_child.Spis treści [3])

    Zwróciłoby to następujące czynności:

  • Numer dwa
  • dzieci:

    Oto jeden atrybut, który robi prawie to samo, co atrybut treści. Ma jednak jedną niewielką różnicę, która może mieć ogromny wpływ (dla tych, którzy poważnie traktują optymalizację kodu).

    Atrybut dzieci zwraca również tekst, który pojawia się przed węzłem dziecięcym, samym węzłem dziecięcym i tekstem, który pojawia się za węzłem dziecięcym. Różnica polega na tym, że zwraca je jako generator zamiast listy.

    Rzućmy okiem na następujący przykład:

    First_child = nasz_soup.Znajdź („ciało”).Znajdź („OL”)
    Drukuj (First_child.dzieci)

    Powyższy kod podaje następujące wyniki (adres na komputerze nie musi wyrównać z tym poniżej):

    Jak widać, zwraca tylko adres generatora. Moglibyśmy przekonwertować ten generator na listę.

    Widzimy to w poniższym przykładzie:

    First_child = nasz_soup.Znajdź („ciało”).Znajdź („OL”)
    Drukuj (lista (First_child.dzieci))

    Daje to następujący wynik:

    ["\ n Oto uporządkowana lista \ n",
  • Numer jeden
  • ,
    '\N',
  • Numer dwa
  • , '\N']

    potomków:

    Podczas dzieci Atrybut działa na temat uzyskania tylko zawartości w tagu i.mi. tekst i węzły na pierwszym poziomie, potomków Atrybut idzie głębiej i robi więcej.

    potomków Atrybut otrzymuje cały tekst i węzły, które istnieją w węzłach dzieci. Więc nie zwraca tylko węzłów dla dzieci, zwraca również węzły wnuków.

    Odprawy zwracające tekst i tagi, zwraca także zawartość w znacznikach jako ciągi.

    Tak jak dzieci atrybut, potomków Zwraca swoje wyniki jako generator.

    Możemy to zobaczyć poniżej:

    First_child = nasz_soup.Znajdź („ciało”).Znajdź („OL”)
    Drukuj (First_child.potomków)

    Daje to następujący wynik:

    Jak widać wcześniej, możemy następnie przekonwertować ten obiekt generatora na listę:

    First_child = nasz_soup.Znajdź („ciało”).Znajdź („OL”)
    Drukuj (lista (First_child.potomków))

    Poniżej otrzymalibyśmy listę:

    ["\ n Oto uporządkowana lista \ n",
  • Numer jeden
  • ,
    „Numer jeden”, „\ n”,
  • Numer dwa
  • , „Numer dwa”, „\ n”]

    Wniosek

    Masz to pięć różnych sposobów dostępu do węzłów dzieci w elementach HTML. Może być jednak więcej sposobów, jednak w przypadku metod i atrybutów omówionych w tym artykule należy uzyskać dostęp do węzła dziecięcego dowolnego elementu HTML.