Python request.get()未按预期工作



我正试图从https://p2p.binance.com/en/trade/all-payments/USDT?fiat=AUD

!pip install bs4
from lxml import lxml 
import requests
from bs4 import BeautifulSoup
url = 'https://p2p.binance.com/en/trade/all-payments/USDT?fiat=AUD'
requests.get(url)
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html')

在之后

soup.find('div',attrs={'class' : 'css-1m1f8hn'})没有显示任何内容。这只是我想刮的许多物品之一。

我该怎么解决?

您应该将find_allclass_参数一起使用:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-按css类

试试这个:

import requests
from pprint import pprint
link = '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/103.0.0.0 Safari/537.36',
}
payload = {"proMerchantAds":False,"page":1,"rows":10,"payTypes":[],"countries":[],"publisherType":None,"asset":"USDT","fiat":"AUD","tradeType":"BUY"}
with requests.Session() as s:
s.headers.update(headers)
res = s.post(link,json=payload)
for item in res.json()['data']:
print(item['adv']['price'])

打印:

1.59
1.60
1.61
1.62
1.63
1.63
1.64
1.64
1.66
1.66

要完全废弃这个元素并不困难,因为它在页面加载后由js加载。这意味着在您通过get请求收到的html页面中不会有目标元素。

你可以这样查看:

url = 'https://p2p.binance.com/en/trade/all-payments/USDT?fiat=AUD'
response = requests.get(url)
open('test.html', 'wb').write(responce.content)

然后用浏览器打开html来查看服务器上的原始页面。

您可以在网络选项卡中使用浏览器开发工具查找对内部二进制api的请求。然后有一种方法可以从python代码中重复此请求并检索目标数据

upd:robots.txt在他的回答中就是这么做的

最新更新