爬虫--慕课爬取大学排名的程序

本文采取的路线是requests-bs4库:

我们学会分析,这张图找到,标签<td>..<td>

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import bs4
 4 
 5 def getHTMLText(url):
 6     try:
 7         r = requests.get(url)
 8         r.raise_for_status()
 9         r.encoding = r.apparent_encoding
10         return r.text
11     except:
12         return "产生异常"
13 
14 def fillUnivList(ulist, html):
15     soup = BeautifulSoup(html, "html.parser")
16     for tr in soup.find("tbody").children:
17         #检测tr标签,是否为bs4.element.Tag定义的类型
18         if isinstance(tr, bs4.element.Tag):
19             tds = tr("td")#查询td标签
20             ulist.append([tds[0].string, tds[1].string, tds[3].string])#添加二维列表
21 
22 def printUnivList(ulist, num):
23     print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
24     for i in range(num):
25         u = ulist[i]
26         print("{:^10}\t{:^10}\t{:^12}".format(u[0], u[1], u[2]))
27 
28 def main():
29     uinfo = []
30     url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html"
31     html = getHTMLText(url)
32     fillUnivList(uinfo, html)
33     printUnivList(uinfo, 20)
34 
35 main()

 

此时我们可以看到,打印出的结果,对齐的效果,并没有预想的好,以下是原因。

 

 

 

此时将代码改为

1 def printUnivList(ulist, num):
2     tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"#{1:{3}^10},这个里面1和3对应format里面的顺序,而“:” 后面的内容表示填充内容,当长度不够时将自动填充,数字0,1,2必不可少
3     print(tplt.format("排名","学校名称","总分",chr(12288)))
4     for i in range(num):
5         u = ulist[i]
6         print(tplt.format(u[0], u[1], u[2], chr(12288)))

 

现在看起来好多了,中英文编码问题,很常见,可以这种方式解决。

 

转载于:https://www.cnblogs.com/tianqianlan/p/9439709.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值