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

requests.get()异常,Binance P2P页面爬取元素失败如何解决?

修复Binance P2P页面爬取无法获取目标元素的问题

问题根源

  1. Binance P2P的核心交易数据是通过JavaScript动态渲染加载的,requests.get()只能抓取页面的静态HTML源码,无法获取JS执行后生成的动态内容,因此用BeautifulSoup找不到目标元素。
  2. 原代码存在两处语法错误:
    • from lxml import lxml 写法错误,正确应为 import lxml
    • BeautifulSoup(response.content, 'html') 解析器参数无效,需改为 'lxml' 或 'html.parser'

可行解决方案

方案一:用Selenium获取动态渲染页面

Selenium可模拟浏览器加载页面,等待JS渲染完成后再抓取源码:

# 安装依赖
!pip install bs4 selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

# 配置无头浏览器
chrome_options = Options()
chrome_options.add_argument('--headless=new')
chrome_options.add_argument('--disable-gpu')

# 初始化浏览器并访问目标页面
driver = webdriver.Chrome(options=chrome_options)
url = 'https://p2p.binance.com/en/trade/all-payments/USDT?fiat=AUD'
driver.get(url)
# 等待页面加载完成(可根据网络情况调整等待时长)
driver.implicitly_wait(10)

# 获取渲染后的完整页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'lxml')

# 查找目标元素
target_element = soup.find('div', attrs={'class': 'css-1m1f8hn'})
print(target_element)

# 关闭浏览器
driver.quit()

方案二:调用Binance官方P2P API(推荐)

直接调用官方API是更高效稳定的方式,无需处理动态渲染逻辑:

import requests

url = 'https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search'
headers = {
    'Content-Type': 'application/json',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}
# 请求参数可按需调整(法币、加密货币、交易类型等)
payload = {
    "page": 1,
    "rows": 10,
    "payTypes": [],
    "countries": [],
    "publisherType": None,
    "asset": "USDT",
    "fiat": "AUD",
    "tradeType": "BUY"  # 可选值:BUY/SELL
}

response = requests.post(url, json=payload, headers=headers)
data = response.json()

# 输出交易数据示例
for item in data['data']:
    print(f"商家昵称: {item['advertiser']['nickName']}")
    print(f"交易价格: {item['adv']['price']}")
    print(f"支持支付方式: {[pay['identifier'] for pay in item['adv']['tradeMethods']]}")
    print("---")

方案三:修正原静态爬取代码(仅获取静态元素)

如果只是修正原代码的语法错误,可调整如下,但此方案无法获取动态交易数据:

!pip install bs4 lxml
import requests
from bs4 import BeautifulSoup

url = 'https://p2p.binance.com/en/trade/all-payments/USDT?fiat=AUD'
response = requests.get(url)
# 使用正确的解析器
soup = BeautifulSoup(response.content, 'lxml')
# 尝试查找静态元素
static_element = soup.find('div', attrs={'class': 'css-1m1f8hn'})
print(static_element)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:20:43