Panduan Membangun Pelacak Harga Crypto Sederhana

Komentar: 0

Data harga pelacakan untuk cryptocurrency populer dapat menjadi tantangan karena volatilitasnya yang tinggi. Melakukan penelitian menyeluruh dan bersiap untuk memanfaatkan peluang laba sangat penting ketika berhadapan dengan cryptocurrency. Memperoleh data harga yang akurat terkadang sulit. API umumnya digunakan untuk tujuan ini, tetapi langganan gratis sering kali datang dengan keterbatasan.

Kami akan mengeksplorasi cara mengikis secara berkala harga saat ini dari 150 cryptocurrency menggunakan Python. Pelacak Harga Cryptocurrency kami akan mengumpulkan data berikut:

  • Nama koin;
  • Jantung;
  • Harga;
  • Persentase perubahan harga 24 jam.

Langkah 1: Mengimpor Perpustakaan

Langkah pertama dalam skrip Python kami adalah mengimpor perpustakaan yang diperlukan. Kami akan menggunakan pustaka `permintaan` dan` cantik dan cantik untuk mengirim permintaan dan mengekstrak data dari file HTML, masing -masing.

import requests
from bs4 import BeautifulSoup
import csv
import time
import random

Kami juga akan menggunakan `CSV` untuk operasi file CSV dan` time` dan `acak` untuk mengendalikan frekuensi pembaruan harga dan rotasi proxy, masing -masing.

Langkah 2: Menyiapkan Proksi

Saat mengirim permintaan tanpa proxy premium, Anda mungkin menghadapi tanggapan "akses ditolak".

Anda dapat mengatur proxy dengan cara ini:

proxy = {
 "http": "http://Your_proxy_IP_Address:Your_proxy_port",
}
html = requests.get(url, proxies=proxy)

Untuk proxy yang diautentikasi, gunakan format berikut:

proxy = {
 "http": "http://username:password@Your_proxy_IP_Address:Your_proxy_port",
}
html = requests.get(url, proxies=proxy)

Ingatlah untuk mengganti "your_proxy_ip_address" dan "your_proxy_port" dengan alamat proxy yang sebenarnya. Juga, ganti nilai "nama pengguna" dan "kata sandi" dengan kredensial Anda.

Langkah 3: Proxy berputar

Proxy yang berputar adalah teknik yang sangat penting untuk berhasil mengikis situs web modern karena sering memblokir atau membatasi akses ke bot dan pencakar ketika mereka mendeteksi beberapa permintaan dari alamat IP yang sama. Untuk mengatur rotasi proxy, impor pustaka acak.

Buat daftar proksi untuk rotasi:

# Daftar proksi
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",
]

Pindah, kami mendefinisikan fungsi get_proxy () untuk secara acak memilih proxy dari daftar kami untuk setiap permintaan.

# metode untuk memutar proksi Anda
def get_proxy(): 
  # Pilih proxy acak dari daftar
  proxy = random.choice(proxies) 
  return {
            "http": f'http://{proxy}',
            "https": f'http://{proxy}'
    }

Fungsi ini mengembalikan kamus dengan proxy yang dipilih untuk protokol HTTP. Pengaturan ini membantu kami tampil sebagai beberapa pengguna organik ke situs web yang kami gosok, meningkatkan peluang kami melewati langkah-langkah anti-gulungan.

Langkah 4: Mendapatkan dan Parsing Data Crypto kami

Get_crypto_prices () Fungsi Mengikis Harga Cryptocurrency dari Coindesk. Ini mengirimkan permintaan GET ke situs web menggunakan fungsi requests.get (), dengan proxy rotating kami disahkan sebagai argumen. Kami masuk dalam teks respons dan parser "html.parser" ke konstruktor cantik.

def get_crypto_prices():
    url = "https://crypto.com/price"
    html = requests.get(url, proxies=get_proxy())
    soup = BeautifulSoup(html.text, "html.parser")

Langkah 5: Memahami Struktur Situs

Sebelum kita memulai ekstraksi data, kita perlu memahami struktur situs. Kita dapat menggunakan alat pengembang browser untuk memeriksa HTML halaman web. Untuk mengakses alat pengembang, Anda dapat mengklik kanan di halaman web dan memilih "Periksa".

1.png

Kami kemudian menemukan semua wadah harga di halaman menggunakan fungsi find_all () dari BeautifulSoup dan pemilih CSS "tr", kelas _ = 'css-1cxc880' dan mengekstrak nama koin, ticker, harga, dan perubahan persentase 24 jam untuk masing-masing untuk masing-masing wadah. Data ini disimpan dalam kamus dan kemudian ditambahkan ke daftar harga.

2.png

Mengekstrak nama koin

Di sini, kami menggunakan row.find ('p', kelas _ = 'css-rkws3') untuk menemukan elemen 'p' dengan kelas "css-rkws3". Kemudian, kami mengekstrak teks dan menyimpannya dalam variabel "nama".

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"

Mengekstraksi ticker

Demikian pula, kami menggunakan row.find ("span", kelas _ = "css-1jj7b1a") untuk menemukan elemen rentang dengan kelas "css-1jj7b1a". Metode get_text () mengekstrak konten teks, memberi kami ticker.

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"

Mengekstraksi harganya

Kami menemukan elemen "Div" dengan kelas "CSS-B1ILZC". Konten teks kemudian dilucuti dan ditugaskan ke variabel harga. Kami menggunakan pernyataan bersyarat untuk menangani kasus di mana elemen mungkin tidak ada.

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"

Mengekstraksi persentase perubahan

Demikian pula, kami menemukan elemen "P" dengan kelas "CSS-YYKU61" untuk mengekstraksi persentase perubahan. Konten teks dilucuti, dan pernyataan bersyarat menangani potensi ketidakhadiran.

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"

Menyatukan semuanya, kami memiliki loop untuk yang terlihat seperti ini:

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

Langkah 6: Mengekspor data ke CSV

Fungsi export_to_csv () didefinisikan untuk mengekspor data yang dikikis ke file CSV. Kami menggunakan pustaka CSV untuk menulis data dalam daftar harga ke file CSV yang ditentukan.

 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)

Langkah 7: Menjalankan pelacak

Di bagian utama dari skrip kami, kami memanggil fungsi get_crypto_prices () untuk mengikis harga dan export_to_csv () untuk mengekspornya ke file CSV. Kami kemudian menunggu 5 menit (300) sebelum memperbarui harga lagi. Ini dilakukan dalam loop tak terbatas, sehingga harga akan terus memperbarui setiap 5 menit sampai program dihentikan.

if __name__ == "__main__":
       while True:
           prices = get_crypto_prices()
           export_to_csv(prices)
           print("Prices updated. Waiting for the next update...")
           time.sleep(300)  # Perbarui Harga Setiap 5 Menit

Kode Lengkap

Berikut adalah kode lengkap yang akan mengintegrasikan semua teknik dan langkah yang telah kami bahas, memberikan pendekatan yang ramping untuk membangun pelacak harga crypto seperti yang telah kami lakukan dalam proyek ini.

import requests
from bs4 import BeautifulSoup
import csv
import time
import random

# Daftar proksi
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",
]

# Metode khusus untuk memutar proxy
def get_proxy():
    # Pilih proxy acak dari daftar
    proxy = random.choice(proxies)
    # Kembalikan kamus dengan proxy untuk protokol http
    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)  # Perbarui harga setiap 5 menit (sesuaikan sesuai kebutuhan)

Hasil

Hasil pelacak harga crypto kami disimpan ke file CSV yang disebut "proxy_crypto_prices.csv" seperti yang terlihat di bawah ini:

7.jpg

Sintaksis langsung Python menjadikannya pilihan ideal untuk membangun pelacak harga cryptocurrency otomatis. Bahasa pemrograman ini memfasilitasi penambahan fitur baru dan perluasan kemampuan pelacak. Contoh yang disediakan menunjukkan cara membuat scraper dasar yang secara otomatis dapat memperbarui tingkat cryptocurrency pada interval tertentu, mengumpulkan data melalui proxy, dan menyimpannya dalam format yang ramah pengguna.

Komentar:

0 komentar