一,AttributeError: 'NoneType' object has no attribute 'children', 网页'tbody'没有子类

很明显,报错的意思是说tbody下面没有children,说明我们在gethtmltext的时候可能出现了问题,可以用print(r.status.code)测试,发现并不是200,print(r.raise_for_status())返回的值也是None ,其次 gethtmltext返回的也是 error,说明我们并没有成功下载网页源码。错误原因猜测

1,zuihaodaxue.com网站采取了反爬机制

2,由于教程录制时间久远,url网址错误

第一种情况,加上代理头和cookies测试,发现一样提示 AttributeError: 'NoneType' object has no attribute 'children' ,最后发现是我自己 r.text 写成了 r.txt

def gethtmltext(url):
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"}
cooks={"cookies":"Hm_lvt_2ce94714199fe618dcebb5872c6def14=1558142987; Hm_lpvt_2ce94714199fe618dcebb5872c6def14=1558147316"}
try:
r=requests.get(url,headers=headers,cookies=cooks,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return "error"

2,发现老师给的网址是zuihaodaxue.cn,现在网站更新变成了.com,所以换成 http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html 即可解决问题

如果还存在问题那么大部分原因可能是单词拼写错误。

以下为正确代码:

 def gethtmltext(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return "error" if __name__ == '__main__':
url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"

二,format()函数格式错误——ValueError: Invalid format specifier

以下代码错误:提示ValueError: Invalid format specifier

 def printunivlist(urlist,num):
tplt = "{0:^6}\t{1:{3}^10}\t{2:^10}\t{3:^10}"
print(tplt.format("排名","学校","地区","总分",chr(12288)))
for i in range(num):
u = urlist[i]
print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))

以下代码正确:

 def printunivlist(urlist,num):
tplt = "{0:^6}\t{1:{4}^10}\t{2:^10}\t{3:^10}"
print(tplt.format("排名","学校","地区","总分",chr(12288)))
for i in range(num):
u = urlist[i]
print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))

可以看出,仅仅是1:{3}^10和1:{4}^10的差别。

原因分析:

第二行改为#这里添加了tplit = "{0:^10}\t{1:{3}^10}\t{2:^10}" ;{3:^10}”你添加了地区,相应的作为填充不足10个字符长度的chr(12288)已经不是3了,而是4。

在这里很多同学肯定会问{1:{3}^10},填充为什么是填充3个或4个,为什么是在1号位填充:

第一,中英文全半角造成不对齐的原因产生在1号位;

第二,分析实例【Python爬取中国前20强大学】前20大学的结果,为排名、学校名称、总分,3个地方需填充,即为3;

第三:后面加入省市,为排名、学校名称、总分、省市,4个地方需要填充,即为4;

转载来源:https://blog.csdn.net/Andone_hsx/article/details/84025828

最后贴上我的代码:

 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 "error" def fillunivlist(urlist,html):
soup = BeautifulSoup(html,"html.parser")
for tr in soup.find("tbody").children:
if isinstance(tr,bs4.element.Tag):
tds = tr("td") #将所有标签存为一个列表
urlist.append([tds[0].string,tds[1].string,tds[2].string,tds[4].string]) def printunivlist(urlist,num):
tplt = "{0:^6}\t{1:{4}^10}\t{2:^10}\t{3:^10}"
print(tplt.format("排名","学校","地区","总分",chr(12288)))
for i in range(num):
u = urlist[i]
print(tplt.format(u[0],u[1],u[2],u[3],chr(12288))) if __name__ == '__main__':
unifo=[]
url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"
html=gethtmltext(url)
fillunivlist(unifo,html)
printunivlist(unifo,20)

嵩天老师python网课爬虫实例1的问题和解决方法的更多相关文章

  1. Python提示AttributeError 或者DeprecationWarning: This module was deprecated解决方法

    Python提示AttributeError 或者DeprecationWarning: This module was deprecated解决方法 在使用Python的sklearn库时,发现sk ...

  2. Sublime2编译Python程序EOFError:EOF when reading a line解决方法【转】

    在Sublime2中编译运行Python文件时,如果代码中包含用户输入的函数时(eg. raw_input()),Ctrl+b编译运行之后会提示以下错误: 解决方法:安装SublimeREPL打开Su ...

  3. python网课自动刷课程序-------selenium+chromedriver

    python的强大之处就在于有许多已经写好的功能库提供,这些库强大且易用,对于写一些有特定功能的小程序十分方便. 现在就用pyhton的selenium+谷歌游览器写一个可以自动刷课的程序,以智慧树上 ...

  4. Python面向对象-类、实例的绑定属性、绑定方法和__slots__

    绑定属性 从之前的文章中,我们知道python是动态语言——实例可以绑定任意属性. 那如果实例绑定的属性和类的属性名一样的话,会是什么情况呢? >>> class Student(o ...

  5. Pyhton网络爬虫实例_豆瓣电影排行榜_Xpath方法爬取

    -----------------------------------------------------------学无止境------------------------------------- ...

  6. 在Python中调用glutInit遇到OpenGL.error.NullFunctionError的解决方法

    在window10 64bit + Python环境下,通过pip install PyOpenGL成功之后,无奈执行到glutInit()时候总是报错. OpenGL.error.NullFunct ...

  7. python报错:SyntaxError: Non-ASCII character '\xe5'的解决方法

    最近在学习机器学习,上面的代码都是一些python代码,对于python只是会一些基础性的东西,刚才就遇到了一个比较low的问题,但是还是记录一下吧. 在python代码中出现了中文,但是我又把# - ...

  8. SqlServer 由于未在SqlServer的此实例上安装复制组件解决方法

    sqlserver2005在复制订阅时出现: “由于未在SqlServer的此实例上安装复制组件,Microsoft SQL server 无法访问这些组件,请参阅SQL Server……” 解决方法 ...

  9. Python默认编码错误SyntaxError: Non-ASCII character '\xe5'之解决方法

    在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* 解决方法: py ...

随机推荐

  1. flex布局简单兼容性写法

    /* 定义 */ .flex-def { display: -webkit-box; /* 老版本语法: Safari, iOS, Android browser, older WebKit brow ...

  2. ZR10.1青岛集训三地联考

    ZR10.1青岛集训三地联考 谢谢dijk和smy A 题目大意: 已知斐波那契数列\(f\) 设 \[ F_i = \sum_{i = 0}^nf_if_{n - i} \] 求 \[ \sum_{ ...

  3. Java 学习笔记(10)——容器

    之前学习了java中从语法到常用类的部分.在编程中有这样一类需求,就是要保存批量的相同数据类型.针对这种需求一般都是使用容器来存储.之前说过Java中的数组,但是数组不能改变长度.Java中提供了另一 ...

  4. C# struct和class

    文字说明 值类型,存储于堆栈,存在于计算机内存逻辑区域中 引用类型,存储在堆中,位于计算机的不同逻辑位置 struct是值类型 推荐较小的数据类型使用,因为结构的大小会影响应用程序的性能 修改实际上是 ...

  5. .data()与.detach()的区别

    .data()和.detach()都可以获取Variable内部的Tensor,但.detach()更加安全 https://zhuanlan.zhihu.com/p/38475183

  6. 《提升能力,涨薪可待》-Java并发之AQS全面详解

    欢迎关注公众号[Ccww笔记],原创技术文章第一时间推出 一.AQS是什么?有什么用? AQS全称AbstractQueuedSynchronizer,即抽象的队列同步器,是一种用来构建锁和同步器的框 ...

  7. 最长无重复子串问题 leetcode 3

    一.代码及注释 class Solution { public: int lengthOfLongestSubstring(string s) { int n = s.size(); //字符串的长度 ...

  8. 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。-----力扣

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  9. $Noip2018/Luogu5021$ 赛道修建 二分+树形

    $Luogu$ $Sol$ 一直以为是每个点只能经过一次没想到居然是每条边只能经过一次$....$ 首先其实这题$55$分的部分分真的很好写啊,分别是链,数的直径和菊花图,这里就不详细说了. 使得修建 ...

  10. 「CodeForces 476A」Dreamoon and Stairs

    Dreamoon and Stairs 题意翻译 题面 DM小朋友想要上一个有 \(n\) 级台阶的楼梯.他每一步可以上 \(1\) 或 \(2\) 级台阶.假设他走上这个台阶一共用了 \(x\) 步 ...