jkp*_*jkp 239 html python html-entities
我正在使用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
Run Code Online (Sandbox Code Playgroud)
我怎样才能解码HTML实体中text获得"£682m",而不是"£682m".
luc*_*luc 472
html.unescape()已被弃用,并且应该在3.5中删除,尽管它是错误的.它将很快从语言中删除.相反,使用html.parser.HTMLParser.unescape:
import html
print(html.unescape('£682m'))
Run Code Online (Sandbox Code Playgroud)
请参阅https://docs.python.org/3/library/html.html#html.unescape
您可以使用标准库中的HTML解析器:
>>> 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
Run Code Online (Sandbox Code Playgroud)
请参见http://docs.python.org/2/library/htmlparser.html
您还可以使用HTMLParser.unescape()兼容性库来简化导入:
>>> from six.moves.html_parser import HTMLParser
>>> h = HTMLParser()
>>> print(h.unescape('£682m'))
£682m
Run Code Online (Sandbox Code Playgroud)
Ben*_*mes 63
美丽的汤处理实体转换.在Beautiful Soup 3中,您需要为构造函数指定convertEntities参数BeautifulSoup(请参阅存档文档的"实体转换"部分).在Beautiful Soup 4中,实体会自动解码.
>>> from BeautifulSoup import BeautifulSoup
>>> BeautifulSoup("<p>£682m</p>",
... convertEntities=BeautifulSoup.HTML_ENTITIES)
<p>£682m</p>
Run Code Online (Sandbox Code Playgroud)
>>> from bs4 import BeautifulSoup
>>> BeautifulSoup("<p>£682m</p>")
<html><body><p>£682m</p></body></html>
Run Code Online (Sandbox Code Playgroud)
Cor*_*vax 13
您可以使用w3lib.html库中的replace_entities
In [202]: from w3lib.html import replace_entities
In [203]: replace_entities("£682m")
Out[203]: u'\xa3682m'
In [204]: print replace_entities("£682m")
£682m
Run Code Online (Sandbox Code Playgroud)
Beautiful Soup 4 允许您为输出设置格式化程序
如果传入
formatter=None,Beautiful Soup 在输出时根本不会修改字符串。这是最快的选项,但它可能会导致 Beautiful Soup 生成无效的 HTML/XML,如下例所示:
print(soup.prettify(formatter=None))
# <html>
# <body>
# <p>
# Il a dit <<Sacré bleu!>>
# </p>
# </body>
# </html>
link_soup = BeautifulSoup('<a href="http://example.com/?foo=val1&bar=val2">A link</a>')
print(link_soup.a.encode(formatter=None))
# <a href="http://example.com/?foo=val1&bar=val2">A link</a>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
199634 次 |
| 最近记录: |