2016-08-21 6 views
0

私はこのコードを実行する場合:のPython + BeautifulSoup:エンコードのエラー

for link in soup.findAll('a'): 
    href = link.get('href') 
    href = str(href) 

を私が示すように、変数をエンコードしようとすると、私は最後の行

href = str(href) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2018' in position 68: ordinal not in range(128) 

に次のエラーを取得しています以下の下:

for link in soup.findAll('a'): 
    href = link.get('href') 
    href = href.encode('utf-8') 
    href = str(href) 

私は次のエラーを取得します

href = href.encode('utf-8') 
AttributeError: 'NoneType' object has no attribute 'encode' 

私はここや他の場所で複数の投稿を見てきましたが、どれも適切な解決策はありませんでした。私はかなり新しいPythonです。助けてください。

+0

あなたはエラー – Maviles

答えて

0

誰もが今までこの問題に直面している場合は、ここで私はそれを解決する方法は次のとおりです。

href = href.encode('utf-8') 
href = str(href) 

をしかし、ウェブページの集合で、私はスクラブた:

は、理想的には、エンコードの問題のために、これは働いてきたはずですhref変数に値を格納していないページがいくつかあり、その結果、NoneTypeが返されました。そして、それはstr(href)ステートメントが失敗していた。 hrefは、コード内で、さらに任意の型の特定の問題を防ぐために、空の文字列に割り当てるには、その最高のNoneTypeある場合

for link in soup.findAll('a'): 
    href = link.get('href') 
    if href is None: 
     href = "" 
    href = str(href.encode('utf-8')) 

:だから私は最終的にこれをしませんでした。

私がu \ 2018とu \ 2019の文字について行った観察の1つは、リンク自体にはなく、リンクにアタッチされたアトリビュートに存在することが多いことです。これは一般に?attribute=の後のテキストです。そのため、スクラブで属性が重要でない場合、以下のようなステートメントを使用することで、すべての問題を解決できます。

0

私の母国語では "áçéàó"という文字がたくさんあるので、よく似たような状況になりました。ほとんどのデコード/エンコーディングのヒントはうまく機能しませんでした。これはまた、あなたの問題を支援することができます

import sys 

reload(sys) 
sys.setdefaultencoding('latin-1') 

希望を:

は使用して私のコードの初めで、SYSのデフォルト言語をreseting私の方法を見つけました。

+0

につながっている値を印刷するためにtry/catchを使用することができます...私はすでにこれとUTF-8をデフォルトのエンコーディングとして試しました。彼らの誰も働いていない。 –