Красивый суп find_all с пустым списком - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в веб-разработке и экспериментирую, чтобы получить название и значение заголовка с сайта (https://www.tradingview.com/symbols/EURCHF/?exchange=OANDA)

Я использую функцию find_all BeautifulSoup, которая находит меня строки для заголовка но возвращает и пустой список для значения. Мой код показан ниже:

    from bs4 import BeautifulSoup
    from urllib.request import urlopen
    url1="https://www.tradingview.com/symbols/EURCHF/?exchange=OANDA"
    html1=urlopen(url1)
    soup1 = BeautifulSoup(html1, 'lxml')
    name1=soup1.find_all('div', class_="tv-symbol-header__short-title")
    val1=soup1.find_all('div', class_="tabValue-3iOTI9jm")
    print(name1)
    print(val1)

Почему он возвращает пустой список. При проверке данных на сайте отображается «Информация» как tabValue-3iOTI9jm. Я сделал снимок экрана, который показан здесь Проверка снимка экрана

После запуска моего кода имя1 печатается, но значение val1 отображается как пустой список. Результат показан здесь Результаты

1 Ответ

0 голосов
/ 05 апреля 2020

Обновление : Вот прямой вызов Back-End API

import requests

data = {"symbols": {"tickers": ["FX_IDC:EURCHF"], "query": {"types": ["forex"]}}, "columns": ["Recommend.All", "RSI", "RSI[1]", "Stoch.K", "Stoch.D", "Stoch.K[1]", "Stoch.D[1]", "CCI20", "CCI20[1]", "ADX", "ADX+DI", "ADX-DI", "ADX+DI[1]", "ADX-DI[1]", "AO", "AO[1]", "Mom", "Mom[1]", "MACD.macd", "MACD.signal",
                                                                                              "Rec.Stoch.RSI", "Stoch.RSI.K", "Rec.WR", "W.R", "Rec.BBPower", "BBPower", "Rec.UO", "UO", "EMA5", "close", "SMA5", "EMA10", "SMA10", "EMA20", "SMA20", "EMA30", "SMA30", "EMA50", "SMA50", "EMA100", "SMA100", "EMA200", "SMA200", "Rec.Ichimoku", "Ichimoku.BLine", "Rec.VWMA", "VWMA", "Rec.HullMA9", "HullMA9"]}
r = requests.post(
    "https://scanner.tradingview.com/forex/scan", json=data).json()

print(r)

Вывод:

{'data': [{'s': 'FX_IDC:EURCHF', 'd': [-0.3474026, 40.20328953, 40.7342841, 24.71794872, 32.35897436, 30.23076923, 40.12820513, -71.9887128, -68.01055011, 16.51125049, 14.84157898, 16.77182105, 14.90478566, 16.84324816, -0.00283482, -0.00251176, -0.00017, 0.00098, -0.00161929, -0.00171414, 0, 45.887686, 0, -78.69230769, 0, -0.00475522, 0, 45.51407259, 1.05654604, 1.05526, 1.056942, 1.05734726, 1.058608, 1.05837338, 1.057454, 1.0597646, 1.059502, 1.06326959, 1.0621026, 1.07175293, 1.0747255, 1.08482787, 1.08547945, 0, 1.061735, None, None, 1, 1.05488111]}], 'totalCount': 1}

Ну, TradingView загружен через JavaScript динамически после загрузки страницы. Для этого bs4 не сможет визуализировать JavaScript в эфире.

Вам следует рассмотреть возможность использования API напрямую. Или вы можете использовать selenium подход.

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.add_argument('--headless')

driver = webdriver.Firefox(options=options)

driver.get("https://www.tradingview.com/symbols/EURCHF/?exchange=OANDA")

element = driver.find_element_by_class_name("tabValue-3iOTI9jm").text

print(element)

driver.quit()

Выход:

1.05613
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...