写在前面
学习嵩天老师爬虫基础课后,第一次编写的爬虫实例,因为那个大学排名网的网页代码变了,所以老师的源代码包括我在网上查的好多同学代码都不适用,排查良久,问题区间缩小到网页标签节点上。
望后来者鉴之。
1.问题
<td> 1 <!----> </td>
<td> <a> 清华大学</a> <p> </p> <!----> </td>
<td> 北京 <!----> </td>
<td> 综合 <!----> </td>
<td> 852.5 <!----> </td>
<td> 38.2 </td>
</tr>
问题就在于多该网页代码的某些td标签里多了空注释标签。相当于多了一个节点,还有就是最后的td标签里面的元素多了些空格换行,这就为难到我胖虎了,哼,不虚。
2.解决锚点
1.需要加一层索引
2.字符串.strip()
3.修改说明
1.获取大学信息;
2.
3.原码
1. # 爬取由上海交通大学开发的最好大学网 http://www.zuihaodaxue.cn/
# 中国大学排名网页 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html import requests from bs4 import BeautifulSoup import bs4
def getHTMLText(url):
try:
r = requests.get(url,timeoout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist,html):
soup = BeautifulSoup(html,'html.parser')
for tr in soup.find('tbody').children:
if isinstance(tr,bs4.element.Tag):
tds = tr('td')
ulist.append([tds[0].string,tds[1].string,tds[2].string]) def
printUnivList(ulist,num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
print(tplt.format("排名","学校名称","总分",chr(12288)))
for i in range(num):
u = ulist[i]
print(tplt.format(u[0],u[1],u[2],chr(12288))) def main():
uinfo = []
url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html'
html = getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo,20) #20 表示取前20所大学 main()
4.改码
好大学网部分网址代码(简化)
<tr>
<td> 1 <!----> </td>
<td> <a> 清华大学</a> <p> </p> <!----> </td>
<td> 北京 <!----> </td>
<td> 综合 <!----> </td>
<td> 852.5 <!----> </td>
<td> 38.2 </td>
</tr>
1. # 爬取由上海交通大学开发的最好大学网 http://www.zuihaodaxue.cn/
# 中国大学排名网页 https://www.shanghairanking.cn/rankings/bcur/2020 import requests from bs4 import BeautifulSoup import bs4
def 网站文本(url):#模块化思想,值得学习
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def 获取大学信息(ulist,r_text):
soup = BeautifulSoup(r_text,'lxml')#lxml解析器,不错
s=soup.find('tbody').contents
for 元素 in s:
if isinstance(元素,bs4.element.Tag):
六个td标签 = 元素('td')
ulist.append([六个td标签[0].contents[0].string,六个td标签[1].contents[0].string,六个td标签[4].contents[0].string])
def 打印大学信息(ulist,num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
print(tplt.format("排名","学校名称","总分",chr(12288)))
for i in range(num):
u = ulist[i]
print(tplt.format(u[0].strip(),u[1],u[2].strip(),chr(12288))) def
main():
x = []
url = 'https://www.shanghairanking.cn/rankings/bcur/2020'
html = 网站文本(url)
获取大学信息(x,html)
打印大学信息(x,20) #20 表示取前20所大学 main()
5.图
图片:
6.小诗一首,贴上
雨息
时,2020年11月17日,克一难题,兴起 ,恰雨天 ,恰天暮,作之。
道法三千年,呈平恨离天。
去滋琢未影,万物果犹然。
总结 :万物本为常,奈何多瑕思。
大道至简,然简由繁来,多生变化,循迹景吾,自,攻无不克。(第无数次犯错。吐槽)
纪念之…
生活愉快!