Python爬虫学习过程中遇到的AttributeError: 'NoneType' object has no attribute 'children'问题解决

Python爬虫学习过程中遇到的AttributeError: ‘NoneType’ object has no attribute 'children’问题解决

中国大学MOOC网上学习Python网络爬虫与信息提取时,运行嵩天老师的中国大学排名定向爬虫实例代码A时遇到了AttributeError: ‘NoneType’ object has no attribute 'children’的问题,通过百度检索到相关的文章并成功解决问题。
由于我的代码并未出现该文章中提到的timeoout=30的错误,在阅读文章下方的评论后,我发现我的代码中url的开头为https,尝试改为http后解决问题,输出大学排名的爬取结果
在此冒昧引用该文章里的两段话,对以后的编程有很好的启示作用,若有侵权问题会立即删除。

属性错误:‘NoneType’ 对象没有属性 ‘children’ ,这个错误提示告诉我们 ‘children’ 属性的对象 soup 是一个空类型,那就意味着soup = BeautifulSoup(html,‘html.parser’)中soup并没有得到解析出来的html页面,那就是说在调用getHTMLText(url)函数时这个函数并没有得到url链接对应的网页信息。所以错误可能出现在getHTMLText(url)函数中,然后仔细审查getHTMLText(url)函数中代码发现单词打错。
总之:这四个函数之间各有分工,但是又紧密相连,任何一个出现问题都可能导致其它函数报错,所以我们找错时不能只局限于报错的那一行代码
————————————————
版权声明:本文为CSDN博主「爱搬砖的小迷糊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36525166/article/details/81216848

#CrawUnivRankingA.py
import requests
from bs4 import BeautifulSoup
import bs4
 
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        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 = 'https://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'#注意此处的url开头为https
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20) # 20 univs
main()

url中的https改为http后,输出以下结果:

排名           学校名称       总分    
    1            清华大学      95.9   
    2            北京大学      82.6   
    3            浙江大学       80    
    4           上海交通大学     78.7   
    5            复旦大学      70.9   
    6            南京大学      66.1   
    7           中国科学技术大学           65.5   
    8           哈尔滨工业大学    63.5   
    9           华中科技大学     62.9   
    10           中山大学      62.1   
    11           东南大学      61.4   
    12           天津大学      60.8   
    13           同济大学      59.8   
    14          北京航空航天大学           59.6   
    15           四川大学      59.4   
    16           武汉大学      59.1   
    17          西安交通大学     58.9   
    18           南开大学      58.3   
    19          大连理工大学     56.9   
    20           山东大学      56.3   
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值