0

私はこのHTMLコードを持っています:

<h2>
<a href="http://smittenkitchen.com/blog/2008/10/mollys-apple-tarte-tatin/" 
rel="bookmark" 
title="permanent link to molly&#8217;s apple tarte tatin">
molly&#8217;s apple tarte tatin</a>
</h2>

右の一重引用符 (’) は、あらゆる種類の問題を引き起こしています。これを BeautifulSoup で解析していますが、SQL データベースで使用できる形式でこのデータを取得できないようです。これをデータベースから JSON 形式で取得しようとすると、次のエラーが表示されます。

json_encode(): 引数の UTF-8 シーケンスが無効です

明確にするために、タイトルをSQLに保存しようとしています!

4

3 に答える 3

3

与えられた:

content = '''\
<h2>
<a href="http://smittenkitchen.com/blog/2008/10/mollys-apple-tarte-tatin/" 
rel="bookmark" 
title="permanent link to molly&#8217;s apple tarte tatin">
molly&#8217;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 は必要ありません。

于 2013-03-15T03:27:18.710 に答える
2

あなたの質問に正確に答えているわけではありませんが、美しいスープの作者でさえ、ほとんどの人が美しいスープからlxmlに行くことを勧めているようです。私たちは社内で美しいスープをプロジェクトに使用しましたが、lxml に移行することで、行っていた HTML 解析をより詳細に制御できるようになり、奇妙な問題も少なくなることがわかりました。

http://lxml.de/をチェックしてください

于 2013-03-15T03:12:08.453 に答える
1

エンティティ変換を試すことをお勧めします

ドキュメントから、必要に応じて変更します。

from BeautifulSoup import BeautifulSoup
BeautifulSoup("Sacr&eacute; bl&#101;u!", 
               convertEntities=BeautifulStoneSoup.HTML_ENTITIES).contents[0]
# u'Sacr\xe9 bleu!'
于 2013-03-15T04:10:41.000 に答える