python中用requests库和BeautifulSoup库爬的大学排名

python中用requests库和BeautifulSoup库爬的大学排名,并写入文件中

代码如下:

import requests
from bs4 import BeautifulSoup
import bs4

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")
   # print(soup.find('tbody'))
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):#isinatance()认为子类是父类的一种类型,考虑继承关系
            tds=tr('td')#寻找所有tr下的td,等价于tds=tr.find_all('tr')
            ulist.append([tds[0].string,tds[1].string,tds[3].string])
            #.string指tr标签内的内容
            
def printUnivList(ulist,num):
    f=open('pythontxt\\universepaiming.txt','w')
    tplt="{0:^10}\t{1:{3}^10}\t{2:^10}"#{3}是指用chr(12288)填充,结合程序捕获用来作 分行居中显示,^表示居中
    print(tplt.format("排名","学校名称","总得分",chr(12288)),file=f)
    for i in range(num):
        u=ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)),file=f)
    f.close()

def main():
    uinfo=[]
    url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html"
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)   #前20所学校
main()

代码运行结果如下:

在这里插入图片描述
当中文字符宽度不够时,采用西文字符填充;中西文字符占用宽度不同。
这里用的是chr(12288)

内置format()函数

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
注意:花括号个数可以少于位置参数的个数,相反的话会报错。
比如
print(“我叫{},今年{}岁”.format(“小明”,“10”))
输出结果为 我叫小明,今年10岁
用{}来代表你要输入的变量

对齐方式的取值:

*>:左对齐
*<:右对齐
*^:居中
*=:在正负号(如果有的话)和数字之间填充,该对齐选项仅对数字类型有效。它可以输出类似 +0000120 这样的字符串

发布了9 篇原创文章 · 获赞 23 · 访问量 1258

猜你喜欢

转载自blog.csdn.net/weixin_43920952/article/details/104124767