2016-12-08 7 views
0

メールメッセージの内容を抽出したかったのですが、これはHTMLコンテンツで、BeautifulSoupを使用して、From、To、件名を取得します。本文の内容を取得すると、最初の行だけが取得されます。それは残りの行と段落を残します。美味しいスープを使ってHTMLからすべてのテキストコンテンツを解析する方法

ここでは、すべての行/段落を読み込む方法が不足しています。

CODE:

email_message = mail.getEmail(unreadId) 
print (email_message['From']) 
print (email_message['Subject']) 

if email_message.is_multipart(): 
    for payload in email_message.get_payload(): 
     bodytext = email_message.get_payload()[0].get_payload() 
     if type(bodytext) is list: 
      bodytext = ','.join(str(v) for v in bodytext) 
else: 
    bodytext = email_message.get_payload()[0].get_payload() 
    if type(bodytext) is list: 
     bodytext = ','.join(str(v) for v in bodytext) 
print (bodytext) 
parsedContent = BeautifulSoup(bodytext) 
body = parsedContent.findAll('p').getText() 
print body 

コンソール:

body = parsedContent.findAll('p').getText() 
AttributeError: 'list' object has no attribute 'getText' 

私は

body = parsedContent.find('p').getText() 

を使用する場合それはコンテンツの最初の行をフェッチし、それが印刷されていません残りの行

は、HTMLタグからすべての行を取得した後、私は、各行の最後に=シンボルを取得しても& NBSP追加されました。,&が表示されます。これらを克服する方法。

抽出されたテキスト:最初の

親愛なる、GenWattで私たちのすべてが 顧客としてXYZてきて喜んでいます。  私はあなたのアカウント マネージャーとして自分自身を紹介したいと思います。  ご不明な点がありましたら、 に電話をして に電話をかけるか、ash = [email protected]までメールしてください。  あなた また、次の番号にGenWattに連絡することができます: メイン: 810-543-1100Sales:810-545-1222Customerサービス&サポート: 810-542-1233Fax:810-545-1001IはGenWattはあなたを提供します確信しています よく、私たちの関係を見てほしい=

+1

を行うことを正確にthe sameであることはあなたのHTML内のすべての '' でリストを返します。 parsedContent.findAll( 'p')]でpの[p.getText()を使ってすべての 'p'のコンテンツを取得するか、以下のようにすべてのコンテンツを取得できます:content = '\ n'.join([p.getText() parsedContent.findAll parsedContent.findAllでの段落の(「P」)]) – GustavoIP

+0

(「P」): 値= paragraph.textあなたが解析する方法 –

+0

を述べた私は内容を理解していないこの権利 よう プリント値 &nsbp;または を返す方法

答えて

2

は、あなたが見ることができますsoup.findAll('p')

python -i test.py 
---------- 
import requests 
from bs4 import BeautifulSoup 

bodytext = requests.get("https://en.wikipedia.org/wiki/Earth").text 
parsedContent = BeautifulSoup(bodytext, 'html.parser') 

paragraphs = soup.findAll('p') 
---------- 

>> type(paragraphs) 
<class 'bs4.element.ResultSet'> 
>> issubclass(type(paragraphs), list) 
True # It's a list 

の結果を点検してみましょうか?それはすべてのパラグラフのリストです。コンテンツにアクセスするには、リストを繰り返し処理するか、通常のリストのようにインデックスで要素にアクセスする必要があります。 List Comprehensionあなたのコードの意志を使用し

>> # You can print all content with a for-loop 
>> for p in paragraphs: 
>>  print p.getText() 
Earth (otherwise known as the world (...) 
According to radiometric dating and other sources of evidence (...) 
...  

>> # Or you can join all content 
>> content = [] 
>> for p in paragraphs: 
>>  content.append(p.getText()) 
>> 
>> all_content = "\n".join(content) 
>> 
>> print(all_content) 
Earth (otherwise known as the world (...) According to radiometric dating and other sources of evidence (...) 

は、次のようになります。

parsedContent = BeautifulSoup(bodytext) 
body = '\n'.join([p.getText() for p in parsedContent.findAll('p')] 

私は

body = parsedContent.find('p').getText() 

を使用する場合には、コンテンツの最初の行をフェッチし、それが残りの を印刷していませんライン。

parsedContent.find('p')を行いますのfindAll( 'P')parsedContent.findAll('p')[0]

>> parsedContent.findAll('p')[0].getText() == parsedContent.find('p').getText() 
True 
+0

すべての段落を抽出すると、私は**   **の問題を避ける方法を得るか、または

関連する問題