Theo dõi dữ liệu giá cho tiền điện tử phổ biến có thể là thách thức do sự biến động cao của chúng. Tiến hành nghiên cứu kỹ lưỡng và được chuẩn bị để tận dụng các cơ hội lợi nhuận là điều cần thiết khi đối phó với tiền điện tử. Có được dữ liệu giá chính xác đôi khi có thể khó khăn. API thường được sử dụng cho mục đích này, nhưng đăng ký miễn phí thường đi kèm với những hạn chế.
Chúng tôi sẽ khám phá cách định kỳ cạo giá hiện tại của 150 loại tiền điện tử hàng đầu bằng cách sử dụng Python. Trình theo dõi giá tiền điện tử của chúng tôi sẽ thu thập dữ liệu sau:
Bước đầu tiên trong tập lệnh Python của chúng tôi là nhập các thư viện cần thiết. Chúng tôi sẽ sử dụng thư viện `Yêu cầu` và` BeautifulSoup` để gửi yêu cầu và trích xuất dữ liệu từ các tệp HTML, tương ứng.
import requests
from bs4 import BeautifulSoup
import csv
import time
import random
Chúng tôi cũng sẽ sử dụng `CSV` cho các hoạt động tệp CSV và` Time` và `Random` để kiểm soát tần suất cập nhật giá và xoay vòng các proxy, tương ứng.
Khi gửi yêu cầu mà không có proxy cao cấp, bạn có thể gặp phải các phản hồi "truy cập bị từ chối".
Bạn có thể thiết lập một proxy theo cách này:
proxy = {
"http": "http://Your_proxy_IP_Address:Your_proxy_port",
}
html = requests.get(url, proxies=proxy)
Đối với các proxy được xác thực, hãy sử dụng định dạng sau:
proxy = {
"http": "http://username:password@Your_proxy_IP_Address:Your_proxy_port",
}
html = requests.get(url, proxies=proxy)
Hãy nhớ thay thế cho bạn của bạn_proxy_ip_address và và của bạn_proxy_port, với địa chỉ proxy thực tế. Ngoài ra, thay thế giá trị của tên người dùng trên mạng và "mật khẩu trực tiếp bằng thông tin đăng nhập của bạn.
Các proxy xoay là một kỹ thuật rất quan trọng để loại bỏ thành công các trang web hiện đại vì chúng thường chặn hoặc hạn chế quyền truy cập vào bot và bộ phế liệu khi chúng phát hiện nhiều yêu cầu từ cùng một địa chỉ IP. Để thiết lập xoay proxy, hãy nhập thư viện ngẫu nhiên.
Tạo một danh sách các proxy cho vòng quay:
# Danh sách các proxy
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",
]
Di chuyển, chúng tôi xác định hàm get_proxy () để chọn ngẫu nhiên một proxy từ danh sách của chúng tôi cho mỗi yêu cầu.
# Phương pháp xoay các proxy của bạn
def get_proxy():
# Chọn một proxy ngẫu nhiên từ danh sách
proxy = random.choice(proxies)
return {
"http": f'http://{proxy}',
"https": f'http://{proxy}'
}
Hàm này trả về một từ điển với proxy đã chọn cho giao thức HTTP. Thiết lập này giúp chúng tôi xuất hiện dưới dạng nhiều người dùng hữu cơ vào trang web mà chúng tôi đang cào, nâng cao cơ hội bỏ qua các biện pháp chống xẹp.
Hàm get_crypto_prices () loại bỏ giá tiền điện tử từ Coindesk. Nó gửi yêu cầu GET đến trang web bằng hàm yêu cầu.get (), với các proxy xoay của chúng tôi được thông qua như một đối số. Chúng tôi chuyển trong văn bản của phản hồi và trình phân tích cú pháp "html.parser" cho hàm tạo đẹp.
def get_crypto_prices():
url = "https://crypto.com/price"
html = requests.get(url, proxies=get_proxy())
soup = BeautifulSoup(html.text, "html.parser")
Trước khi chúng tôi bắt đầu trích xuất dữ liệu, chúng tôi cần hiểu cấu trúc trang web. Chúng tôi có thể sử dụng các công cụ nhà phát triển của trình duyệt để kiểm tra HTML của trang web. Để truy cập các công cụ của nhà phát triển, bạn có thể nhấp chuột phải trên trang web và chọn kiểm tra trên mạng.
Sau đó, chúng tôi tìm thấy tất cả các thùng chứa giá trên trang bằng hàm find_all () của BeautifulSoup và bộ chọn CSS "TR", lớp _ = ' container. Dữ liệu này được lưu trữ trong một từ điển và sau đó được thêm vào danh sách giá.
Ở đây, chúng tôi sử dụng row.find ('p', lớp _ = 'css-rkws3') để xác định vị trí phần tử ‘p, với lớp" CSS-RKWS3 ". Sau đó, chúng tôi trích xuất văn bản và lưu trữ nó trong một biến tên tên của người dùng.
coin_name_tag = row.find('p', class_='css-rkws3')
name = coin_name_tag.get_text() if coin_name_tag else "no name entry"
Tương tự, chúng tôi sử dụng Row.find ("Span", Lớp _ = "CSS-1JJ7B1A") để xác định vị trí phần tử Span với lớp "CSS-1JJ7B1A". Phương thức get_text () trích xuất nội dung văn bản, cung cấp cho chúng tôi trình đánh dấu.
coin_ticker_tag = row.find('span', class_='css-1jj7b1a')
ticker = coin_ticker_tag.get_text() if coin_ticker_tag else "no ticker entry"
Chúng tôi định vị phần tử div Div với lớp "CSS-B1ILZC". Nội dung văn bản sau đó được tước và gán cho biến giá. Chúng tôi sử dụng một tuyên bố có điều kiện để xử lý các trường hợp trong đó phần tử có thể không có mặt.
coin_price_tag = row.find('div', class_='css-b1ilzc')
price = coin_price_tag.text.strip() if coin_price_tag else "no price entry"
Tương tự, chúng tôi xác định vị trí phần tử của P Pi với lớp "CSS-YYKU61" để trích xuất thay đổi tỷ lệ phần trăm. Nội dung văn bản bị tước, và một tuyên bố có điều kiện xử lý sự vắng mặt tiềm năng.
coin_percentage_tag = row.find('p', class_='css-yyku61')
percentage = coin_percentage_tag.text.strip() if coin_percentage_tag else "no percentage entry"
Đặt tất cả lại với nhau, chúng ta có một vòng lặp trông như thế này:
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
Hàm export_to_csv () được xác định để xuất dữ liệu bị xóa sang tệp CSV. Chúng tôi sử dụng thư viện CSV để viết dữ liệu trong danh sách giá vào tệp CSV được chỉ định.
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)
Trong phần chính của tập lệnh của chúng tôi, chúng tôi gọi hàm get_crypto_prices () để loại bỏ giá và xuất_to_csv () để xuất chúng sang tệp CSV. Sau đó chúng tôi đợi trong 5 phút (300) trước khi cập nhật lại giá. Điều này được thực hiện trong một vòng lặp vô hạn, vì vậy giá sẽ tiếp tục cập nhật cứ sau 5 phút cho đến khi chương trình dừng lại.
if __name__ == "__main__":
while True:
prices = get_crypto_prices()
export_to_csv(prices)
print("Prices updated. Waiting for the next update...")
time.sleep(300) # Cập nhật giá cứ sau 5 phút
Dưới đây là mã đầy đủ sẽ tích hợp tất cả các kỹ thuật và các bước mà chúng tôi đã đề cập, cung cấp một cách tiếp cận hợp lý để xây dựng bộ theo dõi giá tiền điện tử như chúng tôi đã làm trong dự án này.
import requests
from bs4 import BeautifulSoup
import csv
import time
import random
# Danh sách các proxy
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",
]
# Phương thức tùy chỉnh để xoay proxy
def get_proxy():
# Chọn một proxy ngẫu nhiên từ danh sách
proxy = random.choice(proxies)
# Trả lại từ điển với proxy cho giao thức 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) # Cập nhật giá cứ sau 5 phút (điều chỉnh khi cần thiết)
Kết quả của Trình theo dõi giá tiền điện tử của chúng tôi được lưu vào tệp CSV có tên là ProXy_Crypto_Prices.csv, như đã thấy dưới đây:
Cú pháp đơn giản của Python làm cho nó trở thành lựa chọn lý tưởng để xây dựng bộ theo dõi giá tiền điện tử tự động. Ngôn ngữ lập trình này tạo điều kiện cho việc bổ sung các tính năng mới và mở rộng khả năng của trình theo dõi. Ví dụ được cung cấp cho thấy cách tạo một cạp cơ bản có thể tự động cập nhật tỷ lệ tiền điện tử theo các khoảng thời gian đã chỉ định, thu thập dữ liệu thông qua proxy và lưu nó ở định dạng thân thiện với người dùng.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0