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
文章配图

一键三连,就差你了
文章配图

预览时标签不可点

阅读




__