[Python3爬虫从入门到精通]1.中国大学排名定向爬虫实例分析

 1 # 采用request-bs4路线实现了中国大学排名定向爬虫
 2 # 对中英文混排输出问题进行优化
 3 import requests
 4 from bs4 import BeautifulSoup
 5 import bs4
 6 #import bs4 为了使用它的标签类型定义
 7  
 8 def getHTMLText(url) :
 9     try:
10         r = requests.get(url, timeout = 30)
11         # print(r.status_code) 200为正常,其他信息都有误
12         r.raise_for_status()
13         r.encoding = r.apparent_encoding
14         return r.text
15     except:
16         return 'Get Failed.'
17  
18 def fillUnivList(ulist, html):
19     soup = BeautifulSoup(html, 'html.parser')
20     # print(soup[0:500]) 报错:TypeError: unhashable type: 'slice'
21     for tr in soup.find('tbody').children:
22         if isinstance(tr, bs4.element.Tag) :
23         # isinstance(object, classinfo) isinstance函数来判断一个对象是否为某个类型的实例
24         # tr有可能不是标签类型,此处判断起过滤的作用
25             tds = tr('td')
26             # 将所有的td标签放入列表tds中
27             # print(tds[0]) 输出:
28             # print(tds) 
29             ulist.append([tds[0].string, tds[1].string, tds[3].string])
30             
31 def printUnivList(ulist, num):
32     # tplt = '{:^10}\t{1:{3}^10}\t{:^10}' 报错:ValueError: cannot switch from automatic field numbering to manual field specification
33     tplt = '{0:^10}\t{1:{3}^10}\t{2:^10}'
34     # 其中0 表示第一个填充位置,1 第二个,以此类推
35     # :号后面带填充的字符,只能是一个字符,不指定的话默认是用半角空格填充
36     # print('{ :^10}\t{ :^6}\t{ :^10}'.format('排名', '学校名称', '总分')) //报错:KeyError: ' '
37     # print({:^10}\t{:^6}\t{:^10}.format('排名', '学校名称', '总分'))
38     print(tplt.format('排名', '学校名称', '总分', chr(12288)))
39     # chr(12288) 应该是全角空格
40     # 一个汉字也只算一个字符
41     for i in range(num):
42         u = ulist[i]
43         print(tplt.format(u[0], u[1], u[2], chr(12288)))
44  
45 def main():
46     uinfo = []
47     url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
48     html = getHTMLText(url)
49     fillUnivList(uinfo, html)
50     printUnivList(uinfo, 20)  # 20 univ
51 main()

 

posted @ 2017-09-02 21:17  云深~  阅读(524)  评论(0编辑  收藏  举报