关于AttributeError: ‘NoneType‘ object has no attribute ‘children‘报错问题分析

在mooc上学习了一下嵩天老师的python网络爬虫与信息提取。跟着嵩天老师打出来的代码运行后产生以上报错。

看了一位博主的文章,他分析是代码关键字码错了(可能他那个时候这个url还是好用的)。其实代码写对了,目前也是运行不了的。因为嵩天老师课程上的url已经失效了!

附上以下图片:

从图片上我们可以看到,从一开始的链接就已经发生了错误。

我们不妨用一个新的url来巩固一下我们的成果。我在这里用的url是:【软科排名】2021年最新软科中国大学排名|中国最好大学排名

我们打开页面源代码,发现没有嵩天老师课程里的内容,于是我们只按名次爬取大学中英文名和学校类型,附上以下源码(根据嵩天老师代码结构,我这里用了极少的方法):

import requests    
from bs4 import BeautifulSoup
import bs4


def getHTMLText(url):#与嵩天老师代码一样
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        return ""

#以下代码是我根据网页源码,发现中英文名和学校类型属于同一层级,都在标签a和b中,于是我直接
#遍历所有a和b,但是我发现,前面也有同名标签,于是用数组来取断前面同名标签,并将标签内的字
#符串内容存入数组ulist
def fillUnivList(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find_all(['a','p'])[15:40]:
        ulist.append(tr.string)
    pass

#同一学校的内容在同一行打印:
def printUnivList(ulist):
    for i in range(0,22,3):
        print("{}--{}--{}".format(ulist[i],ulist[i+1],ulist[i+2]))


def main():
    uinfo = []
    url = "https://www.shanghairanking.cn/rankings/bcur/201611"
    html = getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo) #20colleges
main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值