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:
import ollama
import requests
import bs4
import sys
import reAnaliza 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.
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
ollama run deepseek-r1:8bNastępnie implementujemy funkcję process_website przyjmującą za parametr wcześniej odebraną stronę z parametru
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.
# 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ę
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:
- Szybki przegląd treści – pozwala na błyskawiczne zapoznanie się z głównym przekazem artykułu bez konieczności czytania całości
- Monitorowanie treści – automatyczne śledzenie i streszczanie informacji z wielu źródeł
- Analiza konkurencji – automatyczne zbieranie i streszczanie treści publikowanych przez konkurencyjne firmy
- Wsparcie badań naukowych – ułatwienie przeglądania dużych ilości tekstów akademickich
- 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.





