簡體   English   中英

提取文本之間 <br> 與beautifulsoup,但沒有下一個標簽

[英]Extracting text between <br> with beautifulsoup, but without next tag

我正在使用python + beautifulsoup來嘗試在br之間獲取文本。 我最接近的是通過以下方式使用next_sibling:

<html>
<body>
</a><span class="strong">Title1</span>
<p>Text1</p>
<br>The Text I want to get<br>
<p>Text I dont want</p>
</body>
</html>

for span in soup.findAll("span", {"class" : "strong"}):
    print(span.next_sibling.next_sibling.text)

但這打印:

The Text I want to getText I dont want

所以我想要的是在第一個p之后,但在第二個之前,但我無法弄清楚當沒有真正的標簽時如何提取,只有br作為參考。

我需要打印:

The Text I want to get

由於您提供HTML已損壞 ,因此BeautifulSoup使用的解析器與解析器的行為會有所不同。

對於lxml解析器BeautifulSoup會將br標記轉換為自關閉標記:

>>> soup = BeautifulSoup(data, 'lxml')
>>> print soup
<html>
<body>
<span class="strong">Title1</span>
<p>Text1</p>
<br/>The Text I want to get<br/>
<p>Text I dont want</p>
</body>
</html>

請注意,您需要安裝lxml 如果它對你沒問題 - 找到br並獲得下一個兄弟:

from bs4 import BeautifulSoup

data = """your HTML"""
soup = BeautifulSoup(data, 'lxml')

print(soup.br.next_sibling)  # prints "The Text I want to get"

另見:

使用Python Scrapy

In [4]: hxs.select('//body/text()').extract()
Out[4]: [u'\n', u'\n', u'\n', u'The Text I want to get', u'\n', u'\n']

暫無
暫無

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

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