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.
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.
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()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, miracleWdraż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.