我正在嘗試從Binance獲取價格資料。
因此,當我嘗試實作它時,我會通過 HTML div 和類來逐步實作它。
這是示例:
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
user_agent = UserAgent(verify_ssl=False)
headers = {'user-agent': user_agent.random}
url = 'https://p2p.binance.com/ru/trade/all-payments/USDT?fiat=RUB'
res = requests.get(url, headers=headers).text
soup = BeautifulSoup(res, 'lxml')
lst = soup.find('div', class_="css-186r813")
underlst = lst.find('div', class_="css-cjwhpx")
print(underlst)
但突然它回傳的不是 CSS 代碼,而是帶有標簽樣式的 HTML 代碼。
這是輸出:
<div class="css-cjwhpx"><style data-emotion-css="62wjvl">.css-62wjvl{box-sizing:border-box;margin:0;min-width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;padding-top:80px;padding-bottom:80px;}</style><div class="css-62wjvl"><style data-emotion-css="14f6ssc">.css-14f6ssc{box-sizing:border-box;margin:0;min-width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:30px;height:30px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:48px;height:48px;margin:auto;}</style><div class="css-14f6ssc"><style data-emotion-css="2bc2yz animation-hqgv56">.css-2bc2yz{box-sizing:border-box;margin:0;min-width:0;background-color:#F0B90B;height:100%;width:3px;-webkit-animation:animation-hqgv56 1.2s infinite ease-in-out;animation:animation-hqgv56 1.2s infinite ease-in-out;-webkit-animation-delay:-0.3s;animation-delay:-0.3s;}@-webkit-keyframes animation-hqgv56{0%,40%,100%{-webkit-transform:scaleY(0.4);-ms-transform:scaleY(0.4);transform:scaleY(0.4);}20%{-webkit-transform:scaleY(1.0);-ms-transform:scaleY(1.0);transform:scaleY(1.0);}}@keyframes animation-hqgv56{0%,40%,100%{-webkit-transform:scaleY(0.4);-ms-transform:scaleY(0.4);transform:scaleY(0.4);}20%{-webkit-transform:scaleY(1.0);-ms-transform:scaleY(1.0);transform:scaleY(1.0);}}</style><div class="css-2bc2yz"></div><style data-emotion-css="i6pav4 animation-hqgv56">.css-i6pav4{box-sizing:border-box;margin:0;min-width:0;background-color:#F0B90B;height:100%;width:3px;-webkit-animation:animation-hqgv56 1.2s infinite ease-in-out;animation:animation-hqgv56 1.2s infinite ease-in-out;-webkit-animation-delay:-0.2s;animation-delay:-0.2s;}@-webkit-keyframes animation-hqgv56{0%,40%,100%{-webkit-transform:scaleY(0.4);-ms-transform:scaleY(0.4);transform:scaleY(0.4);}20%{-webkit-transform:scaleY(1.0);-ms-transform:scaleY(1.0);transform:scaleY(1.0);}}@keyframes animation-hqgv56{0%,40%,100%{-webkit-transform:scaleY(0.4);-ms-transform:scaleY(0.4);transform:scaleY(0.4);}20%{-webkit-transform:scaleY(1.0);-ms-transform:scaleY(1.0);transform:scaleY(1.0);}}</style><div class="css-i6pav4"></div><style data-emotion-css="o1uf9l animation-hqgv56">.css-o1uf9l{box-sizing:border-box;margin:0;min-width:0;background-color:#F0B90B;height:100%;width:3px;-webkit-animation:animation-hqgv56 1.2s infinite ease-in-out;animation:animation-hqgv56 1.2s infinite ease-in-out;-webkit-animation-delay:-0.1s;animation-delay:-0.1s;}@-webkit-keyframes animation-hqgv56{0%,40%,100%{-webkit-transform:scaleY(0.4);-ms-transform:scaleY(0.4);transform:scaleY(0.4);}20%{-webkit-transform:scaleY(1.0);-ms-transform:scaleY(1.0);transform:scaleY(1.0);}}@keyframes animation-hqgv56{0%,40%,100%{-webkit-transform:scaleY(0.4);-ms-transform:scaleY(0.4);transform:scaleY(0.4);}20%{-webkit-transform:scaleY(1.0);-ms-transform:scaleY(1.0);transform:scaleY(1.0);}}</style><div class="css-o1uf9l"></div><style data-emotion-css="14jhrrk animation-hqgv56">.css-14jhrrk{box-sizing:border-box;margin:0;min-width:0;background-color:#F0B90B;height:100%;width:3px;-webkit-animation:animation-hqgv56 1.2s infinite ease-in-out;animation:animation-hqgv56 1.2s infinite ease-in-out;-webkit-animation-delay:-0s;animation-delay:-0s;}@-webkit-keyframes animation-hqgv56{0%,40%,100%{-webkit-transform:scaleY(0.4);-ms-transform:scaleY(0.4);transform:scaleY(0.4);}20%{-webkit-transform:scaleY(1.0);-ms-transform:scaleY(1.0);transform:scaleY(1.0);}}@keyframes animation-hqgv56{0%,40%,100%{-webkit-transform:scaleY(0.4);-ms-transform:scaleY(0.4);transform:scaleY(0.4);}20%{-webkit-transform:scaleY(1.0);-ms-transform:scaleY(1.0);transform:scaleY(1.0);}}</style><div class="css-14jhrrk"></div></div></div></div>
但我期待其余的 HTML 代碼(我的意思是我在檢查 HTML 代碼時看到的其他 div)。
你能告訴我,我做錯了什么嗎?
uj5u.com熱心網友回復:
以下是獲取該資料的一種方法 - 基于檢查開發工具并查看正在訪問的 API 及其回應:
import requests
import pandas as pd
s = requests.Session()
headers = {
'content-type': 'application/json',
'accept-language': 'en-US,en;q=0.9',
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
payload = '{"proMerchantAds":false,"page":1,"rows":10,"payTypes":[],"countries":[],"publisherType":null,"asset":"USDT","fiat":"RUB","tradeType":"BUY"}'
url = 'https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search'
s.headers.update(headers)
r = s.post(url, data=payload)
df = pd.json_normalize(r.json()['data'])
print(df)
這在終端回傳:
adv.advNo adv.classify adv.tradeType adv.asset adv.fiatUnit adv.advStatus adv.priceType adv.priceFloatingRatio adv.rateFloatingRatio adv.currencyRate adv.price adv.initAmount adv.surplusAmount adv.amountAfterEditing adv.maxSingleTransAmount adv.minSingleTransAmount adv.buyerKycLimit adv.buyerRegDaysLimit adv.buyerBtcPositionLimit adv.remarks adv.autoReplyMsg adv.payTimeLimit adv.tradeMethods adv.userTradeCountFilterTime adv.userBuyTradeCountMin adv.userBuyTradeCountMax adv.userSellTradeCountMin adv.userSellTradeCountMax adv.userAllTradeCountMin adv.userAllTradeCountMax adv.userTradeCompleteRateFilterTime adv.userTradeCompleteCountMin adv.userTradeCompleteRateMin adv.userTradeVolumeFilterTime adv.userTradeType adv.userTradeVolumeMin adv.userTradeVolumeMax adv.userTradeVolumeAsset adv.createTime adv.advUpdateTime adv.fiatVo adv.assetVo adv.advVisibleRet adv.assetLogo adv.assetScale adv.fiatScale adv.priceScale adv.fiatSymbol adv.isTradable adv.dynamicMaxSingleTransAmount adv.minSingleTransQuantity adv.maxSingleTransQuantity adv.dynamicMaxSingleTransQuantity adv.tradableQuantity adv.commissionRate adv.tradeMethodCommissionRates adv.launchCountry adv.abnormalStatusList adv.closeReason advertiser.userNo advertiser.realName advertiser.nickName advertiser.margin advertiser.marginUnit advertiser.orderCount advertiser.monthOrderCount advertiser.monthFinishRate advertiser.advConfirmTime advertiser.email advertiser.registrationTime advertiser.mobile advertiser.userType advertiser.tagIconUrls advertiser.userGrade advertiser.userIdentity advertiser.proMerchant advertiser.isBlocked
0 11403393152657350656 mass SELL USDT RUB None None None None None 59.69 None 299.57 None 5001.00 5000.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Payeer', 'iconUrlColor': None, 'tradeMethodName': 'Payeer', 'tradeMethodShortName': 'Payeer', 'tradeMethodBgColor': '#03A9F4'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 5001.00 83.76 83.78 83.78 299.27 0.00100000 [] None None None s987ef83f7c373b2d939960f36abde794 None Kripto-Monah None None None 427 0.982 None None None None user [] 2 None None
1 11384733631785136128 mass SELL USDT RUB None None None None None 59.97 None 70.13 None 5000.00 3000.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Payeer', 'iconUrlColor': None, 'tradeMethodName': 'Payeer', 'tradeMethodShortName': 'Payeer', 'tradeMethodBgColor': '#03A9F4'}, {'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Advcash', 'iconUrlColor': None, 'tradeMethodName': 'Advcash', 'tradeMethodShortName': 'Advcash', 'tradeMethodBgColor': '#00B27A'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 4201.49 50.02 83.37 70.05 70.05 0.00100000 [] None None None s6ed17a60bae438359be89c30fb44e546 None small-bank None None None 362 1.000 None None None None user [] 2 None None
2 11404898262677299200 mass SELL USDT RUB None None None None None 60.00 None 1626.84 None 30000.00 3000.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Payeer', 'iconUrlColor': None, 'tradeMethodName': 'Payeer', 'tradeMethodShortName': 'Payeer', 'tradeMethodBgColor': '#03A9F4'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 30000.00 50.00 500.00 500.00 1625.21 0.00100000 [] None None None sa3a5876f166e3283b000717ed3e5193a None solo None None None 103 1.000 None None None None user [] 2 None None
3 11405436724645101568 mass SELL USDT RUB None None None None None 60.07 None 88.69 None 3000.00 500.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'RUBfiatbalance', 'iconUrlColor': None, 'tradeMethodName': 'BinancePay (RUB)', 'tradeMethodShortName': 'RUB fiat balance', 'tradeMethodBgColor': '#D89F00'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 3000.00 8.32 49.94 49.94 88.60 0.00100000 [] None None None s670441da55ca382ba2562649864e1d7a None Goodprice1 None None None 8 1.000 None None None None user [] 2 None None
4 11405109823435702272 mass SELL USDT RUB None None None None None 60.18 None 372.56 None 870000.00 3000.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'RUBfiatbalance', 'iconUrlColor': None, 'tradeMethodName': 'BinancePay (RUB)', 'tradeMethodShortName': 'RUB fiat balance', 'tradeMethodBgColor': '#D89F00'}, {'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Payeer', 'iconUrlColor': None, 'tradeMethodName': 'Payeer', 'tradeMethodShortName': 'Payeer', 'tradeMethodBgColor': '#03A9F4'}, {'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Advcash', 'iconUrlColor': None, 'tradeMethodName': 'Advcash', 'tradeMethodShortName': 'Advcash', 'tradeMethodBgColor': '#00B27A'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 22398.26 49.85 14456.63 372.18 372.18 0.00100000 [] None None None s9d93b43f0c4d3978bebe853f492fe1a4 None AirSeller None None None 342 0.998 None None None None user [] 2 None None
5 11405456453578379264 mass SELL USDT RUB None None None None None 60.20 None 162.08 None 4000.00 500.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'RUBfiatbalance', 'iconUrlColor': None, 'tradeMethodName': 'BinancePay (RUB)', 'tradeMethodShortName': 'RUB fiat balance', 'tradeMethodBgColor': '#D89F00'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 4000.00 8.30 66.44 66.44 161.91 0.00100000 [] None None None sa9086873626d3c15ad73b6272c83e6a1 None Kurbanov None None None 165 1.000 None None None None user [] 2 None None
6 11403640005146021888 mass SELL USDT RUB None None None None None 60.23 None 225.99 None 15000.00 500.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Payeer', 'iconUrlColor': None, 'tradeMethodName': 'Payeer', 'tradeMethodShortName': 'Payeer', 'tradeMethodBgColor': '#03A9F4'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 13597.77 8.30 249.04 225.76 225.76 0.00100000 [] None None None s6a454028703b3d28ab1cbc882fe30609 None OVN_SKS None None None 79 0.964 None None None None user [] 2 None None
7 11404121800352935936 mass SELL USDT RUB None None None None None 60.25 None 375.92 None 870000.00 1000.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Payeer', 'iconUrlColor': None, 'tradeMethodName': 'Payeer', 'tradeMethodShortName': 'Payeer', 'tradeMethodBgColor': '#03A9F4'}, {'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'RUBfiatbalance', 'iconUrlColor': None, 'tradeMethodName': 'BinancePay (RUB)', 'tradeMethodShortName': 'RUB fiat balance', 'tradeMethodBgColor': '#D89F00'}, {'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'Advcash', 'iconUrlColor': None, 'tradeMethodName': 'Advcash', 'tradeMethodShortName': 'Advcash', 'tradeMethodBgColor': '#00B27A'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 22626.55 16.59 14439.83 375.54 375.54 0.00100000 [] None None None sc0fc469822e13c05adf72829988742d9 None ILKABU None None None 137 0.993 None None None None user [] 2 None None
8 11403137594511839232 mass SELL USDT RUB None None None None None 60.27 None 781.46 None 40000.00 10000.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'RUBfiatbalance', 'iconUrlColor': None, 'tradeMethodName': 'BinancePay (RUB)', 'tradeMethodShortName': 'RUB fiat balance', 'tradeMethodBgColor': '#D89F00'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 40000.00 165.92 663.68 663.68 780.67 0.00100000 [] None None None sa4e26204141639948cd02fdb14389606 None valeriya_obmen None None None 241 1.000 None None None None user [] 2 None None
9 11393521586032951296 mass SELL USDT RUB None None None None None 60.32 None 842.67 None 150000.00 2000.00 None None None None None [{'payId': None, 'payMethodId': '', 'payType': None, 'payAccount': None, 'payBank': None, 'paySubBank': None, 'identifier': 'RUBfiatbalance', 'iconUrlColor': None, 'tradeMethodName': 'BinancePay (RUB)', 'tradeMethodShortName': 'RUB fiat balance', 'tradeMethodBgColor': '#D89F00'}] None None None None None None None None None None None None None None None None None None None None None 2 2 2 ? True 50779.07 33.15 2486.73 841.82 841.82 0.00100000 [] None None None sd01eb1e9b3523bf1977dd3411f1e5c1e None Julia_P2P_ None None None 100 1.000 None None None None user [] 2 None None
這些資料非常廣泛:您想深入了解該 json 物件/資料框,然后對其進行切片和切塊以僅獲取您需要的內容。
Requests 的相關檔案:?https://requests.readthedocs.io/en/latest/
此外,熊貓的相關檔案:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512214.html
上一篇:如何將此存盤在資料庫列中的JSON轉換為包含列和行的表?
下一篇:正則運算式未正確評估字串
