Szukaj…


Uwagi

W tej sekcji omawiamy, czym jest Piękna Zupa, w jakim celu się ją stosuje oraz krótki zarys tego, jak z niej korzystać.

Beautiful Soup to biblioteka Pythona, która wykorzystuje wstępnie zainstalowany parser html / xml i konwertuje stronę internetową / html / xml w drzewo składające się z tagów, elementów, atrybutów i wartości. Mówiąc ściślej, drzewo składa się z czterech typów obiektów: Tag, NavigableString, BeautifulSoup i Comment. To drzewo można następnie „zapytać” przy użyciu metod / właściwości obiektu BeautifulSoup, który jest tworzony z biblioteki analizatora składni.

Twoja potrzeba: Często możesz mieć jedną z następujących potrzeb:

  1. Możesz przeanalizować stronę internetową, aby ustalić, ile znalezionych tagów, ile elementów każdego tagu znaleziono i ich wartości. Możesz je zmienić.

  2. Możesz określić nazwy i wartości elementów, aby móc ich używać w połączeniu z innymi bibliotekami do automatyzacji stron internetowych, takimi jak Selenium .

  3. Możesz przenieść / wyodrębnić dane pokazane na stronie internetowej do innych formatów, takich jak plik CSV lub do relacyjnej bazy danych, takiej jak SQLite lub mysql. W takim przypadku biblioteka pomaga w pierwszym kroku zrozumienia struktury strony internetowej, chociaż będziesz używał innych bibliotek do wykonania transferu.

  4. Możesz dowiedzieć się, ile elementów jest stylizowanych w określonym stylu CSS i które z nich.

Sekwencja typowego podstawowego zastosowania w kodzie Python:

  1. Zaimportuj bibliotekę Beautiful Soup

  2. Otwórz stronę internetową lub tekst HTML za pomocą biblioteki BeautifulSoup, wskazując, którego parsera należy użyć. Wynikiem tego kroku jest obiekt BeautifulSoup. (Uwaga: Wspomniana nazwa parsera musi być już zainstalowana jako część pacakges Pythona. Na przykład html.parser to wbudowany pakiet „z bateriami” dostarczany z Pythonem. Można zainstalować inne parsery, takie jak lxml lub html5lib .)

  3. „Zapytanie” lub wyszukaj obiekt BeautifulSoup za pomocą składni 'object.method' i uzyskaj wynik w kolekcji, takiej jak słownik Pythona. W przypadku niektórych metod wynik będzie prostą wartością.

  4. Użyj wyniku z poprzedniego kroku, aby zrobić z nim wszystko, co chcesz zrobić, w pozostałej części kodu w języku Python. Możesz także modyfikować wartości elementów lub wartości atrybutów w obiekcie drzewa. Modyfikacje nie wpływają na źródło kodu HTML, ale można wywoływać metody formatowania wyjściowego (takie jak prettify ), aby utworzyć nowe dane wyjściowe z obiektu BeautifulSoup.

Powszechnie stosowane metody: Zazwyczaj metody .find i .find_all są używane do przeszukiwania drzewa, podając argumenty wejściowe.

Argumenty wejściowe to: szukana nazwa znacznika, nazwy atrybutów i inne powiązane argumenty. Argumenty te można przedstawić jako: ciąg, wyrażenie regularne, listę lub nawet funkcję.

Typowe zastosowania obiektu BeautifulSoup obejmują:

  1. Szukaj według klasy CSS
  2. Szukaj według adresu hiperłącza
  3. Szukaj według identyfikatora elementu, tagu
  4. Szukaj według nazwy atrybutu. Wartość atrybutu.

Jeśli musisz przefiltrować drzewo za pomocą kombinacji powyższych kryteriów, możesz również napisać funkcję, która ma wartość true lub false, i wyszukać tę funkcję.

Wersje

Wersja Uwagi Nazwa paczki Data wydania
3.x Wersja 3.2.1; Tylko Python 2 piękna zupa 16.02.2012
4.x Wersja 4.5.0; Python 2 i 3 beautifulsoup4 2016-07-20

Instalacja lub konfiguracja

pip może być użyty do instalacji BeautifulSoup. Aby zainstalować wersję 4 BeautifulSoup, uruchom polecenie:

pip install beautifulsoup4

Pamiętaj, że nazwa pakietu to beautifulsoup4 zamiast beautifulsoup , ta ostatnia nazwa oznacza starą wersję, zobacz starą beautifulsoup

Przykład skrobania BeautifulSoup „Hello World”

from bs4 import BeautifulSoup
import requests

main_url = "https://fr.wikipedia.org/wiki/Hello_world"
req = requests.get(main_url)
soup = BeautifulSoup(req.text, "html.parser")

# Finding the main title tag.
title = soup.find("h1", class_ = "firstHeading")
print title.get_text()

# Finding the mid-titles tags and storing them in a list.
mid_titles = [tag.get_text() for tag in soup.find_all("span", class_ = "mw-headline")]

# Now using css selectors to retrieve the article shortcut links
links_tags = soup.select("li.toclevel-1")
for tag in links_tags:
    print tag.a.get("href")

# Retrieving the side page links by "blocks" and storing them in a dictionary
side_page_blocks = soup.find("div",
                            id = "mw-panel").find_all("div",
                                                      class_ = "portal")
blocks_links = {}
for num, block in enumerate(side_page_blocks):
    blocks_links[num] = [link.get("href") for link in block.find_all("a", href = True)]

print blocks_links[0]

Wynik:

"Hello, World!" program
#Purpose
#History
#Variations
#See_also
#References
#External_links
[u'/wiki/Main_Page', u'/wiki/Portal:Contents', u'/wiki/Portal:Featured_content', u'/wiki/Portal:Current_events', u'/wiki/Special:Random', u'https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en', u'//shop.wikimedia.org']

Wprowadzenie preferowanego analizatora składni podczas tworzenia Pięknej Zupy pozwala uniknąć zwykłego Warning , w którym no parser was explicitely specified .

Do znalezienia elementu w drzewie strony można użyć różnych metod.

Chociaż istnieje kilka innych metod, CSS classes i CSS selectors są dwoma przydatnymi sposobami znajdowania elementów w drzewie.

Należy zauważyć, że możemy wyszukiwać tagi, ustawiając ich wartość atrybutu na True podczas wyszukiwania.

get_text() pozwala nam pobrać tekst zawarty w znaczniku. Zwraca go jako pojedynczy ciąg Unicode. tag.get("attribute") pozwala uzyskać wartość atrybutu tagu.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow