1

Python 2.7 で BeautifulSoup 4 を使用して、YouTube のコメントを解析しようとしています。YouTube ビデオを試してみると、ファイルの先頭だけでなく、BOM でいっぱいのテキストが表示されます。

<p> thank you kind sir :)</p>

ほぼすべてのコメントに 1 つ表示されます。これは、他の Web サイト (guardian.co.uk) には当てはまりません。私が使用しているコード:

# Source (should be taken from file to allow updating but not during wip):
source_url = 'https://www.youtube.com/watch?v=aiYzrCjS02k&feature=related'

# Get html from source:
response = urllib2.urlopen(source_url)
html = response.read()

# html comes with BOM everywhere, which is real ***, get rid of it!
html = html.decode("utf-8-sig")

soup = BeautifulSoup(html)

strings = soup.findAll("div", {"class" : "comment-body"})
print strings

ご覧のとおり、デコードを試みましたが、すぐに BOM の文字が表示されます。何か案は?

4

1 に答える 1

1

これは YouTube 側では無効のようですが、ただ修正するように指示することはできません。回避策が必要です。

したがって、ここに簡単な回避策があります。

# html comes with BOM everywhere, which is real ***, get rid of it!
html = html.replace(b'\xEF\xBB\xBF', b'')
html = html.decode("utf-8")

(b接頭辞は不要ですが、Python 2.7 では無害ですが、Python 3 でコードを動作させることができます... 一方、Python 2.5 では機能しなくなるため、それが重要な場合は削除してください。 )

または、最初にデコードしてからreplace(u'\uFEFF', u''). これはまったく同じ効果を持つはずです (余分な BOM のデコードは問題なく動作するはずです)。しかし、デコードしてから結果を修正するよりも、UTF-8 を修正してからデコードする方が理にかなっていると思います。

于 2012-10-30T22:05:09.813 に答える