Не отображаются данные между тега при парсинге

Индикатор и код страницыНадо получить число которое на индикаторе https://edition.cnn.com/markets/fear-and-greed. При парсинге выводит только тег div, значения числа 39 которое должно быть между тега div нет.

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

url = "https://edition.cnn.com/markets/fear-and-greed"

r = requests.get(url)
#print(r.text)
print(r.status_code)

soup = bs(r.text, 'lxml') #lxml формат в котором хотим возвращать ответ

#print(soup.find('div', class_="market-fng-gauge__dial-number").find('span', class_="market-fng-gauge__dial-number-value"))
print(soup.find('div', class_="market-fng-gauge__historical-item-index-value"))

Код с результатом

В чем может быть проблема?


Ответы (1 шт):

Автор решения: Сергей Кох

Сайт динамический, requests берет только стартовую страницу, на ней не все элементы. С помощью selenium у меня также не получилось взять нужный вам элемент, но получилось взять целый json в котором, по-моему, есть нужные вам данные. Ссылку нашел при просмотре запросов Fetch/XHR в отладчике. Может её можно взять через requests, но надо подбирать заголовки.

import time
import json

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By


url = 'view-source:https://production.dataviz.cnn.io/index/fearandgreed/current'

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get(url)
content = driver.find_element(By.CSS_SELECTOR, 'td.line-content')
parsed_json = json.loads(content.text)
print(parsed_json)
print(parsed_json["score"])

time.sleep(1)
driver.quit()

------------------------------------------

{'score': 38.4285714285714, 'rating': 'fear', 'timestamp': '2022-12-27T20:34:37+00:00', 'previous_close': 38.7428571428571, 'previous_1_week': 37.9714285714286, 'previous_1_month': 63.8857142857143, 'previous_1_year': 56.39999999999999}
38.4285714285714
→ Ссылка