python - 如何使用 BeautifulSoup4 获取 <br> 标签前的所有文本

标签 python html beautifulsoup scrapy

我正在尝试为我的应用抓取一些数据。我的问题是我需要一些 这是 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/

相关文章:

python - return 语句中的 Lambda 给出两个输出,但如果不使用 print 则只有一个输出

javascript - JavaScript 中的 Null 与空白

Python,美汤,获取所有类名

Python - 使用 BeautifulSoup4 的 Reddit 网络爬虫不返回任何内容

python - 使用特定于列的重复过滤器在 Python 中将行 append 到 CSV

python - 如何找到列表交集?

python - 从变量列表创建字典

html - 使 div 向左浮动,但如果文本太长则不为 "fall"

Html 电子邮件 - 设置优先级

python - Beautifulsoup,给url添加属性信息(资源id)