2016-09-16 7 views
1

Ich möchte Daten erhalten in einer SDMX-Datei (wie https://www.bundesbank.de/cae/servlet/StatisticDownload?tsId=BBK01.ST0304&its_fileFormat=sdmx&mode=its). Ich habe versucht, BeautifulSoup zu verwenden, aber es scheint, dass es die Tags nicht sieht. Im folgenden CodePython BS4 mit SDMX

import urllib2 
from bs4 import BeautifulSoup 
url = "https://www.bundesbank.de/cae/servlet/StatisticDownload?tsId=BBK01.ST0304&its_fileFormat=sdmx" 
html_source = urllib2.urlopen(url).read() 
soup = BeautifulSoup(html_source, 'lxml') 
ts_series = soup.findAll("bbk:Series") 

was mir ein leeres Objekt gibt.

Ist BS4 das falsche Werkzeug oder (wahrscheinlicher) was mache ich falsch? Vielen Dank im Voraus

+0

Die gelieferte URL sagt 'Ihre Anfrage konnte nicht bearbeitet werden!', Vielleicht fügen Sie einfach etwas XML-Snippet hinzu. – flyingfoxlee

+0

wissen nicht, wie es hier richtig zu formatieren. Entschuldigung – Daniel

+0

Sie haben Recht, aber die URL ist lesbar in Python, zumindest auf meinem System – Daniel

Antwort

0

soup.findAll("bbk:series") würde das Ergebnis zurückgeben.

In der Tat, in diesem Fall verwenden Sie sogar lxml als Parser, BeautifulSoup noch als html analysieren, da HTML-Tags Fall insensetive sind, BeautifulSoup downcases alle Tags, so soup.findAll("bbk:series") funktioniert. Siehe Other parser problems aus dem offiziellen Dokument.

Wenn Sie es als xml analysieren möchten, verwenden Sie stattdessen soup = BeautifulSoup(html_source, 'xml'). Es verwendet auch lxml seit lxml ist der einzige xml Parser BeautifulSoup hat. Jetzt können Sie ts_series = soup.findAll("Series") verwenden, um das Ergebnis zu erhalten, da beautifulSoup den Namespace-Teil bbk entfernt.

+0

Oh dayum. Ich danke dir sehr. Du hast meinen Tag nach 2 Stunden nutzlos getestet :) – Daniel