如果您对使用Python解码HTML实体感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于使用Python解码HTML实体的详细内容,我们还将为您解答pythonhtml解码的
如果您对使用Python解码HTML实体感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于使用Python解码HTML实体的详细内容,我们还将为您解答python html解码的相关问题,并且为您提供关于python – lxml.tostring错误地用HTML实体替换文本、Python 输出HTML实体字符(***转html,html符号乱码,中文乱码)、Python-用Python字符串解码HTML实体?、Python中使用HTMLParser解析html实例的有价值信息。
本文目录一览:- 使用Python解码HTML实体(python html解码)
- python – lxml.tostring错误地用HTML实体替换文本
- Python 输出HTML实体字符(***转html,html符号乱码,中文乱码)
- Python-用Python字符串解码HTML实体?
- Python中使用HTMLParser解析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实体替换文本
在前两种情况下,我似乎会丢失这些数据,但我似乎无法弄清楚如何告诉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­lo World</p>''
Python 输出HTML实体字符(***转html,html符号乱码,中文乱码)
#!/usr/bin/env python
# encoding: utf-8
"""
出 关① 徐兰
凭山俯海古边州, 旆②影风翻见戍楼。
马后桃花马前雪,出关争得不回头?
[注]①关,指居庸关。②旆(pèi),旌旗。
"""
import html
string = '[注]①关,指居庸关。②旆(pèi),旌旗。'
print(html.unescape(string)) #[注]①关,指居庸关。②旆(pèi),旌旗。
Python-用Python字符串解码HTML实体?
我正在使用Beautiful Soup 3解析一些HTML,但是它包含HTML实体,Beautiful Soup 3不会自动为我解码:
>>> from BeautifulSoup import BeautifulSoup>>> soup = BeautifulSoup("<p>£682m</p>")>>> text = soup.find("p").string>>> print text£682m
如何解码HTML实体text以获得"£682m"
而不是"£682m"
。
答案1
小编典典Python 3.4以上
用途html.unescape()
:
import htmlprint(html.unescape(''£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(''£682m''))£682m
你还可以使用six兼容性库来简化导入:
>>> from six.moves.html_parser import HTMLParser>>> h = HTMLParser()>>> print(h.unescape(''£682m''))£682m
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为开闭标签间的内容.值得注意的是在形如
...
当然还有其他函数,这里不做介绍
显式调用的方法
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"