Automatyczne streszczanie treści internetowych: Implementacja Web Scrapera z wykorzystaniem Pythona i AI

implementacje

Wprowadzenie do web scrapingu

Web scraping to technika automatycznego pobierania danych ze stron internetowych. Pozwala ona na wydobywanie informacji, które normalnie wymagałyby ręcznego przeglądania i kopiowania. W dobie przeciążenia informacjami, umiejętność szybkiego pozyskiwania i przetwarzania danych z sieci staje się nieoceniona zarówno dla firm, jak i indywidualnych użytkowników.

Web scraping bywa często mylony z pojęciami takimi jak web parsing czy web crawling. Warto rozróżnić te terminy:

  • Web parsing dotyczy przetwarzania obszernego tekstu na mniejsze fragmenty
  • Web scraping koncentruje się na pobieraniu konkretnych informacji ze stron
  • Web crawling oznacza automatyczne przechodzenie pomiędzy stronami

Nasz projekt łączy elementy web scrapingu (ekstrakcja treści) z przetwarzaniem języka naturalnego (generowanie streszczeń).

Narzędzia wykorzystane w projekcie

Do realizacji naszego rozwiązania używamy kilku kluczowych bibliotek Pythona:

  • requests – umożliwia wysyłanie zapytań HTTP i pobieranie treści stron internetowych
  • BeautifulSoup – analizuje kod HTML i pomaga w formatowaniu oraz organizacji danych internetowych
  • ollama – udostępnia interfejs do komunikacji z modelami językowymi uruchamianymi lokalnie
  • re – dostarcza funkcje do pracy z wyrażeniami regularnymi
  • sys – pozwala na obsługę argumentów wiersza poleceń

Na początek zaimportuj je w projekcie:

Python
import ollama
import requests
import bs4
import sys
import re

Analiza krok po kroku

Podstawowa struktura programu

Program ma prostą, modułową budowę składającą się z dwóch głównych funkcji: process_website odpowiedzialnej za przetwarzanie strony oraz main będącej punktem wejścia programu. Funkcja main sprawdza poprawność argumentów wejściowych i przekazuje adres URL do funkcji przetwarzającej.

Python
def main():
    if len(sys.argv) != 2:
        print("Użycie: python main.py <adres_strony> ")
        sys.exit(1)

    input_website = sys.argv[1]
    process_website(input_website)

Pobieranie i parsowanie strony internetowej i przekazywanie jej do analizy

W projekcie jest wykorzystywany model deepseek-r1 8b dos†ępny pod tym adresem.
Jeśli w tym momencie nie masz zainstalowanej ollamy szybko skocz pod ten adres.
Pobierz model przy użyciu komendy w terminalu

Bash
ollama run deepseek-r1:8b

Następnie implementujemy funkcję process_website przyjmującą za parametr wcześniej odebraną stronę z parametru

Python
def process_website(website):
    response = ""
    try:
        # Sprawdzenie, czy adres URL zaczyna się od http:// lub https://
        if not website.startswith(('http://', 'https://')):
            print(
                "Niepoprawny adres URL. Proszę podać adres zaczynający się od http:// lub https://")
            return
        # Pobranie treści strony
        response = requests.get(website)
        response.raise_for_status()
    except requests.RequestException as e:
        print(f"Błąd podczas pobierania strony: {e}")
        return
    content = bs4.BeautifulSoup(response.text, features="html.parser")

Powyżej został zaprezentowany fragment funkcji, jego celem jest sprawdzenie czy adres jest poprawny oraz pobranie zawartości strony.

Następnym krokiem jest oczyszczenie pobranej strony jako tekst z niepotrzebnych elementów i wybranie tych elementów które są nazywane w popularny sposób za pomocą selektrorów css np.

Python
  
    # Próba znalezienia głównej treści - typowe selektory dla treści artykułów
    main_content = None
    
    # Sprawdzanie typowych selektorów dla treści artykułów
    selectors = [
        'article', 'main', '.content', '.post-content', '.article-content', 
        '.entry-content', '#content', '#main-content', '.main-content'
    ]
    
    for selector in selectors:
        elements = content.select(selector)
        if elements:
            main_content = elements[0]
            break
    
    # Jeśli nie znaleziono treści przez selektory, używamy body jako fallback
    if not main_content:
        main_content = content.find('body')
        
    # Usuwanie typowych elementów niepotrzebnych
    for elem in main_content.select('nav, footer, header, .menu, .footer, .sidebar, .widget, script, style, .comments'):
        if elem:
            elem.extract()
    
    text_content = str(main_content)

Implementacja modelu oraz instrukcje dla niego

Gdy już mamy oczyszczone dane z niepotrzebnych treści możemy przejść do generowania odpowiedzi od modelu deepseek oraz jego instrukcji pod jakimi kryteriami ma rozpocząć swoje myślenie.
Można to zrobić za pomocą poniższego prompta oraz wywołania modelu przez ollamę

Python
prompt = f"""
    Jako specjalista od analizy treści, masz jedno zadanie: streszczenie treści artykułu/tekstu ze strony internetowej.
    
    WAŻNE INSTRUKCJE:
    1. IGNORUJ wszelkie elementy niebędące treścią: menu, przyciski, bannery, reklamy, stopki, nagłówki, komentarze.
    2. ZIDENTYFIKUJ główny artykuł lub tekst na stronie i TYLKO na nim się skup.
    3. Jeśli zawartość jest w języku obcym, najpierw przetłumacz główny tekst na polski.
    4. Przygotuj ZWIĘZŁE, 3-5 zdaniowe streszczenie TYLKO głównej treści artykułu/strony.
    5. NIE opisuj struktury strony, elementów HTML, ani wyglądu witryny.
    6. NIE wymieniaj autorów, dat, kategorii czy innych metadanych, chyba że są kluczowe dla zrozumienia treści.
    
    Poniżej znajduje się HTML strony internetowej. Znajdź w nim główną treść i ją streszczaj:
    
    {text_content}
    
    STRESZCZENIE TREŚCI PO POLSKU:
    """


    chat_response = ollama.chat(
        model='deepseek-r1:8b',
        messages=[{
            'role': 'user',
            'content': prompt
        }]
    )
    returned_response = chat_response['message']['content']
    cleaned_response = re.sub(r'<think>.*?</think>', '', returned_response, flags=re.DOTALL).strip()

    print(cleaned_response)

w powyższym kodzie została dodana instrukcja w zmiennej cleaned_response która usuwa tekst który jest dostarczany dla użytkownika który prezentuje się następująco:

  • Myślenie modelu w znacznikach <think> Myślenie </think>
  • Odpowiedź dla użytkownika

Potencjalne zastosowania

Przedstawione narzędzie i koncepcja ma szerokie spektrum zastosowań praktycznych:

  1. Szybki przegląd treści – pozwala na błyskawiczne zapoznanie się z głównym przekazem artykułu bez konieczności czytania całości
  2. Monitorowanie treści – automatyczne śledzenie i streszczanie informacji z wielu źródeł
  3. Analiza konkurencji – automatyczne zbieranie i streszczanie treści publikowanych przez konkurencyjne firmy
  4. Wsparcie badań naukowych – ułatwienie przeglądania dużych ilości tekstów akademickich
  5. Personalne asystenty informacyjne – tworzenie systemów dostarczających zwięzłe podsumowania najważniejszych wiadomości

A dodatkowo nie wymaga tak wielu dostosowań dla różnych stron i przede wszystkim do analiz język strony nie jest ograniczeniem i można rozbudować o kolejne kroki np. dodawanie wyników do bazy, zapętlenie wielu stron do analizy.
Cały projekt oraz kod jest do wglądu pod tym adresem.

Źródła

🧠 Utrwal wiedzę z tego artykułu!

Kliknij pojęcie, by przypomnieć sobie definicję.

web parsing
?
Web parsing to proces analizy i przekształcania nieustrukturyzowanego kodu źródłowego strony internetowej, najczęściej w formacie HTML, na ustrukturyzowany i czytelny...
Czytaj pełną definicję
web crawling
?
Web crawling (indeksowanie stron) to proces automatycznego i systematycznego przeglądania stron internetowych przez specjalne programy, zwane robotami lub pająkami, w...
Czytaj pełną definicję
text cleaning
?
Oczyszczanie tekstu (text cleaning) to kluczowy etap wstępnego przetwarzania danych w NLP, polegający na usuwaniu zbędnych elementów z surowego tekstu,...
Czytaj pełną definicję
text summarization
?
Automatyczne streszczanie tekstu (text summarization) to technika z dziedziny przetwarzania języka naturalnego (NLP), która polega na tworzeniu zwięzłych i precyzyjnych...
Czytaj pełną definicję

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Powiązane posty

Zacznij wpisywać wyszukiwane hasło powyżej i naciśnij Enter, aby wyszukać. Naciśnij ESC, aby anulować.

Powrót do góry