在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()