Coursera Learner working on a presentation with Coursera logo and
Coursera Learner working on a presentation with Coursera logo and

Delightful Soup to biblioteka Pythona służąca do wyciągania informacji z rekordów HTML i XML. Współpracuje z preferowanym przez Ciebie parserem, aby zapewnić nieformalne metody odkrywania, wyszukiwania i zmieniania drzewa parserowego. Regularnie oszczędza ona inżynierom oprogramowania godziny lub długie odcinki pracy.

Te wytyczne reprezentują każdy znaczący element Excellent Soup 4, z modelami. Daję Ci to, do czego biblioteka jest przydatna, jak działa, jak ją wykorzystać, jak sprawić, aby robiła to, czego potrzebujesz i co robić, gdy szkodzi Twoim pragnieniom.

Modele w tej dokumentacji powinny działać podobnie w Pythonie 2.7 i Pythonie 3.2.

Być może szukasz dokumentacji dla Lovely Soup 3. Pod warunkiem, że jest to prawda, powinieneś zdać sobie sprawę, że Wonderful Soup 3 nie jest już nigdy więcej tworzony i że Excellent Soup 4 jest zalecany dla każdego nowego przedsięwzięcia. W przypadku, gdy musisz dowiedzieć się o kontrastach pomiędzy Excellent Soup 3 i Wonderful Soup 4, zobacz Kod Portingowy do BS4.

Ta dokumentacja została przekształcona na różne dialekty przez klientów Wonderful Soup:

这篇文档当然还有中文版.

このページは日本語で利用できます(外部リンク)

이 문서는 한국어 번역도 가능합니다. (외부 링크)

dokument HTML, który będzie używany jako przykład w całym tym dokumencie. Jest to część opowieści Alicji w Krainie Czarów:

html_doc = “””

<html><head><title>The Dormouse’s story</title></head>

<Ciało>

<p class=”title”><b>The Dormouse’s story</b></p>

<p class=”story”>>Kiedyś były trzy małe siostry, a ich imiona były

<a href=”http://example.com/elsie” class=”sister” id=”link1″>Elsie</a>,

<a href=”http://example.com/lacie” class=”sister” id=”link2″>Lacie</a> oraz

<a href=”http://example.com/tillie” class=”sister” id=”link3″>Tillie</a>;

i żyli na dnie studni.</p>

<p class=”story”>…</p>

“””

Prowadzenie dokumentu “trzy siostry” przez Beautiful Soup daje nam obiekt BeautifulSoup, który reprezentuje dokument jako zagnieżdżoną strukturę danych:

z bs4 importujemy BeautifulSoup

soup = BeautifulSoup(html_doc, ‘html.parser’)

print(zupa.prettify())

# <html>

# <<Głowa>

# <title>

# The Dormouse’s story

# </title>

# </head>

# <body>

# <p class=”title”>

# <b>

# The Dormouse’s story

# </b>

# </p>

# <p class=”story”>

# Dawno temu były trzy małe siostrzyczki

# <a class=”sister” href=”http://example.com/elsie” id=”link1″>

# Elsie

# </a>

# ,

# <a class=”sister” href=”http://example.com/lacie” id=”link2″>

# Lacie

# </a>

# i

# <a class=”sister” href=”http://example.com/tillie” id=”link2″>

# Tillie

# </a>

# i mieszkali na dnie studni.

# </p>

# <p class=”story”>

# …

# </p>

# </body>

# </html>

Oto kilka prostych sposobów poruszania się po tej strukturze danych:

zupa.tytuł

# <title>The Dormouse’s story</title>

zupa.tytuł.nazwa

# u’title’

zupa.title.string

# u’The Dormouse’s story’

zupa.tytuł.nazwa.rodzica

# u’head’

zupa.p

# <p class=”title”><b>The Dormouse’s story</b></p>

zupa.p[“klasa”]

# u’title’

zupa.a

# <a class=”sister” href=”http://example.com/elsie” id=”link1″>Elsie</a>

zupa.find_all(‘a’)

# [<a class=”sister” href=”http://example.com/elsie” id=”link1″>Elsie</a>”,

# <a class=”sister” href=”http://example.com/lacie” id=”link2″>Lacie</a>,

# <a class=”sister” href=”http://example.com/tillie” id=”link3″>Tillie</a>]

soup.find(id=”link3″)

# <a class=”sister” href=”http://example.com/tillie” id=”link3″>Tillie</a>

Jednym z powszechnych zadań jest wyodrębnienie wszystkich adresów URL znalezionych w tagach <a> strony:

dla linku w soup.find_all(‘a’):

print(link.get(‘href’))

# http://example.com/elsie

# http://example.com/lacie

# http://example.com/tillie

Innym wspólnym zadaniem jest wydobycie całego tekstu z jednej strony:

print(soup.get_text())

# The Dormouse’s story

#

# The Dormouse’s story

#

# Dawno temu były trzy małe siostrzyczki

# Elsie,

# Lacie i

# Tillie;

# i mieszkali na dnie studni.

#

# …

Instalacja Beautiful Soup

Jeśli korzystasz z bieżącej formy Debiana lub Ubuntu Linux, możesz wprowadzić Delightful Soup za pomocą systemowego menedżera pakietów:

$ może wprowadzić Python-bs4 (dla Pythona 2)

$ adept wprowadza Pythona 3-bs4 (dla Pythona 3)

Cudowna Zupa 4 jest rozprowadzana przez PyPi, więc w przypadku, gdy nie możesz jej wprowadzić za pomocą pakera systemowego, możesz ją wprowadzić za pomocą easy_install lub pip. Nazwa pakietu to beautifulsoup4, a podobny pakiet dotyczy Pythona 2 i Pythona 3. Upewnij się, że stosujesz właściwą interpretację pipa lub easy_install dla twojej postaci Pythona (mogą być one nazwane osobno pip3 i easy_install3, jeśli używasz Pythona 3).

$ easy_install beautifulsoup4

Pipka dolarowa wprowadzi piękną zupę4

(Wiązka BeautifulSoup nie jest najprawdopodobniej tym, czego potrzebujesz. To jest przeszłość znacząca rozładowanie, Excellent Soup 3. Ładunek programowania wykorzystuje BS3, więc jest on jeszcze dostępny, jednak w przypadku komponowania nowego kodu należy wprowadzić BeautifulSoup4).

Na wypadek gdybyś nie wprowadził easy_install lub pip, możesz ściągnąć Delightful Soup 4 i wprowadzić ją z setup.py.

$ python setup.py wprowadzić

W ostateczności, pozwolenie na Delightful Soup pozwala na połączenie całej biblioteki z aplikacją. Możesz pobrać tarball, zduplikować jego katalog bs4 do bazy kodowej swojej aplikacji i wykorzystać Delightful Soup bez konieczności wprowadzania go w żaden sposób.

Używam Pythona 2.7 i Pythona 3.2 do stworzenia Delightful Soup, jednak powinien on współpracować z innymi bieżącymi formami.

Kwestie po stworzeniu

Excellent Soup jest dołączony jako kod Pythona 2. W momencie gdy wprowadzasz ją do użytku z Pythonem 3, jest ona konsekwentnie zmieniana na kod Pythona 3. W przypadku, gdy nie wprowadzisz pakietu, kod nie zostanie zmieniony. Pojawiły się również doniesienia o wprowadzeniu nieodpowiedniej adaptacji na maszynach z Windows.

Przy wyłączonej szansie, że otrzymasz ImportError “No module named HTMLParser”, twoim zmartwieniem jest to, że uruchamiasz adaptację Pythona 2 kodu pod Pythonem 3.

W przypadku gdy dostaniesz ImportError “No module named html.parser”, twoim zmartwieniem jest to, że uruchamiasz formę Pythona 3 kodu pod Pythonem 2.

W tych dwóch przypadkach, twoją najbardziej solidną opcją jest całkowite usunięcie zakładu Lovely Soup z twojego systemu (licząc każdy indeks zrobiony po odpięciu tarballa) i ponowna próba założenia zakładu.

Przy wyłączonej możliwości otrzymania błędu składni “Nieważna struktura zdań” w zawieszeniu ROOT_TAG_NAME = u'[dokument]’, musisz zmienić kod Pythona 2 na Pythona 3. Możesz to zrobić poprzez wprowadzenie pakietu:

$ python3 setup.py wprowadzić

lub ponownie poprzez fizyczne uruchomienie zawartości transformacji 2 do 3 Pythona w rejestrze bs4:

$ 2to3-3.2 – w bs4

Języki

Weekly newsletter

No spam. Just the latest releases and tips, interesting articles, and exclusive interviews in your inbox every week.