[关闭]
@myles 2017-04-13T16:50:21.000000Z 字数 2388 阅读 1704

实例:大学网络排名爬取

python爬虫学习

一、爬虫所用技术

技术路线:requests+BeautifulSoup
目标URL: http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html

二、程序设计

1.1 设计思路

  1. 使用requests库,爬取大学排名网站html源码
  2. 使用BeautifulSoup库解析提取大学排名信息,并填充到一个空列表中;
  3. 打印输出提取信息

1.2 html结构分析

1.2.1 HTML 源码标签结构

分析HTML源码中存放大学排名的tag标签结构

  1. <tbody class="hidden_zhpm" style="text-align:center;">
  2. <tr class="alt">
  3. <td>1</td>
  4. <td><div align="left">清华大学</div></td>
  5. <td>北京市</td><td>95.9</td><td class="hidden-xs need-hidden indicator5">100.0</td>
  6. <td class="hidden-xs need-hidden indicator6" style="display:none;">97.90%</td>
  7. <td class="hidden-xs need-hidden indicator7" style="display:none;">37342</td>
  8. ......
  9. </tr>
  10. <tr>
  11. <td>2</td>
  12. <td><div align="left">北京大学</div></td>
  13. <td>北京市</td>
  14. <td>82.6</td>
  15. <td class="hidden-xs need-hidden indicator5">98.9</td><td class="hidden-xs need-hidden indicator6" style="display:none;">95.96%</td>
  16. ......
  17. </tr>
  18. ......
  19. <tbody>

1.2.2 HTML 源码标签结构梳理

  1. <tbody>
  1. <tr>
  2. <td>1<td>
  3. <td>清华大学<td>
  4. <td>北京市<td>
  5. <td>95.9</td>
  6. ......
  7. <\tr>
  1. <tr>
  2. <td><td>
  3. <td><td>
  4. <td><td>
  5. ......
  6. <\tr>
  1. <tr>
  2. <td><td>
  3. <td><td>
  4. <td><td>
  5. ......
  6. <\tr>
  1. ......
  2. <\tbody>

三、实例代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Date : 2017-04-07 21:54:45
  4. # @Author : myles
  5. # @Version : $Id$
  6. import requests
  7. from bs4 import BeautifulSoup
  8. import bs4
  9. # 1.网页源码下载
  10. def getHTMLText(_url):
  11. try:
  12. r = requests.get(_url)
  13. r.raise_for_status()
  14. r.encoding = r.apparent_encoding
  15. return r.text
  16. except:
  17. return "getHTMLtext Error..."
  18. # 2.大学排名数据提取,并存入列表
  19. def getUnivList(_html,_Univlst):
  20. soup = BeautifulSoup(_html,'html.parser')
  21. for tr in soup.find('tbody').children: #注意find 与find_all使用场景不同
  22. if isinstance(tr,bs4.element.Tag):
  23. tds = tr.find_all('td')
  24. _Univlst.append((tds[0].string,tds[1].string,tds[3].string))
  25. # 3.打印输出大学排名输出(前20)
  26. def printUnivLst(_Univlst, _num):
  27. tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
  28. print(tplt.format("排名","学校名称","总分",chr(12288)))
  29. for x in range(_num):
  30. u = _Univlst[x]
  31. print(tplt.format(u[0],u[1],u[2],chr(12288)))
  32. """
  33. def printUnivLst(_Univlst):
  34. tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
  35. print(tplt.format("排序","大学名称","总分",chr(12288)))
  36. for x in range(len(_Univlst)):
  37. u = _Univlst[x]
  38. print(tplt.format(u[0],u[1],u[2],chr(12288)))
  39. """
  40. # 4.定义主函数
  41. def main():
  42. url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
  43. Univlst = []
  44. num = 20
  45. html = getHTMLText(url)
  46. getUnivList(html,Univlst)
  47. printUnivLst(Univlst,num)
  48. #printUnivLst(Univlst)
  49. # 5. 调用主函数
  50. main()

四、代码运行效果

排名    学校名称    总分
1    清华大学    95.9
2    北京大学    82.6
3    浙江大学    80
4   上海交通大学   78.7
5    复旦大学    70.9
6    南京大学    66.1
7  中国科学技术大学  65.5
8  哈尔滨工业大学   63.5
9   华中科技大学   62.9
10    中山大学    62.1
11    东南大学    61.4
12    天津大学    60.8
13    同济大学    59.8
14  北京航空航天大学  59.6
15    四川大学    59.4
16    武汉大学    59.1
17   西安交通大学   58.9
18    南开大学    58.3
19   大连理工大学   56.9
20    山东大学    56.3

五、学习收获

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注