如何从XML文件中获取值?

2024-06-16 13:38:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有那个xml文件,我只需要从steamID6476561198875082603)获取值

<profile>
 <steamID64>76561198875082603</steamID64>
 <steamID>...</steamID>
 <onlineState>online</onlineState>
 <stateMessage>...</stateMessage>
 <privacyState>public</privacyState>
 <visibilityState>3</visibilityState>
 <avatarIcon>...</avatarIcon>
 <avatarMedium>...</avatarMedium>
 <avatarFull>...</avatarFull>
 <vacBanned>0</vacBanned>
 <tradeBanState>None</tradeBanState>
 <isLimitedAccount>0</isLimitedAccount>
 <customURL>...</customURL>
 <memberSince>December 8, 2018</memberSince>
 <steamRating/>
 <hoursPlayed2Wk>0.0</hoursPlayed2Wk>
 <headline>...</headline>
 <location>...</location>
 <realname>
 <![CDATA[ THEMakci7m87 ]]>
 </realname>
 <summary>...</summary>
 <mostPlayedGames>...</mostPlayedGames>
 <groups>...</groups>
</profile>

现在我只有那个代码:

xml_url = f'{url}?xml=1'

那我就不知道该怎么办了


Tags: xmlprofilesteamidonlinestatesteamid64customurlavatarfullvacbanned
2条回答

最好使用名为ElementTree的内置XML库

lxml是一个外部XML库,需要单独安装

见下文

import requests
import xml.etree.ElementTree as ET

r = requests.get('https://steamcommunity.com/id/themakci7m87/?xml=1')
if r.status_code == 200:
  root = ET.fromstring(r.text)
  steam_id_64 = root.find('./steamID64').text
  print(steam_id_64)
else:
  print('Failed to read data.')

输出:

76561198875082603

使用lxml非常简单:

import lxml.html as lh

steam = """your html above"""

doc = lh.fromstring(steam)
doc.xpath('//steamid64/text()')

输出:

['76561198875082603']

编辑:

对于实际的url,很明显底层数据是xml;因此,更好的方法是:

import requests
from lxml import etree

url = 'https://steamcommunity.com/id/themakci7m87/?xml=1'

req = requests.get(url)
doc = etree.XML(req.text.encode())
doc.xpath('//steamID64/text()')

输出相同

相关问题 更多 >