Получение текста из графика, созданного с помощью ajax с помощью webscraping

#python-3.x #web-scraping #beautifulsoup

#python-3.x #веб-очистка #beautifulsoup

Вопрос:

Я знаю, что это немного глупо, но я попытался извлечь текст из диаграмм этого веб-сайта

Может кто-нибудь, пожалуйста, подскажите, как я могу получить данные

Я попробовал это с помощью python и BeautifulSoup следующим образом:

 seite = requests.get(url)
bs4_seite = None
if seite.status_code == 200:
    bs4_seite = bs4.BeautifulSoup(seite.content, 'html.parser')
else:
    print('Seite konnte nicht geladen werden.', url)
pushList = bs4_seite.find('div', {'class':'pieChart'})
  

Но это не дает мне содержимого дочерних элементов, оно ничего не возвращает

Ответ №1:

Они загружаются динамически, поэтому BeautifulSoup их не видно, но вы можете получить данные с POST помощью запроса.

Вот как:

 import requests


headers = {
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36",
    'x-requested-with': 'XMLHttpRequest',
}

url = "https://www.onvista.de/etf/ajax/etfBreakdownList"

types = ["industries", "countries", "instruments", "currencies"]

for type_ in types:
    data = requests.post(url, data={"isin": "IE00BYX2JD69", "type": type_}, headers=headers)
    print(data.json())
  

Вывод:

 [['Sonstige Konsumgüter', 23.64], ['IT-Software (Telekommunikation und Internet)', 21.36], ['Gesundheitsdienstleistungen', 14.91], ['Industrie', 14.72], ['Finanzdienstleistungen', 13.43], ['Rohstoffe', 4.07], ['Immobilien', 3.68], ['Energie', 2.38], ['Konglomerate', 0.94], ['Versorger', 0.45], ['Barmittel', 0.27], ['Andere', 0.15000000000001]]
[['USA', 56.12], ['Japan', 9.73], ['Deutschland', 4.53], ['Schweiz', 4.46], ['Kanada', 4.07], ['Großbritannien', 3.57], ['Frankreich', 3.04], ['Irland', 2.33], ['Australien', 2.21], ['Niederlande', 2.21], ['Dänemark', 2.18], ['Hong Kong', 0.88], ['Schweden', 0.88], ['Spanien', 0.55], ['Argentinien', 0.53], ['Italien', 0.48], ['Singapur', 0.44], ['Finnland', 0.37], ['Neuseeland', 0.3], ['Kasse', 0.27], ['Norwegen', 0.24], ['Belgien', 0.22], ['Österreich', 0.1], ['Andere', 0.29000000000003]]
[['Aktien', 99.58], ['Cash', 0.27], ['Fonds', 0.15]]
[['US Dollar', 60.26], ['Euro', 12.92], ['Japanische Yen', 9.73], ['Schweizer Franken', 3.85], ['Kanadische Dollar', 3.54], ['Pfund Sterling', 2.23], ['Australische Dollar', 2.21], ['Dänische Kronen', 2.18], ['Hongkong-Dollar', 0.88], ['Schwedische Krone', 0.8], ['Singapur-Dollar', 0.44], ['Neuseeland-Dollar', 0.3], ['Norwegische Krone', 0.24], ['Andere', 0.42000000000002]]