BeautifulSoup获取字符串为None

网页源文件

            <tbody>

                  <tr>

                    <td>1</td>
                    <td class="align-left">
                    <a href="World-University-Rankings/Harvard-University.html" target="_blank">哈佛大学</a>

                    </td>
                    <td><a href="./World-University-Rankings-2016/USA.html" target="_blank"><img src="./houtai/templates/flag/USA.png"></a></td>

                    <td class="hidden-xs">1</td>

                    <td>100.0</td>
                    <td class="hidden-xs need-hidden alumni">100.0</td>

                        <td class="hidden-xs need-hidden award" style="display:none;">100.0</td>

                    <td class="hidden-xs need-hidden hici" style="display:none;">100.0</td>
                    <td class="hidden-xs need-hidden ns" style="display:none;">100.0</td>
                    <td class="hidden-xs need-hidden pub" style="display:none;">100.0</td>
                    <td class="hidden-xs need-hidden pcp" style="display:none;">79.2</td>
                </tr>
            </tobody>

如下代码:

def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string, tds[1].string, tds[5].string])

出错结果:
这里写图片描述

原因:

用 .string 属性来提取标签里的内容时,该标签应该是只有单个节点的。比如上面的 <td>1</td> 标签那样。

修改代码如下:

def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            astr = tds[1].find('a')
            ulist.append([tds[0].string, astr.string, tds[5].string])

正确结果:
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值