簡體   English   中英

美麗的湯解析錯誤

[英]Beautiful Soup Parsing Error

我試圖使用beautifulsoup首先刪除html字符串中的<a>標記,但要保留其內容。 之后,我想刪除所有標簽並用新行替換它們。

strip_tags函數來自此文章

這是我要執行的操作的一個示例:

text = "<p>This is a <a>test</a></p>"
soup = strip_tags(text, ["a"])
plain_text = soup.get_text("\n")
print(plain_text)

由於某種原因,輸出為u'This is a \\ntest' 如果<a>標簽已經被剝離,為什么會認為它仍然存在?

預期的輸出是This is a test

一個更復雜的示例: <p>First</p><a>Link</a><p>Second</p>

如何在<p>標記之間進行分隔,並且仍然能夠剝離<a>標記?

確實,如果您打印soup.encode_contents() ,則沒有<a>

strip_tags函數來自此文章

該函數以遞歸方式用標簽中包含的文本替換標簽。

因此,您的'<a>test</a>'被替換為'test' 那里沒有'<a>'標簽。

之所以這樣,是因為strip_tags函數正在操縱NavigableStrings。 (這就是為什么您在strip_tags中看到所有unicode強制轉換的原因)

當您運行soup.get_text(“ \\ n”)時,即使沒有<a>標記,它也會看到NavigableString的所有元素並在拆分處添加“ \\ n”。

為什么不只使用get_text()獲取已刪除標簽的文本?

text = "<p>This is a <a>test</a> man</p> <p> more stinking <a>p</a> tags </p>"
plain_text = BeautifulSoup(text, 'html.parser')
ptags = plain_text.find_all('p')
mytext = ""
for tag in ptags:
    mytext = mytext + tag.get_text() + "\n"
print(mytext)

暫無
暫無

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

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