Python 3.x 通过webscraping从使用ajax制作的图形中获取文本
我知道这有点傻,但我试着从图表中找出文字 有人能告诉我怎样才能得到数据吗 我用python和BeautifulSoup进行了如下尝试: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
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]]