使用 beautifulsoup 在 <br> 之间提取文本,但没有下一个标签
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 之后,第二个 p 之前,但是当没有真正的标签,只有 br 作为参考时,我不知道如何提取。
我需要它来打印:
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']
由于您提供的 HTML 已损坏 ,其行为将不同于 BeautifulSoup
使用的 parser to parser。
在 lxml
parser 的情况下,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"
另见:
- Using beautifulsoup to extract text between line breaks (e.g. <br /> tags)
- Parsing unclosed `<br>` tags with BeautifulSoup
我正在使用 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 之后,第二个 p 之前,但是当没有真正的标签,只有 br 作为参考时,我不知道如何提取。
我需要它来打印:
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']
由于您提供的 HTML 已损坏 ,其行为将不同于 BeautifulSoup
使用的 parser to parser。
在 lxml
parser 的情况下,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"
另见:
- Using beautifulsoup to extract text between line breaks (e.g. <br /> tags)
- Parsing unclosed `<br>` tags with BeautifulSoup