В вашем случае страница содержит исполняемый JS код, поэтому Вам не подходит такой метод парсинга. Присмотритесь в сторону такого решения:
from bs4 import BeautifulSoup
import time
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
url = 'https://p2p.binance.com/ru/trade/sell/USDT?fiat=UAH&payment=Monobank'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
}
def get_result(url, headers):
chrome_options = Options()
chrome_options.binary_location = "/opt/google/chrome/google-chrome"
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(options=chrome_options, executable_path=".../chromedriver_linux64/chromedriver")
driver.get(url)
time.sleep(10) # Можно ждать до загрузки страницы, но проще подождать 10 секунд, их хватит с запасом
html = driver.page_source
name = url.split('/')[-1] + '.html'
with open(f"{name}", "w", encoding='utf-8') as file:
file.write(html)
with open(f"{name}", encoding='utf-8') as file:
src = file.read()
soup = BeautifulSoup(src, "lxml")
parsprice = soup.find_all("div", class_="css-1ee59nr")
print(parsprice)
def main():
get_result(url=url, headers=headers)
if __name__ == "__main__":
main()
Вам для начала необходимо получить полную HTML форму, после исполнения всех скриптов на странице. А уже потом использовать BeautifulSoup для дальнейшего поиска искомых элементов и значений на странице.