美丽的汤返回无

时间:2013-04-12 10:05:31

标签: python beautifulsoup

我有以下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

但我得到的结果是关系状态:并且打印状态为打印无。 我做错了什么?

2 个答案:

答案 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

为你的例子。