【Python爬虫学习】中国大学排名网页爬虫实战

功能描述:
定向爬取中国大学排名网页的排名信息,包括学校名称,学校排名,所在省市

技术路线:
requests——bs4(BeautifulSoup)

核心操作:

1.熬制一锅汤

soup = BeautifulSoup(html,“html.parser”)

2. soup.find(‘tbody’).children:

在html页面中发现大学排名信息都存在:tbody标签下的名为’td’的tr标签中。找出包含所有tbody下的tr标签

3. 用isinstance()判断类型:

tr标签有的是Tag类型,有的不是,排名信息只存在Tag类型中,,留下Tag类型的tr标

4. 中文对齐问题

使用format函数搭配chr(12288)进行对齐操作


全部程序

import bs4
import requests
from bs4 import BeautifulSoup

def getHTMLTEXT(url):
    """通过最好大学排名网站url获得网页Html信息"""
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        print("网页信息爬取成功!")
        return r.text
    except:
        print("爬取失败")




def fillUnivList(ulist,html):
    """从html页面内容中提取出大学排名信息,填入ulist中"""
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:      #关键操作,从html页面中发现大学的信息都包含在tbody标签中
        if isinstance(tr,bs4.element.Tag):      #tbody标签含有的子节点不一定都是Tag类型,用isinstnce区分一下
            tds = tr('td')                      #将包含院校信息的tr标签(即名称为td的标签)存入列表tds
            ulist.append([tds[0].string,tds[1].string,tds[2].string])



def printUnivList(ulist,num):
    """将存在ulist中的院校信息打印出来"""
    # print("{:^10}\t{:^10}\t{:^10}\t".format("排名","学校名称","省市"))
    # for i in range(num):
    #     u = ulist[i]
    #     print("{:^10}\t{:^10}\t{:^10}\t".format(u[0],u[1],u[2]))

    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}\t"        #制定一个输出模板,按0、1、2、3数字位置填充输出的内容
    print(tplt.format("排名","学校名称","省事",chr(12288)))
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))
    print("Suc" + str(num))


def main():
    uinfo = []
    url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2020.html"
    html = getHTMLTEXT(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)

if __name__ == '__main__':
    main()

你可能感兴趣的:(爬虫)