我试图提取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
语句来执行此操作吗?或者我是否应该使用另一种方法来提取此文本?
答案 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