tr
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski Web tarayıcıları fiyat izleme, haber toplama, rakip analizi, arama motoru indeksleme ve web sitelerinden yapılandırılmış veri toplama gerektiren diğer görevler için kullanılır. Bu kılavuz, proje planlama ve teknoloji seçimlerinden başlayıp ortam kurulumu ve veri depolamaya kadar sıfırdan bir web tarayıcısının nasıl oluşturulacağını anlatmaktadır. Daha sonra daha karmaşık ve büyük ölçekli projelere genişletebileceğiniz bir temel sağlar.
Web sayfalarını otomatik olarak ziyaret eden ve onlardan bilgi toplayan bir programdır. Bir siteye HTTP çağrıları göndererek, her sayfanın HTML'sini alarak ve ardından gerekli verileri çıkarmak için bu HTML'yi işleyerek çalışır. Bundan sonra, dahili bağlantıları takip eder ve önceden tanımlanmış sınırlara veya durdurma koşullarına ulaşana kadar işlemi tekrarlar. Bu işlem web kazıma ile aynı değildir. Ayrıntılı bir karşılaştırma için bkz Web kazıma vs web tarama.
Bu tür araçlar yaygın olarak kullanılmaktadır:
Bu senaryolarda, kendi web tarayıcınızı oluşturmak genellikle daha iyi bir yaklaşımdır: programı tam olarak ihtiyaçlarınıza göre ayarlayabilir, istek sıklığını kontrol edebilir ve hangi bilgi parçalarının nasıl toplanacağını tanımlayabilirsiniz.
Kodlamaya başlamadan önce, yaygın sorunlardan kaçınmak ve istikrarlı çalışmayı sağlamak için projenizin temel parametrelerini tanımlayın.
İyi planlanmış bir araç güvenilir bir şekilde çalışır, kaynakları verimli kullanır ve yüksek kaliteli sonuçlar sağlar.
Python, Java ve PHP dahil olmak üzere birden fazla programlama dilinde bir web tarayıcısı oluşturabilirsiniz. Python, basit söz dizimi ve HTTP istekleri ve HTML ayrıştırma (requests, BeautifulSoup, lxml gibi) için zengin kütüphane ekosistemi ile öne çıkar. Java, büyük ölçekli ve kurumsal projeler için sağlam bir seçimdir. PHP web geliştirmede daha yaygındır ve bağımsız tarayıcılar için daha az uygundur.
İlk deneme için, Python'da bir web tarayıcısının nasıl oluşturulacağını ele alacağız, çünkü temel işlevselliği hızlı bir şekilde uygulamanıza ve test etmenize izin verdiği için genellikle en uygun seçimdir.
Python'u şu adresten yükleyerek başlayın resmi web sitesi. Ardından kullanacağınız çekirdek kütüphaneleri yükleyin: HTTP istekleri göndermek için requests ve HTML ayrıştırmak için BeautifulSoup:
pip install requests beautifulsoup4
Ayrıca proje yapınızı en baştan düzenlemeye değer: ana mantık, yapılandırma ve yardımcı programlar için ayrı dosyalar. Bu, gelecekteki bakım ve ölçeklendirmeyi çok daha kolay hale getirir.
Temel bir komut dosyası üç ana bölümden oluşabilir: istek gönderme, HTML işleme ve bağlantıları takip etme.
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")
Bu kod temel iş akışını gösterir: bir istekte bulunma, HTML'yi ayrıştırma ve bağlantıları toplama.
Çok sayfalı siteler için, tüm sayfalarda dolaşan bir döngüye ihtiyacınız vardır. Örnek:
for page in range(1, 6):
url = f"https://google.com/page/{page}"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# data processing
Sorumlu tarama, bir sitenin robots.txt dosyasını kontrol etmeyi ve kurallarına uymayı içerir. Ayrıca sunucuyu aşırı yüklememek için istekler arasında gecikmeler eklemeniz gerekir. time.sleep() fonksiyonu ile sayfa getirme işlemleri arasına duraklamalar ekleyebilirsiniz.
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
Toplanan ayrıntıları CSV veya JSON gibi uygun formatlarda saklayabilirsiniz. Örneğin, bağlantıların bir listesini kaydetmek için:
import json
data = {"links": links}
with open("links.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
Bu adımları izleyerek, daha gelişmiş görevler için genişletebileceğiniz temel bir web tarayıcısı elde edersiniz. Kodu ölçeklendirebilir, proxy desteğini entegre edebilir, çok sayıda sayfayı işleyebilir veya karmaşık veri toplama senaryoları için Scrapy gibi daha güçlü çerçevelere geçebilirsiniz.
Yorumlar: 0