首页 > 技术文章 > 爬虫--慕课爬取大学排名的程序

tianqianlan 2018-08-07 21:50 原文

本文采取的路线是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)))

 

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

 

推荐阅读