我在解析某些XML时遇到了一些麻烦。这就是XML的样子。
<listing>
<seller_info>
<seller_name> cubsfantony</seller_name>
<seller_rating> 848</seller_rating>
</seller_info>
<payment_types>Visa/MasterCard, Money Order/Cashiers Checks, Personal Checks, See item description for payment methods accepted
</payment_types>
<shipping_info>Buyer pays fixed shipping charges, Will ship to United States only
</shipping_info>
<buyer_protection_info>
</buyer_protection_info>
<auction_info>
<current_bid>$620.00 </current_bid>
<time_left> 4 days, 14 hours + </time_left>
<high_bidder>
<bidder_name> gosha555@excite.com </bidder_name>
<bidder_rating>-2 </bidder_rating>
</high_bidder>
<num_items>1 </num_items>
<num_bids> 12</num_bids>
<started_at>$1.00 </started_at>
<bid_increment> </bid_increment>
<location> USA/Chicago</location>
<opened> Nov-27-00 04:57:50 PST</opened>
<closed> Dec-02-00 04:57:50 PST</closed>
<id_num> 511601118</id_num>
<notes> </notes>
</auction_info>
<bid_history>
<highest_bid_amount>$620.00 </highest_bid_amount>
<quantity> 1</quantity>
</bid_history>
<item_info>
<memory> 256MB PC133 SDram</memory>
<hard_drive> 30 GB 7200 RPM IDE Hard Drive</hard_drive>
<cpu>Pentium III 933 System </cpu>
<brand> </brand>
<description> NEW Pentium III 933 System - 133 MHz BUS Speed Pentium Motherboard.....
</description>
</item_info>
</listing>
这是我的代码。我想在标签之间传递文本并将其放入Pandas数据帧中。完整XML中大约有20个列表。对于此代码,我只是想看看如何通过标签的名称提取文本,但我不确定如何去做它
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
from lxml import etree
ebay = etree.parse('ebay.xml')
tree = ebay.getroot()
for child in tree:
for element in child:
person_dict = {}
for more in element:
if more.text != None:
person_dict[more] = more.text.strip
答案 0 :(得分:1)
在这里,我举一个如何解析一个给定列表的例子。如果您有多个列表,则可以使用for循环遍历所有列表。
from lxml import etree
listing = etree.parse('ebay.xml')
d = {}
for e in listing.getchildren():
for c in e.getchildren():
if len(c.getchildren()) == 0:
if c.tag is not None:
d[c.tag] = c.text
else:
for ce in c.getchildren():
if ce.tag is not None:
d[ce.tag] = ce.text
在此处,您可以将d
附加到列表中,然后使用pandas
将其转换为数据框。
输出如下所示
{'bid_increment': ' ',
'bidder_name': ' gosha555@excite.com ',
'bidder_rating': '-2 ',
'brand': ' ',
...
'seller_name': ' cubsfantony',
'seller_rating': ' 848',
'started_at': '$1.00 ',
'time_left': ' 4 days, 14 hours + '}