nonetype object has no attribute find_all
AttributeError: ‘NoneType’ object has no attribute ‘children’ 错误
在运行嵩天老师python爬虫课中单元6中的实例“中国大学排名爬虫”会出现如下图错误:AttributeError: ‘NoneType’ object has no attribute ‘children’ 意思是 ‘NoneType’ 对象没有属性 ‘children’ ,这个错误说明’children’ 属性的对象 soup 是一个空类型,那就意味着soup = BeautifulSoup(html,‘html.parser’)中soup并没有得到解析出来的html页面,那就是说在调用getHTMLText(url)函数时这个函数并没有得到url链接对应的网页信息。错误就出在get 在Python编程中,特别是在进行网页抓取(网络爬虫)时,可能会遇到`AttributeError: 'NoneType' object has no attribute 'children'`这样的错误。这个错误表明在尝试访问一个对象的`children`属性时,该对象实际上是`None`类型,也就是说它是一个空值。在给定的上下文中,这个错误出现在运行嵩天老师的Python爬虫课程中的“中国大学排名爬虫”实例。 在解释这个问题之前,我们先了解一下关键的库和函数。这里用到的是`requests`库来获取网页内容,以及`BeautifulSoup`库来解析HTML文档。`getHTMLText(url)`函数负责从给定URL获取HTML文本,而`fillUnivList(ulist, html)`函数则将解析后的HTML内容填充到列表`ulist`中,用于存储大学排名信息。 当出现`AttributeError`,问题通常出在`BeautifulSoup(html, 'html.parser')`这一行。在这里,`html`变量应该是从`getHTMLText(url)`返回的HTML文本。如果`getHTMLText(url)`没有成功获取到HTML内容,那么`html`将为`None`,导致在尝试调用`children`属性时出现错误。 在描述中提到,经过检查`getHTMLText(url)`函数本身没有问题,这提示我们错误可能在于URL。原始的URL `https://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html`无法正确加载,可能是由于网址过期或更改。通过浏览器验证,确实发现正确的URL应为 `http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html`,其中HTTP协议由HTTPS更改为HTTP,并且顶级域名由.cn更改为.com。 修复URL之后,程序能够正常运行并从网页抓取大学排名数据。`fillUnivList()`函数遍历`tbody`元素的`children`,对每个表格行(`tr`元素)提取相关信息,如排名、学校名称和总分,并将它们添加到`ulist`中。`printUnivList(ulist, num)`函数则用于打印列表的前`num`个条目。 总结来说,`AttributeError: 'NoneType' object has no attribute 'children'`是由于尝试访问一个空对象的属性引起的。在进行网络爬虫时,确保正确处理可能出现的网络请求错误,如超时、找不到页面等,以及确保所使用的URL是有效的。在本例中,通过检查和更新URL,问题得到了解决。在编写网络爬虫程序时,良好的错误处理和数据验证机制是非常重要的,以防止因外部因素导致的程序中断。