beautifulsoup Samouczek
Pierwsze kroki z piękną zupą
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:
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ć.
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 .
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.
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:
Zaimportuj bibliotekę Beautiful Soup
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 jaklxml
lubhtml5lib
.)„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ą.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ą:
- Szukaj według klasy CSS
- Szukaj według adresu hiperłącza
- Szukaj według identyfikatora elementu, tagu
- 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.