本文是学习http://www.icourse163.org/lea...课程的代码实现与反思。课程第六单元,如果将松田老师给的“中国大学排名爬虫”的优化代码,把url中的2016改为2017,就会报错。原因:2016年各校排名的html格式为1,2017年各校排名的html格式为1。为了解决这个问题,我对松田老师的代码做了一点修改。可能不是很漂亮,但是很高兴实现了这个功能happy。代码如下:importrequests,bs4,refrombs4importBeautifulSoupdefgetHTMLText(url):try:r=requests.get(url,timeout=30)r.raise_for_status()r.encoding=r.apparent_encodingreturnr.text除了:返回''deffillUnivList(ulist,html):soup=BeautifulSoup(html,'html.parser')fortrinsoup.find('tbody').children:ifisinstance(tr,bs4.element.Tag):yieldtr#使用生成器defpeidui(ulist,html):xlt=re.findall(r'\d{1,4}?',html)#tr使用最小匹配,iinzip(fillUnivList(uinfo,html),xlt):#使用zip一次循环两个变量tds=tr('td')ulist.append([i.replace('',''),tds[1].string,tds[3].string])defprintUnivList(ulist,num):tplt='{0:^10}\t{1:{3}^10}\t{2:^10}'print(tplt.format('排名','学校名称','总分',chr(12288)))foriinrange(num):u=ulist[i]print(tplt.format(u[0],u[1],u[2],chr(12288)))defmain():uinfo=[]url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html'html=getHTMLText(url)peidui(uinfo,html)printUnivList(uinfo,20)main()运行结果如下:排名来自最好的大学网站,它仅用作爬虫练习。排名不当的网友不要喷
