GVKun编程网logo

使用Python解码HTML实体(python html解码)

19

如果您对使用Python解码HTML实体感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于使用Python解码HTML实体的详细内容,我们还将为您解答pythonhtml解码的

如果您对使用Python解码HTML实体感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于使用Python解码HTML实体的详细内容,我们还将为您解答python html解码的相关问题,并且为您提供关于python – lxml.tostring错误地用HTML实体替换文本、Python 输出HTML实体字符(&#x***转html,html符号乱码,中文乱码)、Python-用Python字符串解码HTML实体?、Python中使用HTMLParser解析html实例的有价值信息。

本文目录一览:

使用Python解码HTML实体(python html解码)

使用Python解码HTML实体(python html解码)

我正在尝试从此处NYTimes.com解码HTML条目,但无法弄清楚自己在做什么错。

举个例子:

"U.S. Adviser’s Blunt Memo on Iraq: Time ‘to Go Home’"

我尝试了BeautifulSoup,decode(’iso-8859-1’)和django.utils.encoding的smart_str,但没有成功。

python – lxml.tostring错误地用HTML实体替换文本

python – lxml.tostring错误地用HTML实体替换文本

我目前正在从YAML文件中获取字符串并将它们转换为 XML.我正在使用lxml.etree执行此操作,并且基本上构建了一个XML标记< msg>对于我的YAML文件中的每个值,然后使用lxml.etree.tostring()将其写出来.但是,给我的文件偶尔会有HTML标签,例如< a>,HTML实体,例如& nbsp;,以及角色喜欢& n. LXML解析器当前正在将所有这些转换为HTML实体,以便< a>成为& lt; a& gt;和& nbsp;成为& amp; nbsp;和&简单地变成& amp;

在前两种情况下,我似乎会丢失这些数据,但我似乎无法弄清楚如何告诉LXML解析器不要为我做任何HTML实体转换.有没有办法做到这一点?

解决方法

您可以使用 etree.Entity创建然后正确序列化的实体.

这是一个非常“简单”的例子 – 现实世界的使用通常需要更复杂的操作(好吧,你正在处理XML):

>>> from lxml import etree,html
>>> element = etree.fromstring(''<p>Hel-lo World</p>'')
>>> parts = element.text.split(''-'')
>>> element.text = parts[0]
>>> shy = etree.Entity(''shy'')
>>> shy.tail = parts[1]
>>> element.append(shy)
>>> html.tostring(element,encoding=''unicode'')
''<p>Hel&shy;lo World</p>''

Python 输出HTML实体字符(&#x***转html,html符号乱码,中文乱码)

Python 输出HTML实体字符(&#x***转html,html符号乱码,中文乱码)

#!/usr/bin/env python
# encoding: utf-8
"""
出  关①   徐兰
凭山俯海古边州, 旆②影风翻见戍楼。
马后桃花马前雪,出关争得不回头?
[注]①关,指居庸关。②旆(pèi),旌旗。
"""
import html
string = '[注]&#9312关,指居庸关。&#9313旆(pèi),旌旗。'
print(html.unescape(string))    #[注]①关,指居庸关。②旆(pèi),旌旗。

Python-用Python字符串解码HTML实体?

Python-用Python字符串解码HTML实体?

我正在使用Beautiful Soup 3解析一些HTML,但是它包含HTML实体,Beautiful Soup 3不会自动为我解码:

>>> from BeautifulSoup import BeautifulSoup>>> soup = BeautifulSoup("<p>&pound;682m</p>")>>> text = soup.find("p").string>>> print text&pound;682m

如何解码HTML实体text以获得"£682m"而不是"&pound;682m"

答案1

小编典典

Python 3.4以上

用途html.unescape()

import htmlprint(html.unescape(''&pound;682m''))

FYI html.parser.HTMLParser.unescape已弃用,并且应该在3.5中删除,尽管它是错误地保留的。它将很快从语言中删除。

Python 2.6-3.3

你可以HTMLParser.unescape()从标准库中使用:

  • 对于python 2.6-2.7 HTMLParser
  • 对于Python 3 html.parser
>>> try:...     # Python 2.6-2.7 ...     from HTMLParser import HTMLParser... except ImportError:...     # Python 3...     from html.parser import HTMLParser... >>> h = HTMLParser()>>> print(h.unescape(''&pound;682m''))£682m

你还可以使用six兼容性库来简化导入:

>>> from six.moves.html_parser import HTMLParser>>> h = HTMLParser()>>> print(h.unescape(''&pound;682m''))£682m

Python中使用HTMLParser解析html实例

Python中使用HTMLParser解析html实例

前几天遇到一个问题,需要把网页中的一部分内容挑出来,于是找到了urllib和htmlparser两个库.urllib可以将网页爬下来,然后交由htmlparser解析,初次使用这个库,在查官方文档时也遇到了一些问题,在这里写下来与大家分享.

一个例子

复制代码 代码如下:
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
  def handle_starttag(self, tag, attrs):
    print "a start tag:",tag,self.getpos()
parser=MyHTMLParser()
parser.feed(''

"hello"

'')

这个例子里HTMLParser是基类,重载了他的handle_starttag方法,输出了一些信息.parser是MyHTMLParser的实例,调用feed方法开始解析函数.值得注意的是,不需要显示调用handle_starttag方法就会执行.

HTMLParser方法的调用方式困惑了我很长时间,看了很多博文才恍然大悟,HTMLParser含有的方法分为两类,一类是需要显式调用的,而另一类不需显示调用.

不需显式调用的方法

下面的这些函数在解析的过程中会触发,但是默认情况下不会产生任何副作用,因而我们要根据自己的需求重载.

立即学习“Python免费学习笔记(深入)”;

1.HTMLParser.handle_starttag(tag,attrs): 解析时遇到开始标签调用,如

,参数tag是标签名,这里是''p'',attrs为标签所有属性(name,value)列表,这里是[(''class'',''para'')]

2.HTMLParser.handle_endtag(tag): 遇到结束标签时调用,tag是标签名

3.HTMLPars.handle_data(data): 遇到标签中间的内容时调用,如,参数data为开闭标签间的内容.值得注意的是在形如

...

的位置,并不会在div处调用,而是只在p处调用

当然还有其他函数,这里不做介绍

显式调用的方法

1.HTMLParser.feed(data): 参数为需要解析的html字符串,调用后字符串开始被解析

2.HTMLParser.getpos(): 返回当前的行号和偏移位置,如(23,5)

3.HTMLParser.get_starttag_text(): 返回当前位置最近的开始标签的内容

所有的内容写完了,最后还有一点注意事项,HTMLParser只是一个简单的模块,解析html的功能并不完善,例如不能准确的分别开标签和"自闭标签",看下面代码:

复制代码 代码如下:
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
  def handle_starttag(self,tag,attrs):
    print ''begin tag'',tag
  def handle_startendtag(self,tag,attrs):
    print ''begin end tag'',tag

str1=''
''
str2=''
''
parser=MyHTMLParser()

parser.feed(str1)    # 输出 "begin tag br"
parser.feed(str2)    # 输出 "begin end br"

我们今天的关于使用Python解码HTML实体python html解码的分享已经告一段落,感谢您的关注,如果您想了解更多关于python – lxml.tostring错误地用HTML实体替换文本、Python 输出HTML实体字符(&#x***转html,html符号乱码,中文乱码)、Python-用Python字符串解码HTML实体?、Python中使用HTMLParser解析html实例的相关信息,请在本站查询。

本文标签:

上一篇如果我是Python的新手,应该使用哪个版本的Python?(初学者python用哪个版本好)

下一篇安装python包在md5中有问题(python安装包出错)