Basit bir kripto fiyat takipçisi oluşturma rehberi

Yorumlar: 0

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:

  • Madeni para adı;
  • Ticker;
  • Fiyat;
  • 24 saatlik fiyat değişim yüzdesi.

Adım 1: Kütüphaneleri içe aktarma

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.

Adım 2: Proxy'leri ayarlama

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.

Adım 3: Proxy'leri döndürme

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.

Adım 4: Kripto verilerimizi elde etme ve ayrıştırma

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")

Adım 5: Site yapısını anlama

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.

1.png

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.

2.png

Jeton adını çıkarma

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.

3.png

coin_name_tag = row.find('p', class_='css-rkws3')
name = coin_name_tag.get_text() if coin_name_tag else "no name entry"

Senetleyiciyi çıkarma

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.

4.png

coin_ticker_tag = row.find('span', class_='css-1jj7b1a')
ticker = coin_ticker_tag.get_text() if coin_ticker_tag else "no ticker entry"

Fiyatın çıkarılması

"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.

5.png

coin_price_tag = row.find('div', class_='css-b1ilzc')
price = coin_price_tag.text.strip() if coin_price_tag else "no price entry"

Yüzde değişimi çıkarma

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.

6.png

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

Adım 6: Verileri CSV'ye aktarma

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)

Adım 7: İzleyiciyi çalıştırma

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

Tam kod

İş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)

Sonuçlar

Kripto fiyat izleyicimizin sonuçları aşağıda görüldüğü gibi "proxy_crypto_prices.csv" adlı bir CSV dosyasına kaydedilir:

7.jpg

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 yorumlar