尝试从XML获取值时出错。我得到“不支持带编码声明的Unicode字符串。请使用不带声明的字节输入或XML片段。“
这是我的代码:
import requests
import lxml.etree
from requests.auth import HTTPBasicAuth
r= requests.get("https://somelinkhere/folder/?parameter=abc", auth=HTTPBasicAuth('username', 'password'))
print r.text
root = lxml.etree.fromstring(r.text)
textelem = root.find("opensearch:totalResults")
print textelem.text
我得到了这个错误:
^{pr2}$下面是XML的外观,我在最后一行中尝试获取文件。在
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:apple-wallpapers="http://www.apple.com/ilife/wallpapers" xmlns:g-custom="http://base.google.com/cns/1.0" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:georss="http://www.georss.org/georss/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:cc="http://web.resource.org/cc/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:g-core="http://base.google.com/ns/1.0">
<title>Feed from some link here</title>
<link rel="self" href="https://somelinkhere/folder/?parameter=abc" />
<link rel="first" href="https://somelinkhere/folder/?parameter=abc" />
<id>https://somelinkhere/folder/?parameter=abc</id>
<updated>2018-03-06T17:48:09Z</updated>
<dc:creator>company.com</dc:creator>
<dc:date>2018-03-06T17:48:09Z</dc:date>
<opensearch:totalResults>4</opensearch:totalResults>
我尝试过从https://twigstechtips.blogspot.com/2013/06/python-lxml-strings-with-encoding.html和http://makble.com/how-to-parse-xml-with-python-and-lxml这样的链接进行各种更改,但始终遇到相同的错误。在
不要使用
r.text
来猜测文本编码并对其进行解码,而是尝试使用r.content
,它以字节的形式访问响应体。(见http://docs.python-requests.org/en/latest/user/quickstart/#response-content。)您也可以使用
r.raw
。有关详细信息,请参见parsing XML file gets UnicodeEncodeError (ElementTree) / ValueError (lxml)。在一旦这个问题得到解决,您将面临名称空间的问题。您要查找的元素(
opensearch:totalResults
)具有前缀opensearch
,它绑定到urihttp://a9.com/-/spec/opensearch/1.1/
。在您可以通过组合名称空间uri和本地名称(Clark notation)来找到元素:
有关详细信息,请参见http://lxml.de/tutorial.html#namespaces。在
下面是一个实现了这两个更改的示例:
^{pr2}$相关问题 更多 >
编程相关推荐