我正在尝试为我的应用抓取一些数据。我的问题是我需要一些 这是 HTML 代码:
<tr>
<td>
This
<a class="tip info" href="blablablablabla">is a first</a>
sentence.
<br>
This
<a class="tip info" href="blablablablabla">is a second</a>
sentence.
<br>This
<a class="tip info" href="blablablablabla">is a third</a>
sentence.
<br>
</td>
</tr>
我希望输出看起来像
This is a first sentence.
This is a second sentence.
This is a third sentence.
这有可能吗?
最佳答案
这当然是可能的。我会稍微笼统地回答,因为我怀疑您只想处理那 block HTML。
首先,获取指向td
元素的指针,
td = soup.find('td')
现在,请注意您可以获得该元素的子元素的列表,
>>> td_kids = list(td.children)
>>> td_kids
['\n This\n ', <a class="tip info" href="blablablablabla">is a first</a>, '\n sentence.\n ', <br/>, '\n This\n ', <a class="tip info" href="blablablablabla">is a second</a>, '\n sentence.\n ', <br/>, 'This\n ', <a class="tip info" href="blablablablabla">is a third</a>, '\n sentence.\n ', <br/>, '\n']
这个列表中的一些项目是字符串,一些是 HTML 元素。至关重要的是,有些是 br
元素。
您可以首先通过查找将列表拆分为一个或多个列表,
isinstance(td_kid[<some k>], bs4.element.Tag)
对于列表中的每一项。
然后,您可以遍历每个子列表,通过将它们变成 soup 来重复替换标签,然后获取这些子列表的子列表。最终,您将拥有几个仅包含 BeautifulSoup 所称的“可导航字符串”的子列表,您可以像往常一样操作它们。
将元素连接在一起,然后我建议您使用正则表达式 sub
消除空格,如下所示:
result = re.sub(r'\s{2,}', '', <joined list>)
关于python - 如何使用 BeautifulSoup4 获取 <br> 标签前的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48722571/