【发布时间】:2020-01-10 02:43:37
【问题描述】:
假设我有一些类似下面的 HTML。
<p>This is the beginning of the text. <em>Italicized middle</em> This is the end of the text.</p>
这是一个标签,里面有另一个标签。我可以使用 Beautiful Soup 来获取它的内容:
list_of_tags = full_html.findAll()
for tag in list_of_tags:
print(tag.find(text = True))
打印出来的:
This is the beginning of the text.
Italicized middle
它切断了结尾部分——包含标签之后的所有内容。怎么才能找到那部分?
【问题讨论】:
-
用一个简单的算法而不是用漂亮的汤来达到你想要的效果怎么样?
-
@Mox 你这是什么意思?你的意思是解析它并以不同的方式剥离标签吗?
-
BS 适用于解析 HTML——这不是问题。为什么不直接使用
elem.text?这给出了整个文本内容,例如:print(BeautifulSoup('<div>a<div>b</div>c</div>', 'lxml').find('div').text)打印abc。否则,我有点不确定您实际上要在这里定位/生产什么。您是否需要将之前和之后以及子元素作为不同的实体?我认为 NavigableString 可能是你的朋友。 -
@ggorlen 好主意——我忘记了。这对于提取文本非常有用,但我试图在输出文件中保留斜体。 .text 方法不允许我判断文本最初位于 标记中。你知道这是否可能吗?
-
当然。你到底想完成什么?只需将每个孩子放在
p中,并将<em>s 与纯文本节点或其他内容区分开来?
标签: python html web-scraping beautifulsoup