Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Unicode和lxml属性的问题_Python_Lxml_Amp Html - Fatal编程技术网

Python Unicode和lxml属性的问题

Python Unicode和lxml属性的问题,python,lxml,amp-html,Python,Lxml,Amp Html,当元素包含unicode字符时,使用lxml获取属性时出现问题。我读过很多其他关于UTF-8解码的文章,但我似乎无法让它正常工作。我没有发现以属性的形式给出上下文 当前,如果html标记没有unicode字符,则获取属性的工作方式是这样的,例如,当我打印文档时,html标记看起来像这样,我从html\u属性中得到{'lang':'en','class':'} from urllib import urlopen from lxml import etree document = urlopen

当元素包含unicode字符时,使用lxml获取属性时出现问题。我读过很多其他关于UTF-8解码的文章,但我似乎无法让它正常工作。我没有发现以属性的形式给出上下文

当前,如果html标记没有unicode字符,则获取属性的工作方式是这样的,例如,当我打印文档时,html标记看起来像这样,我从
html\u属性中得到
{'lang':'en','class':'}

from urllib import urlopen
from lxml import etree

document = urlopen(url).read()

#Print the document
print(document)

tree = etree.HTML(document)
html_attributes = tree.attrib

# Print the attributes
print(html_attributes)
然而,每当我给lxml一个HTML标签上带有unicode属性的HTML文档时,比如:
我最终得到一个空对象:
{}
来自
HTML\u属性

from urllib import urlopen
from lxml import etree

document = urlopen(url).read()

#Print the document
print(document)

tree = etree.HTML(document)
html_attributes = tree.attrib

# Print the attributes
print(html_attributes)

有没有办法让它打印unicode属性

我不记得有任何规范允许将字符表示为属性名称,但我可能弄错了。对于一般的lxml或HTML?在Python中,
\u26a1
是对高压符号字符(U+26A1)的引用。在HTML文档中将该字符串文字作为属性名称看起来很奇怪。@mzjn我同意,但这是AMP规范允许的,请参见此处:-我正在使用一个解析器验证AMP文档,但在此之前,它会检测它是否是一个AMP文档。如果文档使用
amp
字符串,则检测该字符串是没有问题的,但大约只有50%的情况是这样。我对lxml不是很熟悉,但基于为什么lxml不能从unicode字符串解析我的XML,XML被显式定义为字节流。这就引出了第一条规则:不要自己解码XML数据。还提到,如果unicode字符串在内部()声明XML编码,解析肯定会失败。对于包含字符集元标记的HTML unicode字符串也是如此。您可能想查看文档以了解更多信息,看看它是否对您有帮助。我不记得有任何规范允许将字符表示为属性名称,但我可能会弄错。对于一般的lxml或HTML?在Python中,
\u26a1
是对高压符号字符(U+26A1)的引用。在HTML文档中将该字符串文字作为属性名称看起来很奇怪。@mzjn我同意,但这是AMP规范允许的,请参见此处:-我正在使用一个解析器验证AMP文档,但在此之前,它会检测它是否是一个AMP文档。如果文档使用
amp
字符串,则检测该字符串是没有问题的,但大约只有50%的情况是这样。我对lxml不是很熟悉,但基于为什么lxml不能从unicode字符串解析我的XML,XML被显式定义为字节流。这就引出了第一条规则:不要自己解码XML数据。还提到,如果unicode字符串在内部()声明XML编码,解析肯定会失败。对于包含字符集元标记的HTML unicode字符串也是如此。您可能想查看文档以了解更多信息,看看它是否对您有所帮助。