使用Python爬取Binance、Kucoin P2P价格失败,求解决方法及工具推荐
问题原因及解决方案
为什么爬不到数据?
主要有三个核心原因:
- 动态内容渲染:Binance和Kucoin的P2P价格数据是通过JavaScript动态加载的,
requests.get()只能获取页面的初始静态HTML,无法拿到JS渲染后的实际数据,所以BeautifulSoup自然找不到目标元素。你参考的教程网站是静态页面,所有内容直接写在HTML里,所以能直接爬。 - 反爬拦截:交易所网站普遍有反爬机制,比如检查请求的
User-Agent是否为真实浏览器标识,或者限制频繁请求。直接用requests发起请求可能被拦截,返回的页面没有有效数据。 - 动态类名:页面元素的类名可能是前端框架(如React、Vue)动态生成的,刷新页面后类名会变化。你通过浏览器审查元素看到的
css-1m1f8hn,在requests获取的静态HTML里根本不存在。
解决办法
改用支持JS渲染的工具
用Selenium或Playwright模拟真实浏览器加载页面,等JS渲染完成后再提取数据。比如用Playwright的示例代码:from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("https://p2p.binance.com/es/trade/all-payments/USDT?fiat=ARS") page.wait_for_selector("div.css-1m1f8hn") # 等待目标元素加载 elements = page.query_selector_all("div.css-1m1f8hn") for elem in elements: print(elem.text_content()) browser.close()调用官方API(推荐)
交易所都提供公开的P2P/OTC API接口,直接调用API比爬页面更稳定、高效,还能避免反爬问题。API返回JSON格式数据,解析起来更简单。优化请求头绕过反爬
如果坚持用requests,可以添加真实的浏览器User-Agent和其他请求头,模拟浏览器请求:headers = { "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" } page = requests.get(url, headers=headers)但这种方法对动态渲染的页面依然无效,只能解决部分反爬问题。
其他可用的Web Scraper工具
- Selenium:老牌浏览器自动化工具,支持主流浏览器,文档丰富。
- Playwright:微软推出的新一代自动化工具,API更简洁,支持多浏览器,内置等待机制,处理动态页面更省心。
- Scrapy + Splash:Scrapy是Python主流爬虫框架,结合Splash服务可以渲染JS页面,适合大规模爬虫项目。
- Pyppeteer:Chrome官方无头浏览器工具的Python封装,轻量级,操作简单。
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

