1. Wprowadzenie do metod wyodrębniania tekstów
Dziś nauczymy się wyciągać cenne dane tekstowe i
atrybuty z elementów HTML. Odrzućcie swoje maczety, ponieważ
z BeautifulSoup
praca z kodem jest jak spacer po jesiennym sadzie,
gdzie jabłka aż się proszą, by je zerwać. Gotowi na zbieranie owoców nauki?
No to zaczynamy!
Metody wyciągania tekstów z elementów HTML są na pierwszym miejscu na naszej liście. Zanim zaczniemy wyciągać tekst, załadujmy stronę.
import requests
from bs4 import BeautifulSoup
# Ładujemy kod HTML strony
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
Teraz mamy obiekt soup
, który zawiera
strukturę drzewa naszego dokumentu HTML. Wyciągnijmy
tekst z jakiegoś elementu, na przykład z nagłówka.
Metoda .text
i get_text()
Właściwość .text
i jej odpowiednik - metoda
get_text()
pozwalają uzyskać tekstową
zawartość elementu (oraz wszystkich jego wewnętrznych elementów).
# Wyciągamy tekst z pierwszego znalezionego nagłówka h1
h1_tag = soup.find('h1')
print(h1_tag.text) # lub h1_tag.get_text()
Spróbujcie sami: znajdźcie inne elementy, używając metod wyszukiwania, które poznaliśmy na poprzednich wykładach, i wyciągnijcie z nich tekst. Zdziwicie się, ile informacji można uzyskać!
2. Wyodrębnianie wartości atrybutów
Teksty tekstami, ale czasami ważne dane ukryte są w atrybutach, jak paszporty w kieszeniach. Wyobraźcie sobie, że musicie poznać adres linku lub uzyskać URL obrazka (i nie pytajcie mnie, po co to komu; może akurat chcecie zbierać kolekcję zdjęć kotków).
Wyodrębnianie wartości atrybutów
Załóżmy, że mamy element linku
<a
href="https://example.com">Example</a>
. Jak uzyskać wartość
href
? To proste.
# Wyciągamy link
a_tag = soup.find('a')
link = a_tag['href']
print("Link:", link)
Ten kod wyciągnął wartość atrybutu href
. Jeśli są
jakieś inne przydatne atrybuty, możecie je wyciągnąć w analogiczny
sposób.
Próbujemy wyciągnąć obrazek
Wyciąganie URL obrazka może być równie proste.
Rozważmy przypadek z
<img src="image.jpg" alt="Kotek">
.
# Wyciągamy URL obrazka
img_tag = soup.find('img')
image_url = img_tag['src']
print("URL obrazka:", image_url)
Piękno pracy z BeautifulSoup
polega na tym, że pozwala łatwo
znajdować i wyciągać dane, nie zmuszając nas przy tym
do zastanawiania się, jak dokładnie działa struktura HTML.
3. Przykłady wyodrębniania tekstów i atrybutów
Czas na przykłady. Przyjrzyjmy się nieco bardziej skomplikowanemu zadaniu:
wyciągniemy wszystkie linki na stronie razem z tekstem wewnątrz tagów <a>
.
Przykład: wyodrębnianie wszystkich linków z tekstem
# Znajdujemy wszystkie tagi a
a_tags = soup.find_all('a')
# Wyświetlamy link i tekst
for a_tag in a_tags:
link = a_tag['href']
text = a_tag.get_text()
print(f"Tekst: {text}, Link: {link}")
Jak widać, metoda find_all
wygodnie znajduje wszystkie
elementy spełniające warunki wyszukiwania, a
pętla for
pozwala przejść przez każdy z nich.
4. Obsługa błędów
Nie zapominajcie o obsłudze błędów. Czasami struktura HTML może być inna, niż się spodziewacie, albo element może nie mieć oczekiwanego atrybutu. Upewnijcie się, że wasz kod nie "padnie" w takich momentach.
# Przykład obsługi błędów przy wyodrębnianiu atrybutu
try:
link = a_tag['href']
except KeyError:
link = None
print("Atrybut href nie znaleziony!")
To sprawi, że skrypt będzie bardziej odporny i nie zatrzyma się z powodu jednego mało oczywistego błędu.
5. Zastosowanie w praktyce
W 2019 roku rosyjski przedsiębiorca podzielił się historią, jak jego firma, specjalizująca się w parsowaniu danych, osiągnęła obrót w wysokości 20 milionów rubli rocznie. Podkreślił, że automatyczne zbieranie informacji nie ogranicza konkurencji, ale przeciwnie, pomaga firmom dostosowywać się do rynku.
Na przykład jeden z klientów zamówił parser do codziennego pobierania danych o stanie magazynu z witryny dostawcy, co pozwalało na szybkie aktualizowanie asortymentu i cen we własnym sklepie internetowym. Przedsiębiorca zauważył również, że mimo prób niektórych witryn, które utrudniają parsowanie, nowoczesne technologie skutecznie obchodzą takie przeszkody, zapewniając firmom dostęp do potrzebnych danych do podejmowania strategicznych decyzji.
GO TO FULL VERSION