3

ニュース タイトルのNDTV Web サイトをスクレイピングしようとしています。これは私が HTML ソースとして使用しているページです。私は BeautifulSoup (bs4) を使用して HTML コードを処理しています。リンク先のページでヒンディー語のタイトルに遭遇したときにコードが壊れることを除いて、すべてが機能しています。

これまでの私のコードは次のとおりです。

import urllib2
from bs4 import BeautifulSoup

htmlUrl = "http://archives.ndtv.com/articles/2012-01.html"
FileName = "NDTV_2012_01.txt"

fptr = open(FileName, "w")
fptr.seek(0)

page = urllib2.urlopen(htmlUrl)
soup = BeautifulSoup(page, from_encoding="UTF-8")

li = soup.findAll( 'li')
for link_tag in li:
   hypref = link_tag.find('a').contents[0]
   strhyp = str(hypref)
   fptr.write(strhyp)
   fptr.write("\n")

私が得るエラーは次のとおりです。

Traceback (most recent call last):
  File "./ScrapeTemplate.py", line 30, in <module>
  strhyp = str(hypref)
  UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

from_encodingパラメータを含めなくても同じエラーが発生しました。最初は として使用していましfromEncodingたが、python は非推奨の使用法であると警告しました。

これを修正するにはどうすればよいですか? 私が読んだことから、ヒンディー語のタイトルを避けるか、ASCII 以外のテキストに明示的にエンコードする必要がありますが、その方法がわかりません。どんな助けでも大歓迎です!

4

2 に答える 2

3

表示されるのは、NavigableStringインスタンス(Pythonユニコードタイプから派生)です。

(Pdb) hypref.encode('utf-8')
'NDTV'
(Pdb) hypref.__class__
<class 'bs4.element.NavigableString'>
(Pdb) hypref.__class__.__bases__
(<type 'unicode'>, <class 'bs4.element.PageElement'>)

を使用してutf-8に変換する必要があります

hypref.encode('utf-8')
于 2013-01-19T09:32:50.393 に答える
1
strhyp = hypref.encode('utf-8')

http://joelonsoftware.com/articles/Unicode.html

于 2013-01-19T09:28:31.730 に答える