使用BeautifulSoup得到"' NoneType'对象没有属性' children'"

时间:2017-03-14 14:38:16

标签: python python-3.x beautifulsoup

Parser获得中国最好的大学名单。我得到了#NoneType'对象没有属性'孩子''错误讯息:

  

文件" C:/ Projects / Beijing Python / Week 2 / Unit 06.py",第22行,在fillUnivList中       在汤中寻找tr(' tbody')。孩子:

     

AttributeError:' NoneType'对象没有属性'孩子'

如果我检查," soup.find(' tbody')。孩子"声明没问题。怎么了?

import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_stasus()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""


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[3].string])


def printUnivList(ulist, num):
    print("{:^10}\t{:^6}\t{:^10}".format('排名', '学校名称', '总分'))
    for i in range(num):
        u = ulist[i]
        print("{:^10}\t{:^6}\t{:^10}".format(u[0], u[1], u[2]))


def main():
    uinfo = []
    url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20)
main()

1 个答案:

答案 0 :(得分:1)

我假设您的request对象没有raise_for_stasus()。这是一个错字 - 它是raise_for_status()。您也可以使用status_code

否则

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        if r.status_code  == 200:
            r.encoding = r.apparent_encoding
            return r.text
    except  Exception, e:
        print (e)
        return ""

将您的find更改为for tr in soup.find('tbody', class_="hidden_zhpm").children:

似乎工作。