爬虫实例:爬取中国大学排名Top20
2021年02月21日 23:00 __ _ _ _ _

世界上没有一条道路是重复的,也没有一个人生是能够替代的。
——余华《活着》

在学习对HTML页面信息的提取后,下面以实例来学习爬取网页。
首先 找到需要爬取的网页 :https://www.shanghairanking.cn/
,再验证robots协议,如下:https://www.shanghairanking.cn/robots.txt

可以看到该网站并未对爬虫做出相关限制。
对大学排名网页爬取的 要求 为:
输入:大学排名URL链接。
输出:大学排名信息的输出(排名,大学名称,总分)。
技术路线:Requests+bs4。
定向爬虫:仅对输入URL进行爬取,不扩展爬取。
简单步骤:
1.从网络上获得大学排名的网页内容。
2.提取网页内容中信息到合适的数据结构。
3.利用数据结构展示并输出结果。
其中,最重要的便是在网页的代码中 找到相关的标签并且进行分析
,比如下图中,我们首先用快捷键Ctrl+F查找某个大学的名字,这里小编查找的是清华大学,按Enter键后会自动搜索到相关位置。找到大学名称后,在对相关标签进行分析,比如与大学名称相关的标签为a,与大学地址相关的标签为td标签,再向上找到某一所大学信息相关的标签,即tr,在tr标签内,包含了清华大学相关的所有内容;再向上找到包含所有学校信息的标签,即tbody标签。

实例源代码:
import requestsfrom bs4 import BeautifulSoupimport bs4def getThmltext(url):#获取网页内容 try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding=r.apparent_encoding#修改编码 return r.text except: return ""
def fillUnivlist(info,html):#查找相关信息 soup=BeautifulSoup(html,"html.parser") for tr in soup.find('tbody').children: if isinstance(tr,bs4.element.Tag): tds=tr('td') info.append([str(tr('td')[0].contents[0]).strip(), tds[1].a.string, str(tr('td')[4].contents[0]).strip()]) return info
def printUnivlist(info,num):#打印相关数据 print("{:^10}\t{:^6}\t{:^10}".format("排名","学校","总分")) for i in range(num): u=info[i] print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
def main(): info=[] url='https://www.shanghairanking.cn/rankings/bcur/2020' html=getThmltext(url) info=fillUnivlist(info,html) printUnivlist(info,20)#20个学校信息main()
运行结果:

Python爬虫系列,未完待续…


为你,千千万万遍.
往期推荐:
小Bob的2020文章系列总结~ 2021-02-19
如何利用BeautifulSoup库查找HTML上的内容 2021-02-20
投资理财:基金杂谈 2021-02-08
一键三连,就差你了
预览时标签不可点
阅读
__
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小Bob的博客!











