Возврат основного текста с помощью BeautifulSoup - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь использовать BeautifulSoup, чтобы очистить HTML-теги от того, что было возвращено с помощью ExchangeLib.На данный момент у меня есть следующее:

from exchangelib import Credentials, Account
import urllib3
from bs4 import BeautifulSoup

credentials = Credentials('myemail@notreal.com', 'topSecret')
account = Account('myemail@notreal.com', credentials=credentials, autodiscover=True)

for item in account.inbox.all().order_by('-datetime_received')[:1]:
    soup = BeautifulSoup(item.unique_body, 'html.parser')
    print(soup)

Как есть, при использовании exchangeLib будет получено первое электронное письмо из моего почтового ящика через Exchange, и будет напечатана, в частности, unique_body, которая содержит основной текст электронного письма.,Вот пример вывода из print(soup):

<html><body><div>
<div><span lang="en-US">
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;">Hey John,</span></font></div>
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;"> </span></font></div>
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;">Here is a test email</span></font></div>
</span></div>
</div>
</body></html>

Моя конечная цель - напечатать его:

Hey John,
Here is a test email

Из того, что я читаю в документации BeautifulSoup,процесс очистки попадает между моей строкой "Soup ="" и последней строкой print.

Моя проблема в том, что для запуска фрагмента очистки BeautifulSoup требуется класс и теги h1, такие как: name_box = soup.find(‘h1’, attrs={‘class’: ‘name’}), однако из того, что у меня сейчас есть, у меня ничего этого нет.

Как кто-то новичок в Python, как мне поступить так?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы можете попробовать Find_all, чтобы получить все значения тега font, а затем выполнить итерацию.

from bs4 import BeautifulSoup
html="""<html><body><div>
<div><span lang="en-US">
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;">Hey John,</span></font></div>
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;"> </span></font></div>
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;">Here is a test email</span></font></div>
</span></div>
</div>
</body></html>"""

soup = BeautifulSoup(html, "html.parser")
for span in soup.find_all('font'):
      print(span.text)

Вывод:

Hey John,

Here is a test email
0 голосов
/ 01 марта 2019

Вам необходимо распечатать содержимое тега шрифта.Вы можете использовать метод select и передать ему селектор типа для элемента font.

from bs4 import BeautifulSoup as bs

html = '''
<html><body><div>
<div><span lang="en-US">
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;">Hey John,</span></font></div>
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;"> </span></font></div>
<div style="margin:0;"><font face="Calibri,sans-serif" size="2"><span style="font-size:11pt;">Here is a test email</span></font></div>
</span></div>
</div>
</body></html>
'''

soup = bs(html, 'lxml')

textStuff = [item.text for item in soup.select('font') if item.text != ' ']
print(textStuff)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...