Zaawansowany skrobak sieciowy w języku Python

Zbuduj zaawansowany skrobak sieciowy w Pythonie. Dowiedz się, jak wyodrębniać dane ze stron, obsługiwać bloki agenta użytkownika, zarządzać limitami szybkości i strukturyzować dane wyjściowe.

Spróbuj w Edytorze

Przegląd

Skrobanie sieci polega na programowym pobieraniu stron internetowych i analizowaniu ich struktury HTML w celu wyodrębnienia określonych danych. W Pythonie tradycyjnie realizuje się to za pomocą poleceń „requests” i „BeautifulSoup”.

Zaawansowane zgarniacze wymagają solidnej konfiguracji. Samo żądanie stron może skutkować blokami lub zakazami adresów IP, co wymaga dostosowania nagłówków, np. niestandardowych programów User-Agent i wprowadzenia losowych interwałów opóźnień.

Ten interaktywny przykład naśladuje skrobanie próbnych danych z walidacją. Pokazuje, jak lokalizować zagnieżdżone kontenery, obsługiwać przekroczenia limitu czasu sieci i organizować dane wyjściowe w czyste listy.

Dane wyjściowe kodu i wykonania

Procedura przeglądania stron internetowych zawierająca niestandardowe nagłówki, zarządzanie limitami czasu i struktury analizatora składni HTML.

adv_scraper.py
Spróbuj w Edytorze
import requests
from bs4 import BeautifulSoup
import time

def scrape_quotes():
    # Mock URL designed for scraping practice
    url = "https://quotes.toscrape.com/"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }
    
    print(f"Initiating request to: {url}...")
    try:
        # Request with timeout protection
        response = requests.get(url, headers=headers, timeout=5)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, "html.parser")
        quotes = soup.find_all("div", class_="quote", limit=3)
        
        results = []
        for q in quotes:
            text = q.find("span", class_="text").text
            author = q.find("small", class_="author").text
            tags = [t.text for t in q.find_all("a", class_="tag")]
            results.append({
                "quote": text,
                "author": author,
                "tags": tags
            })
            
        print("Scrape completed successfully!\n")
        for idx, item in enumerate(results):
            print(f"Quote {idx+1}: {item['quote']}")
            print(f"  Author: {item['author']}")
            print(f"  Tags:   {', '.join(item['tags'])}\n")
            
    except requests.exceptions.RequestException as e:
        print(f"Network error occurred: {e}")

scrape_quotes()
Wyjście terminala
Initiating request to: https://quotes.toscrape.com/...
Scrape completed successfully!

Quote 1: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
  Author: Albert Einstein
  Tags:   change, deep-thoughts, thinking

Quote 2: “It is our choices, Harry, that show what we truly are, far more than our abilities.”
  Author: J.K. Rowling
  Tags:   abilities, choices

Quote 3: “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
  Author: Albert Einstein
  Tags:   inspirational, life, live, miracle

Wdrażanie krok po kroku

  • Monitorowanie i śledzenie cen w katalogach handlowych
  • Analiza nastrojów poprzez zbieranie danych z recenzji na forach
  • Tworzenie akademickich zbiorów danych badawczych

Często zadawane pytania

Co to jest plik robots.txt?

Plik tekstowy umieszczony w katalogu głównym domeny wskazujący, które ścieżki przeszukiwane są przez roboty i roboty indeksujące, które mogą, a które nie, indeksować. Zawsze powinieneś to przeczytać zanim napiszesz skrobak.

Jak mogę zeskrobać strony renderowane dynamicznie przez JavaScript?

Żądania standardowe pobierają tylko statyczny kod HTML. Aby analizować strony zawierające dużo JavaScript, musisz użyć narzędzi do automatyzacji przeglądarki, takich jak Playwright lub Selenium.

Powiązane tematy