以下是我的代码:
import requests
import xml.etree.ElementTree as ET
r = requests.get("http://www.volcano.si.edu/news/WeeklyVolcanoRSS.xml")
tree = ET.fromstring(r.text.encode('utf-8'))
for pt in tree.findall('.//georss:point'):
print (pt.text)
问题是:
被视为前缀错误:
File "C:\Python27\lib\xml\etree\ElementPath.py", line 83, in xpath_tokenizer
raise SyntaxError("prefix %r not found in prefix map" % prefix)
SyntaxError: prefix 'georss' not found in prefix map
添加反斜杠以逃避角色:
for pt in tree.findall('.//georss\:point'):
...它给出了另一个错误:
SyntaxError: prefix 'georss\\' not found in prefix map
我该怎么做呢?
答案 0 :(得分:2)
XML标记中的冒号是XML命名空间。
检查源文档中是否有xmlns:georss="<URL>"
等属性。 URL是您的命名空间。
答案 1 :(得分:1)
您需要通过向findall()
方法添加参数来指定命名空间。试试这个:
import requests
import xml.etree.ElementTree as ET
r = requests.get("http://www.volcano.si.edu/news/WeeklyVolcanoRSS.xml")
tree = ET.fromstring(r.text.encode('utf-8'))
namespaces = {'georss' : 'http://www.georss.org/georss'}
for pt in tree.findall('.//georss:point', namespaces=namespaces):
print (pt.text)