Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 通过webscraping从使用ajax制作的图形中获取文本_Python 3.x_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 3.x 通过webscraping从使用ajax制作的图形中获取文本

Python 3.x 通过webscraping从使用ajax制作的图形中获取文本,python-3.x,web-scraping,beautifulsoup,Python 3.x,Web Scraping,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 we

我知道这有点傻,但我试着从图表中找出文字

有人能告诉我怎样才能得到数据吗

我用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'})

但是这并没有给我childelements的内容,它不返回任何内容

这些元素是动态加载的,所以
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]]

它们是动态加载的,因此
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]]