http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html
image.png

功能描述

image.png

定向爬虫的可行性

  1. 在页面查看源代码,发现使用HTML标签,故可以使用爬虫

image.png

  1. 查看根目录下robots.txt,发现是一个空目录,说明没有对爬虫进行限制

http://www.zuihaodaxue.cn/robots.txt

程序结构

image.png
image.png

程序编写

image.png

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import bs4
  4. def getHTMLText(url):
  5. try:
  6. r = requests.get(url, timeout=30)
  7. r.raise_for_status()
  8. r.encoding = r.apparent_encoding
  9. return r.text
  10. except:
  11. return ""
  12. def fillUnivList(ulist, html):
  13. soup = BeautifulSoup(html, "html.parser")
  14. for tr in soup.find('tbody').children: # 每一个大学数据都封装在一个<tr>标签中
  15. if isinstance(tr, bs4.element.Tag): # children中有可能出现string类型对象
  16. tds = tr('td')
  17. ulist.append([tds[0].string, tds[1].string, tds[3].string])
  18. def printUnivList(ulist, num):
  19. print("{:^10}\t{:^6}\t{:^10}".format("排名", "学校名称", "总分"))
  20. for i in range(num):
  21. u = ulist[i]
  22. print("{:^10}\t{:^6}\t{:^10}".format(u[0], u[1], u[2]))
  23. def main():
  24. uinfo = []
  25. url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
  26. html = getHTMLText(url)
  27. fillUnivList(uinfo, html)
  28. printUnivList(uinfo, 20) # 20 univs
  29. if __name__ == "__main__":
  30. main()

程序优化

  • 中文对齐问题

image.png

  • 所以更改采用中文字符填充

    修改输出格式

  • 这是一个通用的中西文混排输出实例

    1. def printUnivList(ulist, num):
    2. tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    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)))