CodeGym /Kursy /Python SELF PL /Praca z BeautifulSoup i ekstrakcja informacji

Praca z BeautifulSoup i ekstrakcja informacji

Python SELF PL
Poziom 31 , Lekcja 1
Dostępny

Jeśli myślisz, że strony internetowe to tylko ładne obrazki i tekst, mam dla ciebie nowinę: one są jak cebule — wielowarstwowe i mogą sprawić, że będziesz płakać (z radości, oczywiście!), kiedy dowiesz się, ile danych można z nich wydobyć. Dziś pokopiemy w stronach HTML za pomocą biblioteki BeautifulSoup. Przygotuj swoją wirtualną łopatę — czas kopać!

1. Analiza dokumentów HTML

Proste strony

Rozważmy kilka prostych dokumentów HTML, aby zrozumieć, z czego są zbudowane i jakie elementy mogą być interesujące dla ekstrakcji danych.

Przykład strony z wiadomością:

HTML

<html>
  <head>
    <title>Wiadomości</title>
  </head>
  <body>
    <h1>Główna wiadomość dnia</h1>
    <p>Dziś wydarzyło się coś ważnego!</p>
  </body>
</html>

W tym przykładzie h1 zawiera nagłówek artykułu, a p — główny tekst.

Wpływ struktury HTML na scraping

Zanim użyjesz BeautifulSoup, ważne jest, aby zrozumieć, jak jest zorganizowany dokument HTML, który chcesz sparsować. To pozwala zidentyfikować, które części strony zawierają potrzebne dane. Na przykład, jeśli szukasz tytułu strony, zwróć uwagę na <h1>, a do ekstrakcji listy użyj <ul> i <li>.

Przygotowanie do scrapingu

Przed rozpoczęciem ekstrakcji danych ważne jest, aby wyróżnić kluczowe tagi i atrybuty. Na przykład, jeśli web-developerzy sami oznaczyli dane w swojej stronie, np. używając atrybutu class="headline" dla nagłówka, to bardzo ci pomoże. Wykorzystaj narzędzia developerskie w przeglądarce, aby przeanalizować strukturę HTML. Kliknij prawym przyciskiem myszy na elemencie i wybierz "Inspect" (w Google Chrome).

2. Instalacja i konfiguracja bibliotek

Instalacja BeautifulSoup i requests

Do pracy z HTML użyjemy biblioteki BeautifulSoup. Także, aby pobierać strony HTML, przyda nam się requests. Instalacja jest prosta i wymaga tylko kilku poleceń w konsoli:

Bash

pip install beautifulsoup4 requests

Współpraca requests z BeautifulSoup

Requests pozwala nam pobierać HTML ze strony internetowej, a BeautifulSoup pomoże ją przeanalizować. Zobaczmy, jak to wygląda w praktyce:

Python

import requests
from bs4 import BeautifulSoup

# Pobieramy stronę
url = 'https://example.com'
response = requests.get(url)

# Parsujemy stronę za pomocą BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')

# Ekstrakcja tytułu strony
title = soup.title.text
print('Tytuł:', title)

3. Nawigacja i ekstrakcja danych za pomocą tagów

Metody nawigacji

Teraz, gdy już mamy dokument HTML, możemy użyć BeautifulSoup do nawigacji po nim. Świetna metoda .select() pozwala wydobywać dane, używając selektorów CSS.

Ekstrakcja danych za pomocą tagów

BeautifulSoup udostępnia metody, które pozwalają znajdować elementy za pomocą ich tagów, takich jak find i find_all. Pomogą ci one znaleźć upragnione fragmenty danych:

Python

# Znajdź pierwszy paragraf
paragraph = soup.find('p').text
print('Pierwszy paragraf:', paragraph)

# Znajdź wszystkie elementy listy
list_items = soup.find_all('li')
for item in list_items:
 print('Element listy:', item.text)

Użycie atrybutów do filtrowania

Czasami trzeba będzie wydobywać elementy, które spełniają określone warunki, np. mają specyficzny class. BeautifulSoup pozwala zrobić to z łatwością:

Python

# Ekstrakcja elementu o określonej klasie
headline = soup.find('h1', class_='main-headline').text
print('Nagłówek:', headline)

4. Użycie selektorów CSS

Czym są selektory CSS?

Selektory CSS to potężne narzędzie z punktu widzenia programisty Pythona, które daje możliwość ekstrakcji danych według konkretnych kryteriów. Mogą być używane do znajdowania elementów, które mają wspólny styl, co czyni scraping bardziej elastycznym i precyzyjnym.

Użycie selektorów w BeautifulSoup

BeautifulSoup pozwala używać selektorów CSS za pomocą metody select. Na przykład:

Python

# Wybierz wszystkie linki
links = soup.select('a')
for link in links:
 print('Link:', link['href'])

Możesz nawet łączyć selektory dla bardziej precyzyjnej selekcji. Na przykład, soup.select('div.article h2') wybierze wszystkie h2 w div z klasą article.

Przykłady wyszukiwania za pomocą selektorów CSS

Zastosujmy naszą wiedzę w praktyce. Wybierz wszystkie paragrafy z klasą highlight i wyświetl ich tekst:

Python

# Ekstrakcja wszystkich paragrafów z klasą 'highlight'
highlighted_paragraphs = soup.select('p.highlight')
for para in highlighted_paragraphs:
 print('Podświetlony paragraf:', para.text)

To na razie wszystko, nie zapomnijcie poćwiczyć swoje umiejętności scrapingu przed kolejnym spotkaniem. Powodzenia w ekscytującym świecie parsowania!

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION