我有这样一段代码,它返回一个XML响应。
import requests
url = "https://www-genesis.destatis.de/genesisWS/web/ExportService_2010?method=TabellenExport&kennung=DEB924AL95&passwort=P@ssword123&name=42151-0002&bereich=Alle&format=csv&strukturinformation=false&komprimieren=false&transponieren=true&startjahr=&endjahr=&zeitscheiben=®ionalmerkmal=®ionalschluessel=&sachmerkmal=FAMSTD&sachschluessel=VERH&sachmerkmal2=&sachschluessel2=&sachmerkmal3=&sachschluessel3=&stand=&auftrag=false&sprache=en"
payload = "<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\nxmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\r\nxmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"\r\nxmlns:web=\"http://webservice_2010.genesis\">\r\n <soapenv:Header/>\r\n <soapenv:Body>\r\n <web:TabellenExport soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n <kennung xsi:type=\"xsd:string\">DEB924AL95</kennung>\r\n <passwort xsi:type=\"xsd:string\">P@ssword123</passwort>\r\n <namen xsi:type=\"xsd:string\">42151-0002</namen>\r\n <bereich xsi:type=\"xsd:string\">alle</bereich>\r\n <format xsi:type=\"xsd:string\">csv</format>\r\n <strukturinformation xsi:type=\"xsd:boolean\">false</strukturinformation>\r\n <komprimieren xsi:type=\"xsd:boolean\">false</komprimieren>\r\n <transponieren xsi:type=\"xsd:boolean\">false</transponieren>\r\n\r\n <startjahr xsi:type=\"xsd:string\"></startjahr>\r\n <endjahr xsi:type=\"xsd:string\"></endjahr>\r\n <zeitscheiben xsi:type=\"xsd:string\"></zeitscheiben>\r\n <regionalmerkmal xsi:type=\"xsd:string\"></regionalmerkmal>\r\n <regionalschluessel xsi:type=\"xsd:string\"></regionalschluessel>\r\n <sachmerkmal xsi:type=\"xsd:string\">FAMSTD</sachmerkmal>\r\n <sachschluessel xsi:type=\"xsd:string\">VERH</sachschluessel>\r\n <sachmerkmal2 xsi:type=\"xsd:string\"></sachmerkmal2>\r\n <sachschluessel2 xsi:type=\"xsd:string\"></sachschluessel2>\r\n <sachmerkmal3 xsi:type=\"xsd:string\"></sachmerkmal3>\r\n <sachschluessel3 xsi:type=\"xsd:string\"></sachschluessel3>\r\n <stand xsi:type=\"xsd:string\"></stand>\r\n <auftrag xsi:type=\"xsd:boolean\">false</auftrag>\r\n <sprache xsi:type=\"xsd:string\">de</sprache>\r\n </web:TabellenExport>\r\n </soapenv:Body>\r\n</soapenv:Envelope>\r\n\r\n"
headers = {
'Content-Type': 'application/xml'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
得到的响应中有CSV数据。它在标签中:
<tabellenDaten>
如何提取此表并使用它创建Pandas DataFrame?
2条答案
按热度按时间bakd9h0s1#
您可以使用BeautifulSoup解析响应,然后提取csv数据,最后使用pandas作为StringIO对象进行解析
CSV似乎是一个MultiIndex DataFrame,因此您可能需要在
read_csv
方法中使用关键字index_col
调整代码(请参见documentation)编辑:
CSV看起来很疯狂。这是我发现的使用pandas导入CSV而不预处理CSV的最佳选项。
h43kikqp2#
看看标准库中的ElementTree库。您可以读入这个xml,然后获取其中包含的数据。
如果它是有效的CSV,你可以把它交给pandas。