我有这个HTML代码:
<h2>
<a href="http://smittenkitchen.com/blog/2008/10/mollys-apple-tarte-tatin/"
rel="bookmark"
title="permanent link to molly’s apple tarte tatin">
molly’s apple tarte tatin</a>
</h2>
和正确的单引号(&amp;#8217)给了我各种各样的问题。我正在使用BeautifulSoup解析它,我似乎无法以我可以在SQL数据库中使用的格式获取此数据。我试图从我的数据库中将其格式化为JSON,我收到此错误:
json_encode():参数
中的UTF-8序列无效我试图将标题存储在SQL中,只是为了清楚!
答案 0 :(得分:3)
假设:
content = '''\
<h2>
<a href="http://smittenkitchen.com/blog/2008/10/mollys-apple-tarte-tatin/"
rel="bookmark"
title="permanent link to molly’s apple tarte tatin">
molly’s apple tarte tatin</a>
</h2>'''
使用lxml:
import lxml.html as LH
root = LH.fromstring(content)
atag = root.find('a')
print(repr(atag.attrib['title']))
使用bs4:
import bs4 as bs
soup = bs.BeautifulSoup(content)
atag = soup.find('a')
print(repr(atag.attrs['title']))
使用BeautifulSoup(版本3):
import BeautifulSoup as bs
soup = bs.BeautifulSoup(content)
atag = soup.find('a')
print(repr(atag['title']))
每个版本打印
u'permanent link to molly\u2019s apple tarte tatin'
显示每个成功解码的HTML标题为unicode。
您的数据库适配器应该能够在数据库中存储unicode或unicode的编码形式。不需要JSON。
答案 1 :(得分:2)
虽然没有完全回答你的问题,但似乎大多数人都建议从美丽的汤中去lxml,甚至是美丽汤的作者。我们在室内使用了美丽的汤来进行项目,发现转到lxml让我们更好地控制了我们正在进行的HTML解析,以及更少的奇怪问题。
答案 2 :(得分:1)
我建议你试试Entity Conversion
从文档中,根据需要进行更改:
from BeautifulSoup import BeautifulSoup
BeautifulSoup("Sacré bleu!",
convertEntities=BeautifulStoneSoup.HTML_ENTITIES).contents[0]
# u'Sacr\xe9 bleu!'