美化组父标记

2024-04-26 09:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些html,我想从中提取文本。下面是html的一个示例:

<p>TEXT I WANT <i> &#8211; </i></p>

现在,很明显,这个文档中有很多<p>标记。因此,find('p')不是获取要提取的文本的好方法。但是,<i>标记是文档中唯一的标记。所以,我想我可以找到<i>然后去找父母。

我试过:

up = soup.select('p i').parent

以及

up = soup.select('i')
print(up.parent)

我试过用.parents,我试过find_all('i')find('i')。。。但我总是得到:

'list' object has no attribute "parent"

我做错什么了?


Tags: 方法text文档标记文本示例htmlfind
3条回答

select()find_all()都返回一个元素数组。你应该这样做:

for el in soup.select('i'):
    print el.parent.text

这是有效的:

i_tag = soup.find('i')
my_text = str(i_tag.previousSibling).strip()

输出:

'TEXT I WANT'

如其他答案所述,find_all()返回一个列表,而find()返回第一个匹配项或None

如果您不确定是否存在i标记,可以使用try/except

find_all()返回一个列表。find('i')返回第一个匹配元素,即None

因此,使用:

try:
    up = soup.find('i').parent
except AttributeError:
    # no <i> element

演示:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<p>TEXT I WANT <i> &#8211; </i></p>')
>>> soup.find('i').parent
<p>TEXT I WANT <i> – </i></p>
>>> soup.find('i').parent.text
u'TEXT I WANT  \u2013 '

相关问题 更多 >