Разделение сообщения электронной почты в формате HTML (<div>) с BeautifulSoup - PullRequest
0 голосов
/ 23 сентября 2019

Я получил HTML из писем, которые я собрал, и мне нужно извлечь HTML из текста первого тела без HTML-части сообщений потока.

Существует два варианта того, как электронная почтаможет прибыть:

  1. Когда в электронном письме есть цепочка сообщений, оно всегда сопровождается подписью (To :, From :, и т. д.), которая распознается, когда появляется сообщение.

  2. Если в электронном письме нет цепочки сообщений, это я получил, просто найдя ('p'), а затем выполнив get_text ()

Вот пример того, с чем я работаю:

<html>
 <body>
  <div class="WordSection1">
   <p class="MsoNormal" style="text-autospace:none">
     Basic text...
     <o:p>
     </o:p>
   </p>
   <p class="MsoNormal" style="text-autospace:none">
     the end
   </p>
   <div>
    <div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
     <p class="MsoNormal">
      <b>
        From: XXXX
      </b>
       <b>
        To: XXXX
       </b>
       <b>
        Date: XX/XX/XXXX
       </b>
     </p>
    </div>
   </div>
   <p align="center" class="MsoNormal" style="text-align:center">
     Re: hello world
     <o:p>
     </o:p>
   </p>
   <p class="MsoNormal">
     bye bye
   </p>
  </div>
 </body>
</html>

То, что я уже сделал, которое получает текст без заботы, если в письме есть нить или нет:

def extract_body(_htmlbody):

    body_list = []
    if _htmlbody == 'text/calendar':
        plain = 'text/calendar'
        body_list.append(plain)
    else:
        parsedhtml = BeautifulSoup(_htmlbody, 'html.parser')
        html = '\n'.join([p.getText() for p in parsedhtml.findAll('p')])
        body_list.append(html)

    return body_list

Я ищу что-то вроде:

body_list = ['Basic text... /nthe end']

body_html = "
<html>
 <body>
  <div class="WordSection1">
   <p class="MsoNormal" style="text-autospace:none">
     Basic text...
     <o:p>
     </o:p>
   </p>
   <p class="MsoNormal" style="text-autospace:none">
     the end
   </p>
 </body>
</html>
"

thread_list = ['Re: hello world/nbye bye']

thread_html = "
<html>
 <body>
  <div>
   <p align="center" class="MsoNormal" style="text-align:center">
     Re: hello world
     <o:p>
     </o:p>
   </p>
   <p class="MsoNormal">
     bye bye
   </p>
  </div>
 </body>
</html>
"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...