Popüler kripto paraların fiyat verilerini takip etmek, yüksek oynaklıkları nedeniyle zor olabilir. Kripto paralarla uğraşırken kapsamlı bir araştırma yapmak ve kâr fırsatlarından yararlanmaya hazır olmak çok önemlidir. Doğru fiyatlandırma verilerini elde etmek bazen zor olabilir. API'ler bu amaçla yaygın olarak kullanılır, ancak ücretsiz abonelikler genellikle sınırlamalarla birlikte gelir.
Python kullanarak en iyi 150 kripto para biriminin güncel fiyatlarını periyodik olarak nasıl kazıyacağımızı keşfedeceğiz. Kripto para birimi fiyat izleyicimiz aşağıdaki verileri toplayacaktır:
Python betiğimizin ilk adımı gerekli kütüphaneleri içe aktarmaktır. İstek göndermek ve HTML dosyalarından veri çıkarmak için sırasıyla `requests` ve `BeautifulSoup` kütüphanelerini kullanacağız.
import requests
from bs4 import BeautifulSoup
import csv
import time
import random
Ayrıca CSV dosyası işlemleri için `csv` ve fiyat güncellemelerinin sıklığını ve vekillerin rotasyonunu kontrol etmek için sırasıyla `time` ve `random` kullanacağız.
Premium proxy olmadan istek gönderirken "Erişim Reddedildi" yanıtlarıyla karşılaşabilirsiniz.
Bu şekilde bir proxy kurabilirsiniz:
proxy = {
"http": "http://Your_proxy_IP_Address:Your_proxy_port",
}
html = requests.get(url, proxies=proxy)
Kimliği doğrulanmış proxy'ler için aşağıdaki biçimi kullanın:
proxy = {
"http": "http://username:password@Your_proxy_IP_Address:Your_proxy_port",
}
html = requests.get(url, proxies=proxy)
"Your_proxy_IP_Address" ve "Your_proxy_port" değerlerini gerçek proxy adresiyle değiştirmeyi unutmayın. Ayrıca, "kullanıcı adı" ve "parola" değerlerini kimlik bilgilerinizle değiştirin.
Proxy'leri döndürmek, modern web sitelerini başarılı bir şekilde kazımak için çok önemli bir tekniktir, çünkü aynı IP adresinden birden fazla istek tespit ettiklerinde genellikle botlara ve kazıyıcılara erişimi engeller veya kısıtlarlar. Proxy rotasyonunu ayarlamak için random kütüphanesini içe aktarın.
Rotasyon için bir vekil listesi oluşturun:
# Vekillerin listesi
proxies = [
"username:password@Your_proxy_IP_Address:Your_proxy_port1",
"username:password@Your_proxy_IP_Address:Your_proxy_port2",
"username:password@Your_proxy_IP_Address:Your_proxy_port3",
"username:password@Your_proxy_IP_Address:Your_proxy_port4",
"username:password@Your_proxy_IP_Address:Your_proxy_port5",
]
Devam edersek, her istek için listemizden rastgele bir proxy seçmek üzere bir get_proxy() işlevi tanımlarız.
# proxy'lerinizi döndürmek için yöntem
def get_proxy():
# Listeden rastgele bir proxy seçin
proxy = random.choice(proxies)
return {
"http": f'http://{proxy}',
"https": f'http://{proxy}'
}
Bu fonksiyon HTTP protokolü için seçilen proxy ile bir sözlük döndürür. Bu kurulum, kazıma yaptığımız web sitesinde birden fazla organik kullanıcı olarak görünmemize yardımcı olur ve kazıma önleme tedbirlerini atlama şansımızı artırır.
get_crypto_prices() fonksiyonu Coindesk'ten kripto para fiyatlarını kazır. Dönen proxy'lerimizin argüman olarak geçtiği requests.get() işlevini kullanarak web sitesine bir GET isteği gönderir. BeautifulSoup yapıcısına yanıt metnini ve "html.parser" ayrıştırıcısını aktarıyoruz.
def get_crypto_prices():
url = "https://crypto.com/price"
html = requests.get(url, proxies=get_proxy())
soup = BeautifulSoup(html.text, "html.parser")
Veri çıkarmaya başlamadan önce site yapısını anlamamız gerekir. Web sayfasının HTML'sini incelemek için tarayıcının Geliştirici Araçlarını kullanabiliriz. Geliştirici Araçlarına erişmek için web sayfasına sağ tıklayabilir ve "İncele "yi seçebilirsiniz.
Daha sonra BeautifulSoup'un find_all() işlevini ve CSS seçicisi "tr", class_='css-1cxc880'i kullanarak sayfadaki tüm fiyat konteynerlerini bulur ve her konteyner için coin adını, ticker'ını, fiyatını ve 24 saatlik yüzde değişimini çıkarırız. Bu veriler bir sözlükte saklanır ve ardından fiyatlar listesine eklenir.
Burada, "css-rkws3" sınıfına sahip 'p' öğesini bulmak için row.find('p', class_='css-rkws3') kullanıyoruz. Ardından, metni çıkarır ve bir "name" değişkeninde saklarız.
coin_name_tag = row.find('p', class_='css-rkws3')
name = coin_name_tag.get_text() if coin_name_tag else "no name entry"
Benzer şekilde, "css-1jj7b1a" sınıfına sahip span öğesini bulmak için row.find("span", class_="css-1jj7b1a") yöntemini kullanırız. get_text() metodu metin içeriğini çıkararak bize ticker'ı sağlar.
coin_ticker_tag = row.find('span', class_='css-1jj7b1a')
ticker = coin_ticker_tag.get_text() if coin_ticker_tag else "no ticker entry"
"div" öğesini "css-b1ilzc" sınıfı ile konumlandırıyoruz. Metin içeriği daha sonra çıkarılır ve fiyat değişkenine atanır. Öğenin mevcut olmayabileceği durumları ele almak için bir koşullu ifade kullanırız.
coin_price_tag = row.find('div', class_='css-b1ilzc')
price = coin_price_tag.text.strip() if coin_price_tag else "no price entry"
Benzer şekilde, yüzde değişimini çıkarmak için "css-yyku61" sınıfına sahip "p" öğesini buluruz. Metin içeriği çıkarılır ve bir koşullu ifade olası yokluğu ele alır.
coin_percentage_tag = row.find('p', class_='css-yyku61')
percentage = coin_percentage_tag.text.strip() if coin_percentage_tag else "no percentage entry"
Hepsini bir araya getirdiğimizde, aşağıdaki gibi görünen bir for döngüsüne sahip oluruz:
for row in price_rows:
coin_name_tag = row.find('p', class_='css-rkws3')
name = coin_name_tag.get_text() if coin_name_tag else "no name entry"
coin_ticker_tag = row.find('span', class_='css-1jj7b1a')
ticker = coin_ticker_tag.get_text() if coin_ticker_tag else "no ticker entry"
coin_price_tag = row.find('div', class_='css-b1ilzc')
price = coin_price_tag.text.strip() if coin_price_tag else "no price entry"
coin_percentage_tag = row.find('p', class_='css-yyku61')
percentage = coin_percentage_tag.text.strip() if coin_percentage_tag else "no percentage entry"
prices.append({
"Coin": name,
"Ticker": ticker,
"Price": price,
"24hr-Percentage": percentage
})
return prices
export_to_csv() fonksiyonu, kazınan verileri bir CSV dosyasına aktarmak için tanımlanmıştır. Fiyat listesindeki verileri belirtilen CSV dosyasına yazmak için CSV kütüphanesini kullanırız.
def export_to_csv(prices, filename="proxy_crypto_prices.csv"):
with open(filename, "w", newline="") as file:
fieldnames = ["Coin", "Ticker", "Price", "24hr-Percentage"]
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(prices)
Scriptimizin ana bölümünde, fiyatları kazımak için get_crypto_prices() fonksiyonunu ve bunları bir CSV dosyasına aktarmak için export_to_csv() fonksiyonunu çağırıyoruz. Daha sonra fiyatları tekrar güncellemeden önce 5 dakika (300) bekliyoruz. Bu sonsuz bir döngü içinde yapılır, böylece fiyatlar program durdurulana kadar her 5 dakikada bir güncellenmeye devam eder.
if __name__ == "__main__":
while True:
prices = get_crypto_prices()
export_to_csv(prices)
print("Prices updated. Waiting for the next update...")
time.sleep(300) # Fiyatları her 5 dakikada bir güncelleyin
İşte ele aldığımız tüm teknikleri ve adımları entegre edecek ve bu projede yaptığımız gibi bir kripto fiyat izleyici oluşturmak için modern bir yaklaşım sağlayacak tam kod.
import requests
from bs4 import BeautifulSoup
import csv
import time
import random
# Vekillerin listesi
proxies = [
"username:password@Your_proxy_IP_Address:Your_proxy_port1",
"username:password@Your_proxy_IP_Address:Your_proxy_port2",
"username:password@Your_proxy_IP_Address:Your_proxy_port3",
"username:password@Your_proxy_IP_Address:Your_proxy_port4",
"username:password@Your_proxy_IP_Address:Your_proxy_port5",
]
# Proxy'leri döndürmek için özel yöntem
def get_proxy():
# Listeden rastgele bir proxy seçin
proxy = random.choice(proxies)
# Http protokolü için proxy içeren bir sözlük döndürür
return {"http": f'http://{proxy}',
"https": f'http://{proxy}'
}
def get_crypto_prices():
url = "https://crypto.com/price"
html = requests.get(url, proxies=get_proxy())
print(html.status_code)
soup = BeautifulSoup(html.content, "html.parser")
price_rows = soup.find_all('tr', class_='css-1cxc880')
prices = []
for row in price_rows:
coin_name_tag = row.find('p', class_='css-rkws3')
name = coin_name_tag.get_text() if coin_name_tag else "no name entry"
coin_ticker_tag = row.find('span', class_='css-1jj7b1a')
ticker = coin_ticker_tag.get_text() if coin_ticker_tag else "no ticker entry"
coin_price_tag = row.find('div', class_='css-b1ilzc')
price = coin_price_tag.text.strip() if coin_price_tag else "no price entry"
coin_percentage_tag = row.find('p', class_='css-yyku61')
percentage = coin_percentage_tag.text.strip() if coin_percentage_tag else "no percentage entry"
prices.append({
"Coin": name,
"Ticker": ticker,
"Price": price,
"24hr-Percentage": percentage
})
return prices
def export_to_csv(prices, filename="proxy_crypto_prices.csv"):
with open(filename, "w", newline="") as file:
fieldnames = ["Coin", "Ticker", "Price", "24hr-Percentage"]
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(prices)
if __name__ == "__main__":
while True:
prices = get_crypto_prices()
export_to_csv(prices)
print("Prices updated. Waiting for the next update...")
time.sleep(300) # Fiyatları her 5 dakikada bir güncelleyin (gerektiği gibi ayarlayın)
Kripto fiyat izleyicimizin sonuçları aşağıda görüldüğü gibi "proxy_crypto_prices.csv" adlı bir CSV dosyasına kaydedilir:
Python'un basit söz dizimi, onu otomatik bir kripto para birimi fiyat takipçisi oluşturmak için ideal seçim haline getirir. Bu programlama dili, yeni özelliklerin eklenmesini ve takipçinin yeteneklerinin genişletilmesini kolaylaştırır. Verilen örnek, kripto para fiyatlarını belirli aralıklarla otomatik olarak güncelleyebilen, bir proxy aracılığıyla veri toplayabilen ve bunları kullanıcı dostu bir formatta kaydedebilen temel bir kazıyıcının nasıl oluşturulacağını göstermektedir.
Yorumlar: 0