簡體   English   中英

Feedparser 無法正確解析 email 正文

[英]Feedparser not parsing email body properly

我正在嘗試使用 feedparser 通過將其作為原始文本提要輸入來解析以下內容(來自 gmail email 正文)。 我將在頁面上顯示它,因此我希望它看起來像在 email 正文中所做的那樣,並且正在使用 feedparser 來幫助清理內容。

來自 GMail 的原始 email 主體,其中每個測試#(例如 testing1、testing2 等)都在一個新行上:

<div dir="ltr">testing1<div>testing2</div><div>testing3</div><div>testing4</div><div>testing5</div><div>testing6</div><div>  testing1<div>testing2</div><div>testing3</div><div>testing4</div><div>testing5</div><d
iv>testing6</div><div>  testing1<div>testing2</div><div>testing3</div><div>testing4</div><div>testing5</div><div>testing6</div></div><div>  testing1<div>testing2</div><div>testing3</div><div>testing4</div><div>t
esting5</div><div>testing6</div></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Bob Johnson<br>(123) 456-7890</div></div></div></div>

然后我將它輸入到一個 RSS 提要中,如下所示:

<rss version="2.0">
                    <channel>
                    <title>Created Feed</title>
                    <item><title>test2</title>
                            <pubDate>Sun, 23 May 2021 21:38:03 -0400</pubDate>
                            <link>elysiumreader+yac41zdxipljzcfl@gmail.comSun23May20212138030400</link>
                            <content><div dir="ltr">testing1<div>testing2</div><div>testing3</div><div>testing4</div><div>testing5</div><div>testing6</div><div>  testing1<div>testing2</div><div>testing3</div><div>testing4</div><div>testing5</div><d
iv>testing6</div><div>  testing1<div>testing2</div><div>testing3</div><div>testing4</div><div>testing5</div><div>testing6</div></div><div>  testing1<div>testing2</div><div>testing3</div><div>testing4</div><div>t
esting5</div><div>testing6</div></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Bob Johnson<br>(123) 456-7890</div></div></div></div>
</content>
</channel>
</rss>

這最終被解析如下,它丟失了行之間的換行符,最終看起來像
標簽將其丟棄並停止正確解析。

{'title': 'test2', 'title_detail': {'type': 'text/plain', 'language': None, 'base': '', 'value': 'test2'}, 'published': 'Sun, 23 May 2021 21:38:03 -0400', 'published_parsed': time.struct_time(tm_year=2021, tm_mo
n=5, tm_mday=24, tm_hour=1, tm_min=38, tm_sec=3, tm_wday=0, tm_yday=144, tm_isdst=0), 'links': [{'rel': 'alternate', 'type': 'text/html', 'href': 'www.test.com/blablabla'}
], 'link': 'www.test.com/blablabla', 'content': [{'type': 'application/xhtml+xml', 'language': None, 'base': '', 'value': 'testing1testing2testing3testing4testing5testing6
\xa0 testing1testing2testing3testing4testing5testing6\xa0 testing1testing2testing3testing4testing5testing6\xa0 testing1testing2testing3testing4testing5testing6<br /></div>-- <br /><div class="gmail_signature" di
r="ltr"><div dir="ltr">Bob Johnson<br />(123) 456-7890</div></div></div></div>'}], 'summary': 'testing1testing2testing3testing4testing5testing6\xa0 testing1testing2testing3testing4testing5testing6\xa0 testing1tes
ting2testing3testing4testing5testing6\xa0 testing1testing2testing3testing4testing5testing6<br /></div>-- <br /><div class="gmail_signature" dir="ltr"><div dir="ltr">Bob Johnson<br />(123) 456-7890</div></div></div></div>'}

任何想法或想法將不勝感激。 謝謝

RSS 基本上是一個 XML 文檔,所以它必須遵循相當嚴格的規則。 您從 Gmail 中提取的 HTML 標記破壞了 RSS 文檔。 如果您希望提要包含 HTML 標記,則需要對 HTML 實體進行編碼或將內容包裝在CDATA部分中,然后再將其添加到 RSS 提要。

使用標准庫對 HTML 實體進行編碼:

>>> from html import escape
>>> escape('<div dir="ltr">testing1<div>testing2')
'&lt;div dir=&quot;ltr&quot;&gt;testing1&lt;div&gt;testing2'

對於 CDATA:

>>> body='<div dir="ltr">testing1<div>testing2'
>>> print(f"<![CDATA[{body}]]>")
<![CDATA[<div dir="ltr">testing1<div>testing2]]>

這兩個選項只影響標記,即使它看起來很嚇人,它也會正確顯示給最終用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM