首页 > 解决方案 > 如何在 Python 中从 web 服务请求将文本转换为表格或 .csv

问题描述

我在python中导入了请求和Beautifulsoup4,并从Web服务请求xml。这就是我所做的:

import requests
from bs4 import BeautifulSoup as bs
session_request = requests.session()
response = session_requestion.post('',data='',headers='')
soup = bs(response.text,'lxml')
fruitresult = soup.find_all('getfruitbysql')

print(fruitresult)

然后,它显示:

[<getresultbysql>
&lt;DataSet&gt;
&lt;Table&gt;
     &lt;Fruit&gt;Apple&lt;/Fruit&gt;
     &lt;NumberOf&gt;10&lt;/NumberOf&gt;
     &lt;Price&gt;12&lt;/Price&gt;
   &lt;/Table&gt;
   &lt;Table&gt;
     &lt;Fruit&gt;Banana&lt;/Fruit&gt;
     &lt;NumberOf&gt;18&lt;/NumberOf&gt;
     &lt;Price&gt;10&lt;/Price&gt;
   &lt;/Table&gt;   
&lt;/DataSet&gt;
</getresultbysql>]

如何将此结果转换为数据框或 .csv,如下所示:

--------------------------
| Fruit | Number | Price |
--------------------------
| Apple |   10   |   12  |
| Banana|   18   |   10  |
--------------------------

非常感谢!..

这是整个 xml 响应:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<getresultbysqlResponse xmlns="http://tempuri.org/">
<getresultbysql>
&lt;DataSet&gt;
&lt;Table&gt;
     &lt;Fruit&gt;Apple&lt;/Fruit&gt;
     &lt;NumberOf&gt;10&lt;/NumberOf&gt;
     &lt;Price&gt;12&lt;/Price&gt;
   &lt;/Table&gt;
   &lt;Table&gt;
     &lt;Fruit&gt;Banana&lt;/Fruit&gt;
     &lt;NumberOf&gt;18&lt;/NumberOf&gt;
     &lt;Price&gt;10&lt;/Price&gt;
   &lt;/Table&gt;   
&lt;/DataSet&gt;
</getresultbysql>
</getresultbysqlResponse>
</soap:Body>
</soap:Envelope>

标签: pythonsqlweb-servicesbeautifulsoup

解决方案


假设您已soup准备好对象,您可以尝试使用lxml来提取数据:

from lxml import etree


xml_text = soup.find('getresultbysql').text
root = etree.fromstring(xml_text)

data = [['Fruit', 'Number', 'Price']]
for table in root.findall('Table'):
    data.append([i.text for i in table.getchildren()])

结果如下:

╔════════╦════════╦═══════╗
║ Fruit  ║ Number ║ Price ║
╠════════╬════════╬═══════╣
║ Apple  ║     10 ║    12 ║
║ Banana ║     18 ║    10 ║
╚════════╩════════╩═══════╝

推荐阅读