这里有一个更简单的理解方式:你可以通过解析“p”标签得到你想要的输出。
from bs4 import BeautifulSoup
doc = """
<div>
<p class="tabbed" style="margin-top:2px;"><span class="tab"><strong>LANGUAGES</strong></span>Cantonese</p>
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>English</p>
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>Putonghua</p>
<p class="tabbed"><span class="tab"><strong>GENDER</strong></span>Male</p>
</div>
"""
soup = BeautifulSoup(doc, "lxml")
ptags = soup.find_all("p", attrs={'class':'tabbed'})
for ptag in ptags:
print ptag.contents[1].string.strip()
这将为您提供每个“p”标签的输出,如下所示
Cantonese
English
Putonghua
Male
现在,如果您只想要第 4 个 ptag 的值,您可以用这一行替换上面的“for 循环”。假设您确定您总是想要第 4 个 ptag 的值,请执行以下操作
print ptags[3].contents[1].string.strip()
会给出输出:
Male
解释:
ptags = soup.find_all("p", attrs={'class':'tabbed'})
这会返回一个 ResultSet - 基本上是一个 ptag 列表。在您的案例中,每个 ptag 都有两个元素,即 span 标签和字符串。
print ptags
[<p class="tabbed" style="margin-top:2px;"><span class="tab"><strong>LANGUAGES</strong></span>Cantonese</p>,
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>English</p>,
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>Putonghua</p>,
<p class="tabbed"><span class="tab"><strong>GENDER</strong></span>Male</p>]
现在对于每个 ptag,如果您打印其内容“ptag.contents”,它会返回标签中的元素列表
例如:
for ptag in ptags:
print ptag.contents
将给予:
[<span class="tab"><strong>LANGUAGES</strong></span>, u'Cantonese']
[<span class="tab"></span>, u'English']
[<span class="tab"></span>, u'Putonghua']
[<span class="tab"><strong>GENDER</strong></span>, u'Male']
现在你想要列表中的第二个元素,所以只需获取第二个元素
for ptag in ptags:
print ptag.contents[1].string.strip()
输出:
Cantonese
English
Putonghua
Male
仅打印第 4 个 ptags
print ptags[3].contents[1].string.strip()
输出:
Male