2017-03-17 14 views
1

私はウェブサイトからhtmlの内容をPythonに読み込み、そこのテキストを分析し、どのカテゴリに入るかを決めようとしています。私は彼らが彼らと一緒に仕事をしようとしているときに彼らがNoneTypeに入ると長いダッシュで問題があります。私はこのサイトで提案されたいくつかの修正を試みましたが、それらのどれも働いていませんでした。文字列から長いダッシュを削除する

from bs4 import BeautifulSoup 
import re 
import urllib.request 
response = urllib.request.urlopen('website-im-opening') 
content = response.read().decode('utf-8') 
#this does not work 
content = content.translate({0x2014: None}) 
content = re.sub(u'\u2014','',content) 
#This is other part of code 
htmlcontent = BeautifulSoup(content,"html.parser") 

for cont in htmlcontent.select('p'): 
    if cont.has_attr('class') == False: 
     print(cont.strip()) #Returns an error as text contains long dash 

他のテキストを処理するには、文字列から長いダッシュをどのようにフィルタリングできますか?私はそれを短いダッシュで置き換えるか、完全に削除することができます、彼らは私のために重要ではありません。

ありがとうございます!

答えて

1

あなたはBS4を使用し、それを抽出した後、データをきれいにする必要があります

  1. BS4は、いくつかのHTMLエンティティに変換されます、あなたはそれをあなたの自己を行う必要はありません。
  2. BS4は、このような何かがあなたのために仕事をするだろうあなたの

`` `

response = urllib.request.urlopen('website-im-opening') 

content = response.read() 

htmlcontent = BeautifulSoup(content,"html.parser") 

for cont in htmlcontent.find_all('p', class_=False): 

    print(p.text) 

` ``

+0

さて、デコード( 'utf-8')を削除する必要がありますが、ポイント1ではどういう意味ですか? – Banana

+0

@Bananaは私の更新をチェックするので、HTMLコードに何もしないでください。 –

+0

forループでcont.strip()を実行しても、私にはNoneTypeオブジェクトは呼び出し可能なエラーではありません。 – Banana

0

のための文書をデコードしますか?

# can replace '[long-dash]' with '' to remove instead 
>>> a = '—asasas—' 
>>> a.replace('\xe2\x80\x94', '[long-dash]') 
'[long-dash]asasas[long-dash]' 

か何かをあなたは彼らがいた場所を知りたいと思った場合にはその旨を:

# will only work if dashes are at either end 
>>> a = '—asasas—' 
>>> a.strip('\xe2\x80\x94') 
'asasas' 

それだけ が代わりに使用することができ、長いダッシュを削除しますか?

+0

私があなたが言及した方法で置き換えを試みたが、同様にエラーを返した。 – Banana

関連する問題