soup = BeautifulSoup("<p>'hello'<a>'my link'</a></p>", 'html.parser')
print(soup.p.string)
None
輸出是否正常?
無法獲取開始和結束標記之間的文本
soup = BeautifulSoup("<p>'hello'<a>'my link'</a></p>", 'html.parser')
print(soup.p.string)
None
輸出是否正常?
無法獲取開始和結束標記之間的文本
雖然<\p>
無效,但lxml會嘗試關閉第一個標記,因此此代碼有效。 html.parser在這個領域做得不好。
soup = BeautifulSoup("<p>'hello'<a>'my link'</a></p>", 'lxml')
print(soup.p.get_text(strip=True))
,輸出:
'hello''my鏈接'
>>>soup = BeautifulSoup("<p>adA<a>asda</a>asda</p>")
>>> soup.p
<p>adA<a>asda</a>asda</p>
>>> soup.p.text
u'adAasdaasda'
我認爲BS不能真正得到只有幾段文字,因爲有AA標籤嵌套在裏面。我認爲,當你嘗試獲取文本時,它會遞歸地從所有子節點獲取文本並將其附加到輸出中。
包括一個詳細的解釋如何解決問題的問題,不要只寫代碼。 –
由於最初發布的<\p>
只是一個錯字,這是您的問題實際上是關於什麼。
這是關於如何.string
在BeautifulSoup
工作。它的工作原理不同,這取決於元素的子 - if an element has multiple children, it returns None
:
如果一個標籤包含一個以上的事情,那麼,目前還不清楚應該是指什麼
.string
,所以.string
被定義爲None
公告,如何.string
爲p
元素爲None
,但a
它不是:
In [1]: from bs4 import BeautifulSoup
In [2]: soup = BeautifulSoup("<p>'hello'<a>'my link'</a></p>", 'html.parser')
In [3]: print(soup.p.string)
None
In [4]: print(soup.p.a.string)
'my link'
獲得元素的文本正確的,更可靠的方法是通過.get_text()
:
In [5]: print(soup.p.get_text(strip=True))
'hello''my link'
這只是一個輸入錯誤在這裏計算器。糾正它。 – Hamza