我正在尝试用Python读取XML文件,其一般格式如下:
<item id="1149" num="1" type="topic">
<title>Afghanistan</title>
<additionalInfo>Afghanistan</additionalInfo>
</item>
(此片段重复多次。)
我正在尝试将id
值和title
值打印到文件中。
目前,我在将XML文件导入Python时遇到了麻烦。目前,我这样做是为了获取XML文件:
import xml.etree.ElementTree as ET
from urllib2 import urlopen
url = 'http://api.npr.org/list?id=3002' #1007 is science
response = urlopen(url)
f = open('out.xml', 'w')
f.write(response)
但是,每当我运行此代码时,我都会收到错误Traceback (most recent call last): File "python", line 9, in <module> TypeError: expected a character buffer object
,这让我觉得我没有使用可以处理XML的东西。
有没有办法可以将XML文件保存到文件中,然后提取每个部分的title
,以及与该标题相关联的id
属性?
谢谢你的帮助。
答案 0 :(得分:1)
您可以通过以下代码阅读回复内容:
import urllib2
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler(),urllib2.HTTPCookieProcessor())
response= opener.open("http://api.npr.org/list?id=3002").read()
opener.close()
然后将其写入文件:
f = open('out.xml', 'w')
f.write(response)
f.close()
答案 1 :(得分:0)
您想要的是response.read()
而不是response
。响应变量是一个不是xml字符串的实例。通过执行response.read()
,它将从响应实例中读取xml。
然后您可以将其直接写入如下文件:
url = 'http://api.npr.org/list?id=3002' #1007 is science
response = urlopen(url)
f = open('out.xml', 'w')
f.write(response.read())
或者您也可以直接将其解析为ElementTree,如下所示:
url = 'http://api.npr.org/list?id=3002' #1007 is science
response = urlopen(url)
tree = ET.fromstring(response.read())
要提取所有ID /标题对,您也可以执行以下操作:
url = 'http://api.npr.org/list?id=3002' #1007 is science
response = urlopen(url)
tree = ET.fromstring(response.read())
for item in tree.findall("item"):
print item.get("id")
print item.find("title").text
从那里你可以决定存储/输出值的位置