Python işlemlerinizde IP listenizi sürekli döndürerek yani rotate ederek daha sağlıklı bir şekilde IP adreslerinizi kullanabilir ve veri kazıma işlemlerinizde daha rahat istekler atabilirsiniz.
Proxy adresleri IP adresinizi gizleyebilir, fakat birden fazla aynı IP adresinden istek attığınızda rate-limit dediğimiz karşı sitenin işlem limitlerine takılır ve karşı site sizi saldırgan olarak algılayacağı için IP adresiniz banlanabilir. Eğer rotating proxy kullanmıyor, bunun yerine statik IP adreslerinden bir proxy havuzunuz varsa attığınız web isteklerinde aşağıdaki makalemizde sizlere IP adreslerini nasıl kolay bir şekilde döndürebileceğinizi anlatacağız.
Rotating Proxy Nedir?
Rotating proxy aslında Residential proxy hizmetlerinde olan, genelde sürekli dönen IP adresleridir. Fakat bazı zamanlarda Residential proxy hızlı olmadığında veya elinde mevcutta bir IP listesi olan kişiler kendi rotasyon kütüphanesini kullanarak IP adreslerini kullandığı yazılımın içerisinde döndürebilir. GB bazlı hesap yapmak istemeyen veya kendi IP adresleri bulunan kişiler için bu aslında daha uygun bir çözümdür.
IP rotasyonu, giden ağ istekleri için kullanılan IP adresini dinamik olarak değiştirme işlemidir. IP değişimi genellikle her istekten sonra, düzenli aralıklarla veya ihtiyaç duyduğunuzda gerçekleşir. IP rotasyonunun arkasındaki fikir oldukça basittir. Her web isteği için aynı IP adresini kullanmak yerine, birden fazla IP arasında geçiş yaparsınız.
Python’da Proxy’ler Nasıl Döndürülür
Bu bölümde, Python’da proxy’leri döndürme ile ilgili adımları öğreneceksiniz. Proxy bağlantısını test etmek için, IP adresinizi döndüren bir uç nokta olan https://httpbin.io/ip’u kullanacaksınız. Ama önce, başlangıç olarak ihtiyacımız olan gereksinimlere bakalım.
Adım 1: İhtiyacımız olan şeyler
Bu öğreticiyi takip etmek için, aşağıdakilerin makinenizde mevcut olduğundan emin olun:
- Python3: Bazı sistemlerde önceden yüklenmiştir. Ancak, güncel olduğundan emin olun (sürüm 3+).
- Bir IDE: Bu eğitim VS Code kullansa da, yine de tercih ettiğiniz IDE ile takip edebilirsiniz.
- İstekler: HTTP istemcisi olarak Python’un Requests’ini kullanacaksınız. Pip kullanarak yükleyin:
pip3 install requests
Adım 2: Proxy Satın Alın
Paketimiz yüklendiyse şimdi hazırız. Daha sonra bir proxy listesine ihtiyacınız olacak. Web Scraping yapacağınız web sitesine göre istek atacağınız sitelere göre dilediğiniz lokasyon proxy tercih edebilmeniz için Proxynet Self-Servis müşteri paneline göz atabilir isteğe göre IPv4 veya IPv6 proxy satın alabilirsiniz. Bunun için her zaman öncesinde satış temsilcisi ile iletişime geçebilirsiniz.
Adım 3: Proxy Olmadan bir istek gönderin
Varsayılan olarak, bir istek belirtmezseniz yerel IP’nizi kullanacaktır. Kontrol etmek için, hedef test sitesine proxy olmadan bir ilk istek gönderelim.
İstekler kitaplığını içe aktarın, hedef siteyi ziyaret edin ve yanıtını yazdırın:
# pip3 install requests
import requests
# send a request to the test endpoint
response = requests.get("https://httpbin.io/ip")
# validate the response
if response.status_code != 200:
print(f"The request failed with {response.status_code}")
else:
print(response.text)
Yukarıdaki betik varsayılan yerel IP adresinizin çıktısını verecektir. Şimdi, Python’da bir proxy kurmak için bunu geliştirelim.
Adım 4: Proxy ile bir istek atalım
HTTP ve HTTPS protokollerini bir sözlükte belirterek mevcut kodunuzu proxy adresi ile güncelleyin. Ardından, isteğinizi bunun üzerinden yönlendirin:
# pip3 install requests
import requests
# specify the proxy server address
proxies = {
"http": "http://proxy.proxynet.io:60001",
"https": "http://proxy.proxynet.io:60001",
}
# send a request to the test endpoint
response = requests.get(
"https://httpbin.io/ip",
proxies=proxies,
)
# validate the response
if response.status_code != 200:
print(f"The request failed with {response.status_code}")
else:
print(response.text)
Kodu ilettiğinizde proxy adresinin arkasındaki IP adresinin sonucunu aşağıdaki şekilde verecektir. Proxy olmadan attığınız istek ile proxy varken attığınız istekde IP adresleri farklıysa isteğiniz başarılı artık proxy kullanılabilir demektir.
{
"origin": "120.36.89.225:30223"
}
Adım 5: Rotating proxy listesi oluşturalım
Sitemizden satın almış olduğunuz proxyleri proxy-list.txt gibi bir dosyaya kaydedebilirsiniz. Bu IP adresleri alt alta şu şekilde olmalıdır:
proxy.proxynet.io:60001
proxy.proxynet.io:6002
Proxy’leri iki şekilde döndürebilirsiniz:
- Proxy havuzunu sırayla yineleyin.
- Proxy havuzunda rastgele yineleme.
Aşağıda her iki yöntemi de nasıl uygulayacağınızı göstereceğiz.
Proxy listesinden sırayla seçerek:
Sıralı proxy rotasyonu, proxy’ler arasında eşit trafik dağılımı için uygundur. Küçük bir proxy havuzunuz varsa ve bazı proxy’leri diğerlerine göre aşırı kullanmaktan kaçınmak istiyorsanız kullanışlı olabilir.
Bununla birlikte, bu yöntemin sınırlaması, hedef sunucunun bir model algılayabilmesi ve proxy havuzunu yasaklayabilmesidir. Proxy’leri sırayla döndürmek için, listede doğru sırada döngü yapacaksınız. Şimdi bunu uygulayalım!
# pip3 install requests
import requests
from itertools import cycle
# read the proxies from the proxy list file
proxies_list = open("proxies_list.txt", "r").read().strip().split("\n")
# create a proxy generator
proxy_pool = cycle(proxies_list)
# iterate through the proxy list
for _ in range(4):
# get the next proxy from the generator
proxy = next(proxy_pool)
# prepare the proxy address
proxies = {
"http": f"http://{proxy}",
"https": f"http://{proxy}",
}
# send a request to the target site with the proxy
response = requests.get(
"https://httpbin.io/ip",
proxies=proxies,
)
if response.status_code != 200:
print(f"The request failed with {response.status_code}")
else:
print(response.text)
Proxy listesinden random bir şekilde seç:
Proxy rastgeleleştirme, hedef sunucunun isteğinizdeki bir kalıbı algılamasını önleyebilir. Bu yöntem, proxy’lerin havuzdan belirlenmemiş bir şekilde seçilmesini içerir. Ancak bir dezavantajı, bazı proxy’lerin diğerlerine kıyasla aşırı kullanılabilmesidir.
Proxy’leri rastgele hale getirmek için önceki kodu değiştirelim. Proxy listesini doğrudan for döngüsü içinde rastgele hale getirmek için Python’un yerleşik random.choice yöntemini kullanın:
# pip3 install requests
import requests
import random
# read the proxies from the proxy list file
proxies_list = open("proxies_list.txt", "r").read().strip().split("\n")
# iterate through the proxy list
for _ in range(4):
# choose a proxy at random from the list
random_proxy = random.choice(proxies_list)
# prepare the proxy address
proxies = {
"http": f"http://{random_proxy}",
"https": f"http://{random_proxy}",
}
# send a request to the target site with the proxy
response = requests.get(
"https://httpbin.io/ip",
proxies=proxies,
)
if response.status_code != 200:
print(f"The request failed with {response.status_code}")
else:
print(response.text)
Yukarıda ilettiğimiz iki yöntem ile istek atmak istediğiniz web sitelerinden veri çekebilir veya istek gönderebilirsiniz.
Farklı User-Agent’ler kullanın
Kodunuzun içerisinde farklı farklı User-agentler göndermeniz sizin için her zaman daha faydalı olacaktır. Aynı zamanda bunu otomatikleştirmek istiyorsanız fake-useragent gibi kütüphanelere göz atabilirsiniz.
Sonuç
Python sonuç olarak veri kazıma işlemleri için ideal bir çözüm. Ücretsiz kütüphaneler ile veri kazıma işlemlerinizi dahada efektif hale getirebilir ve sorunsuz şekilde çalıştırabilirsiniz.