pl
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia Crawlery internetowe są wykorzystywane do monitorowania cen, agregacji wiadomości, analizy konkurencji, indeksowania wyszukiwarek i innych zadań, które wymagają gromadzenia ustrukturyzowanych danych ze stron internetowych. Niniejszy przewodnik opisuje, jak zbudować web crawlera od podstaw, zaczynając od planowania projektu i wyboru technologii, a kończąc na konfiguracji środowiska i przechowywaniu danych. Zapewnia on podstawy, które można później rozszerzyć na bardziej złożone projekty na dużą skalę.
Jest to program, który automatycznie odwiedza strony internetowe i zbiera z nich informacje. Działa poprzez wysyłanie wywołań HTTP do witryny, pobieranie kodu HTML każdej strony, a następnie przetwarzanie tego kodu HTML w celu wyodrębnienia wymaganych danych. Następnie podąża za wewnętrznymi linkami i powtarza proces, aż osiągnie predefiniowane limity lub warunki zatrzymania. Proces ten nie jest tym samym, co web scraping. Szczegółowe porównanie można znaleźć na stronie Web scraping vs web crawling.
Takie narzędzia są szeroko stosowane do:
W takich sytuacjach zbudowanie własnego crawlera jest często lepszym podejściem: można dostosować program do swoich potrzeb, kontrolować częstotliwość żądań i zdefiniować, jakie informacje mają być zbierane i w jaki sposób.
Przed rozpoczęciem kodowania należy zdefiniować podstawowe parametry projektu, aby uniknąć typowych problemów i zapewnić stabilne działanie.
Dobrze zaplanowane narzędzie działa niezawodnie, efektywnie wykorzystuje zasoby i zapewnia wysokiej jakości wyniki.
Crawler internetowy można zbudować w wielu językach programowania, w tym Python, Java i PHP. Python wyróżnia się prostą składnią i bogatym ekosystemem bibliotek do żądań HTTP i parsowania HTML (takich jak requests, BeautifulSoup, lxml). Java jest solidnym wyborem dla projektów na dużą skalę i projektów korporacyjnych. PHP jest bardziej powszechny w tworzeniu stron internetowych i mniej wygodny dla samodzielnych crawlerów.
Na początek rozważymy, jak zbudować crawlera internetowego w Pythonie, ponieważ jest to zwykle optymalny wybór, ponieważ pozwala szybko wdrożyć i przetestować podstawową funkcjonalność.
Zacznij od zainstalowania Pythona ze strony oficjalna strona internetowa. Następnie zainstaluj podstawowe biblioteki, których będziesz używać: requests do wysyłania żądań HTTP i BeautifulSoup do analizowania HTML:
pip install requests beautifulsoup4
Warto również zorganizować strukturę projektu od samego początku: oddzielne pliki dla głównej logiki, konfiguracji i narzędzi. Dzięki temu przyszła konserwacja i skalowanie będą znacznie łatwiejsze.
Podstawowy skrypt może składać się z trzech głównych części: wysyłania żądania, przetwarzania HTML i podążania za linkami.
from bs4 import BeautifulSoup
import time
import random
# Configuration
url = "https://quotes.toscrape.com/" # Replace this with your target site
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
}
timeout = 5 # server response timeout
max_retries = 3 # maximum number of retries on errors
# You can add your proxy here if needed
proxies = {
"http": "http://username:password@proxyserver:port",
"https": "https://username:password@proxyserver:port"
}
# Function to check access via robots.txt
def can_crawl(base_url, path="/"):
try:
robots_url = base_url.rstrip("/") + "/robots.txt"
r = requests.get(robots_url, headers=headers, timeout=timeout)
if r.status_code == 200 and f"Disallow: {path}" in r.text:
print(f"Service {path} forbidden for scraping robots.txt")
return False
except requests.RequestException:
# If robots.txt is unavailable, continue
pass
return True
# Main logic
if can_crawl(url):
for attempt in range(max_retries):
try:
response = requests.get(url, headers=headers, timeout=timeout, proxies=proxies)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'lxml')
# Collect links
links = [a['href'] for a in soup.find_all('a', href=True)] # You can change selector here
print("Found links:", links)
# Delay between requests to simulate more realistic behavior
time.sleep(random.uniform(3, 7)) # better than a fixed 5-second delay
break # if everything succeeds, exit the retry loop
except requests.RequestException as e:
print(f"Request error (attempt {attempt+1}): {e}")
wait = 2 ** attempt
print(f"Waiting {wait} seconds before retry...")
time.sleep(wait)
else:
print("The crawler cannot process this resource due to robots.txt rules")
Ten skrypt pokazuje podstawowy przepływ pracy: wysyłanie żądania, analizowanie HTML i zbieranie linków.
W przypadku witryn wielostronicowych potrzebna jest pętla, która przechodzi przez wszystkie strony. Przykład:
for page in range(1, 6):
url = f"https://google.com/page/{page}"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# data processing
Odpowiedzialne indeksowanie obejmuje sprawdzanie pliku robots.txt witryny i przestrzeganie jego reguł. Należy również wprowadzić opóźnienia między żądaniami, aby nie przeciążać serwera. Za pomocą funkcji time.sleep() można dodawać przerwy między pobraniami stron.
import time
from bs4 import BeautifulSoup
for page in range(1, 6):
url = f"https://google.com/page/{page}"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# data processing
time.sleep(5) # delay in seconds
Zebrane dane można przechowywać w wygodnych formatach, takich jak CSV lub JSON. Na przykład, aby zapisać listę linków:
import json
data = {"links": links}
with open("links.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
Postępując zgodnie z tymi krokami, otrzymasz podstawowy crawler internetowy, który możesz rozszerzyć do bardziej zaawansowanych zadań. Możesz skalować kod, zintegrować obsługę proxy, obsługiwać dużą liczbę stron lub przejść do bardziej wydajnych frameworków, takich jak Scrapy, dla złożonych scenariuszy gromadzenia danych.
Komentarze: 0