如何使用python + beautifulsoup抓取标签外的项目

时间:2015-08-25 21:15:07

标签: python web-scraping beautifulsoup

使用python + beautifulsoup,假设我有<class 'bs4.element.Tag'>个对象,a

<div class="class1"><em>text1</em> text2</div>

我可以使用以下命令提取text1 text2并将其放入b

b = a.text

我可以使用以下命令提取text1并将其放入c

c = a.findAll("em")[0].text

但我怎样才能提取text2

2 个答案:

答案 0 :(得分:2)

我略微编辑了您的HTML代码段,以便在 Application.Current.Shutdown(); 标记内外只有一个单词,以便getText()<em>容器中提取所有文本,从而导致以下输出:

<div>

如您所见,这只是一个删除了'text1 foo bar text2 foobar baz' 标记的字符串。据我所知,您希望从<em>容器中的内容中删除<em>标记的内容。

我的解决方案不是很好,但可以使用.replace()<div>标记的内容替换为空字符串<em>来完成。由于这可能会导致前导或尾随空格,您可以调用.lstrip()来删除那些:

''

打印声明的输出:

#!/usr/bin/env python3
# coding: utf-8

from bs4 import BeautifulSoup

html = '<div class="class1"><em>text1 foo bar</em> text2 foobar baz</div>'
soup = BeautifulSoup(html, 'html.parser')

result = soup.getText().replace(soup.em.getText(), '').lstrip()

print(result)

答案 1 :(得分:2)

您可以删除div父级的所有子级,然后获取父级的内容,如下所示:

>>> a = BeautifulSoup(out_div, 'html.parser')
>>> for child in a.div.findChildren():
...     child.replace_with('')
...     
<em>text1</em>
>>> a.get_text()
u' text2'