0

Всем здравствуйте! Мне нужно получить данные, находящиеся на этой странице: https://www.huobi.com/en-us/exchange. Из левой панели нужно получить имя каждой монетки и её цену:

введите сюда описание изображения

Как я понял, данные каждой монеты находятся в классах с именем "vue-recycle-scroller__item-view", и получается мне всех их нужно найти и взять из них данные? Вот код, с помощью которого я это стараюсь сделать:

website = 'https://www.huobi.com/en-us/exchange'

response = requests.get(website)

if response.status_code == 200: soup = BeautifulSoup(response.content, "html.parser") coins = soup.find_all('div', class_='vue-recycle-scroller__item-view') print(coins) else: print('some troubles with connect')

В результате выполнения программы, в консоли я получаю это:

C:\python\python.exe C:/some_way/huobi_parser.py
[]

Process finished with exit code 0

То есть моя программа не нашла ни одного класса с подобным именем? Что я делаю не так? Может нужно сначала обращаться к классам, которые располагаются выше по иерархии? Подскажите пожалуйста, в чем ошибка, заранее спасибо!

kot may
  • 13
  • 2
    Динамический сайт. Используйте селениум. Если вас не устраивает селениум, отлавливайте запросы. рекомендую почитать https://hackware.ru/?p=7641 – Сергей Ш Jun 17 '22 at 13:49
  • Здравствуйте, Сергей, спасибо за информацию, учту. – good user Jun 17 '22 at 13:59
  • Или вот еще https://ru.stackoverflow.com/questions/924219/%d0%9a%d0%b0%d0%ba-%d0%bf%d0%b0%d1%80%d1%81%d0%b8%d1%82%d1%8c-%d1%81%d0%b0%d0%b9%d1%82%d1%8b-%d1%81-%d0%b0%d0%b2%d1%82%d0%be%d1%80%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b5%d0%b9 – Сергей Ш Jun 17 '22 at 14:05
  • спасибо, я думаю это мне поможет!=) – good user Jun 17 '22 at 14:06

1 Answers1

0

У меня получилось что-то следующим образом:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager # если модуля нету, вам нужен скачанный chromedriver.exe модуль для хром (если браузер хром) (https://chromedriver.chromium.org/)

chrome_options = Options() chrome_options.headless = True # чтобы визуально не открывать хром

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) # если есть модуль webdriver_managet #driver = webdriver.Chrome(service=Service(path)) # пример path - r"C:\Users\User\Desktop\chromedriver.exe"

driver.get("https://www.huobi.com/en-us/exchange") driver.implicitly_wait(120) # время ожидания загрузки сайта (120 секунд) прежде бросить TimeoutException

print("\nPROCESSING...")

coins = [] div_elems = WebDriverWait(driver, 120).until( EC.presence_of_all_elements_located((By.CLASS_NAME, "vue-recycle-scroller__item-view")) )

WebDriverWait(driver, 120).until(lambda d: False not in ["---" != div.find_element(By.XPATH, "//span[@class='price']").text for div in div_elems])

div_elems = driver.find_elements(By.CLASS_NAME, "vue-recycle-scroller__item-view")

for div_elem in div_elems: token, last_price, change = (div_elem.text).split("\n") print(token, "|", last_price, "|", change) coins.append((token, last_price, change)) # или можно в одну строчку если не собираешься с этим работать, а так же можешь передавать их списком [] # coins.append(((div_elem.text).split("\n")))

print("\n", "LIST:\n", coins) # После, этот списочек можешь сохранить себе и ежедневно обновлять :)

driver.close() driver.quit()

P.S. Мне кажется вышел не плохой вариант))

ОБНОВЛЕНО: Можешь убрать строчку с ожиданием сайта на 120 секунд в принципе, поскольку WebDriverWait все равно будет ожидать расположение элементов

Danya
  • 113
  • Воуу, спасибо за ответ, я уже не думал что он появится) Я хочу сказать что твой код действительно неплох, но: 1) он загружает только первые 29 пар, а на самом деле их там намного больше) 2) он загружает только пары с usdt, а мне нужно со всеми криптовалютами. Как я позже понял - намного проще и лучше сделать это через api биржи. Может потом добавлю ответ. Но так как твой код отвечает на мой вопрос, то я приму его=) – good user Jun 19 '22 at 09:49
  • И еще одно... Так уж сложилось, что я ищу друзей по интересам, поэтому если ты тоже их ищешь, то было бы круто пообщаться в телеграм, так как здесь не совсем удобно :) – good user Jun 19 '22 at 09:57