Python和XML出错

2024-05-16 04:29:36 发布

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

尝试从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.htmlhttp://makble.com/how-to-parse-xml-with-python-and-lxml这样的链接进行各种更改,但始终遇到相同的错误。在


Tags: httpsorgcomhttpparameterwwwxmlfolder
1条回答
网友
1楼 · 发布于 2024-05-16 04:29:36

不要使用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,它绑定到uri http://a9.com/-/spec/opensearch/1.1/。在

您可以通过组合名称空间uri和本地名称(Clark notation)来找到元素:

{http://a9.com/-/spec/opensearch/1.1/}totalResults

有关详细信息,请参见http://lxml.de/tutorial.html#namespaces。在

下面是一个实现了这两个更改的示例:

^{pr2}$

相关问题 更多 >