[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()