Почему не получаю результаты при парсинге?

Рейтинг: -2Ответов: 1Опубликовано: 09.02.2023
from bs4 import BeautifulSoup as b
import requests

url = 'https://p2p.binance.com/ru/trade/sell/USDT?fiat=UAH&payment=Monobank'

response = requests.get(url)

r = requests.get(url)
soup = b(r.text, "html.parser")

parsprice = soup.find_all("div", class_="css-1ee59nr")

print(parsprice)

пытаюсь спарсить бинанс п2п, а именно курс гривны к доллару, но почему то не получаю никакого результата. В чем может быть проблема?

Ответы

▲ 0

В вашем случае страница содержит исполняемый 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 для дальнейшего поиска искомых элементов и значений на странице.