我有以下HTML代码,我使用美丽的汤来提取信息。我想得到例如关系状态:关系
<table class="box-content-list" cellspacing="0">
<tbody>
<tr class="first">
<td>
<strong>
Relationship status:
</strong>
Relationship
</td>
</tr>
<tr class="alt">
<td>
<strong>
Living:
</strong>
With partner
</td>
</tr>
我创建了以下代码:
xs = [x for x in soup.findAll('table', attrs = {'class':'box-content-list'})]
for x in xs:
#print x
sx = [s for s in x.findAll('tr',attrs={'class':'first'})]
for s in sx:
td_tabs = [td for td in s.findAll('td')]
for td in td_tabs:
title = td.findNext('strong')
#print str(td)
status = td.findNextSibling()
print title.string
print status
但我得到的结果是关系状态:并且打印状态为打印无。 我做错了什么?
答案 0 :(得分:3)
在旧的BeautifulSoup版本中有一种特殊的方法get_text
(或getText
)来获取复杂标记的内容。举个例子:
>>> example.td.get_text(' ', strip=True)
'Relationship status: Relationship'
第一个参数是要使用的分隔符。
答案 1 :(得分:1)
首先,不需要所有列表推导;你的没有但是复制结果,没有它们你可以安全地做。
您的列中有否下一个兄弟(只有一个 <td>
标记),因此返回None
。您希望从标题(.next
标记)获取<strong>
属性:
for table in soup.findAll('table', attrs = {'class':'box-content-list'}):
for row in table.findAll('tr',attrs={'class':'first'}):
for col in row.findAll('td'):
title = col.strong
status = title.nextSibling
print title.text.strip(), status.strip()
打印:
Relationship status: Relationship
为你的例子。