实例【Python爬取中国前20强大学】前20大学的结果

直接给出代码,代码里注释很详细哈

# 从网络上获取大学排序网页的内容,并按一定的格式输出
from bs4 import BeautifulSoup
import bs4
import requests
# 从网络上获取大学排序网页的内容
def getHTMLText(url):
    try:
        r = requests.get(url,timeout=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:
        # 检测tr标签的类型,如果tr标签的类型不是bs4.element.Tag就过滤掉
        if isinstance(tr, bs4.element.Tag):
            # 将所有的td标签存为列表类型tds。
            tds = tr('td')
            # 在ulist中增加相应的列表字段(排名,大学名称,大学总分)
            ulist.append([tds[0].string,tds[1].string,tds[3].string])

# 利用数据结构展示并输出就结果

def printUniveList(ulist,num):
    # 打印表头
    '''  其中0 表示第一个填充位置,1 第二个,以此类推
    :号后面带填充的字符,只能是一个字符,不指定的话默认是用半角空格填充
    /t表示一个tap键
    ^ 、 < 、 > 分别是居中、左对齐、右对齐,后面带宽度
    {:^10}表示居中显示,占10个字符宽度
    {1:{3}^10},填充为什么是填充3个,为什么是在1号位填充:
    第一,中英文全半角造成不对齐的原因产生在1号位;
    第二,分析实例【Python爬取中国前20强大学】前20大学的结果,为排名、大学名称、总分,3个地方需填充,即为3; '''
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    # format()函数也是一个格式化字符串,chr(12288)中文字符空格填充
    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)
    printUniveList(uinfo,20) # 20所大学的信息
main()

猜你喜欢

转载自blog.csdn.net/qq_44105778/article/details/86173788