我有这段代码:
import requests
from xml.dom.minidom import parseString
site = 'test.com'
r = requests.get('http://bar-navig.yandex.ru/u?ver=2&url=http://%s&show=1' % (site))
#print r.text.encode('utf-8')
xmldoc = parseString(r.text.encode('utf-8'))
print xmldoc.getElementsByTagName('tcy')[0].attributes['value'].value
所以,它有效,但如果我在site
,'vk.com'
或'google.ru'
,我有一个错误:xml.parsers.expat.ExpatError: not well-formed (invalid token)
。
如何解决?感谢。
答案 0 :(得分:3)
这是一个编码问题。除非另有说明,否则XML应该是基于ASCII的。特别是,此XML源指定它被编码为windows-1251
。
试试这个:
parseString(r.text.encode('windows-1251'))
然后就可以解析了。
Minidom不是很聪明,否则当传递unicode
(这不起作用)时它就能自行解决。
答案 1 :(得分:0)
我尝试使用'utf-8'的编码和' utf-16'除了iso-8859-1之外它没有用(对于一些印度站点,虽然我没有注意到它们上面有任何非ascii字符)。但我切换到Selenium并且全部解决了。避免使用minidom也不是那么困难,因为硒的界面与minidom非常相似。干杯!