You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Binance P2P页面解析器返回空列表,如何修复?

Binance P2P页面解析返回空列表的解决办法

你的问题出在Binance P2P的交易数据是通过JavaScript动态渲染的,用requests直接请求得到的只是初始静态HTML,里面根本没有带css-1m1f8hn类的div元素,自然返回空列表。下面给两种可行的解决思路:

方法一:用Selenium模拟浏览器加载动态内容

Selenium可以模拟真实浏览器打开页面,等待JavaScript渲染完成后再解析内容,步骤如下:

  1. 先安装Selenium和对应浏览器的驱动(比如ChromeDriver)
  2. 修改代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup as bs

url = 'https://p2p.binance.com/ru/trade/all-payments/USDT?fiat=BYN'

def parser(url):
    result_list = []
    # 设置Chrome无头模式(可选,不打开浏览器窗口)
    options = webdriver.ChromeOptions()
    options.add_argument('--headless=new')
    options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36')
    
    driver = webdriver.Chrome(options=options)
    driver.get(url)
    
    try:
        # 等待目标元素加载完成,最多等10秒
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'css-1m1f8hn'))
        )
        # 获取渲染后的页面源码
        page_source = driver.page_source
        page = bs(page_source, 'html.parser')
        
        for item in page.find_all('div', class_="css-1m1f8hn"):
            result_list.append(item.text)
    finally:
        driver.quit()
    
    return result_list

print(parser(url))

方法二:直接调用Binance P2P官方API(更高效)

模拟浏览器效率较低,更优的方式是直接调用Binance的P2P数据接口,步骤如下:

  1. 通过浏览器开发者工具抓包,找到P2P数据的API接口(通常是POST请求)
  2. 构造请求参数,直接获取JSON格式的原始数据,示例代码:
import requests

url = 'https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
    'content-type': 'application/json'
}
# 请求参数,可根据需求调整(fiat是法币,asset是加密货币,tradeType是买/卖)
payload = {
    "page": 1,
    "rows": 10,
    "payTypes": [],
    "countries": [],
    "publisherType": None,
    "asset": "USDT",
    "fiat": "BYN",
    "tradeType": "BUY"
}

def parser():
    result_list = []
    response = requests.post(url, headers=headers, json=payload)
    data = response.json()
    
    if data.get('code') == '000000':
        for adv in data['data']:
            # 提取你需要的信息,比如价格、商家名称等
            price = adv['adv']['price']
            merchant = adv['advertiser']['nickName']
            result_list.append(f"商家:{merchant},价格:{price} BYN")
    return result_list

print(parser())

注意:API接口和参数可能会随Binance更新变化,若失效可重新抓包获取最新接口。

内容的提问来源于stack exchange,提问作者nbrinsdkf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:02:38