从元素中提取某些文本

时间:2014-08-26 19:27:27

标签: python beautifulsoup

我试图提取div中第一组b标签中包含的文本。

我可以使用以下代码获取div标签中的源:

user = soup.find_all('div',{'class': 'userid ui-corner-small'})[-1]

这给了我:

<div id="postmenu_70080790" class="userid ui-corner-small">
<a href="/member.php?u=85569">
<b>username</b>
<img class="concat-general useronline" border="0" src="/blank.gif" />
</a>
<script type="text/javascript"> vbmenu_register("postmenu_70080790", true); </script>
<div class="usertitle">Level 8</div>
</div>

但是,我只想提取属于此div(username)中b标记内的文本。

我可以修改初始soup.find_all语句来执行此操作吗?或者我是否应该使用另一种方法来提取此文本?

1 个答案:

答案 0 :(得分:1)

这是一种方法:

>>> from bs4 import BeautifulSoup as bs
>>> data = '''
... <div id="postmenu_70080790" class="userid ui-corner-small">
... <a href="/member.php?u=85569">
... <b>username</b>
... <img class="concat-general useronline" border="0" src="/blank.gif" />
... </a>
... <script type="text/javascript"> vbmenu_register("postmenu_70080790", true); </script>
... <div class="usertitle">Level 8</div>
... </div>
... '''

>>> soup = bs(data)
>>> div_ele = soup.find('div')
>>> b_ele = div_ele.find('b')
>>> print b_ele.get_text()
username

如果有很多div(我假设您正在执行find_all()),那么您必须遍历每个user并执行{user.find('b') 1}}获取<b>代码,然后使用get_text()从中获取文字。

再看一下,我看到你正在做一个soup.find_all('div',{'class': 'userid ui-corner-small'})[-1],它会为你提供find_all()返回的列表中的最后一个元素。在这种情况下,你不会迭代结果,你只需要执行:

>>> b_ele = user.find('b')
>>> print b_ele.get_text()
username
相关问题