首页 > 编程语言 > 详细

用python实现中国大学排名的定向爬取

时间:2020-02-22 20:32:34      阅读:76      评论:0      收藏:0      [点我收藏+]

1.此操作的实现需要引入 requests库bs4中的BeautifulSoup库

2.我们这次爬取网页 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html 的排名信息

3.打开源代码,发现我们要爬取的所有学校信息(排名、学校名称、总分)均包含在 tbody 标签下,而tbody的子标签tr标签包含了一所学校的全部信息,tr标签下的多个td标签对应一所学校的各项参数,这就包括我们需要的信息。如下图:(由于源代码是横向,所以我截取了开头与结尾,最好自己打开网站看一下)

 


技术分享图片


 

技术分享图片


 

4.上代码

import requests
import bs4
from bs4 import BeautifulSoup

#函数一:从网络上获取大学排名网页内容。
def getHtml(url):
   try:
        r = requests.get(url, timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""


#函数二:提取网页内容中信息到合适的数据结构。
def fillList(ulist, html):
  soup = BeautifulSoup(html, "html.parser")
  soup.find("tbody")           #找到 “tbody”
  
for tr in soup.tbody.childern:     #遍历 “tbody”的子标签, 找到 “tr”
    if isinstance(tr, bs4.element.Tag):  #过滤非标签类型的字符串 检测 tr 标签的类型
      tds = tr("td")
      ulist.append([tds[0].string, tds[1].string, tds[2].string])#将我们需要的td标签添加到列表中
  
#函数三:利用数据结构展示并输出结果 def printList(demo, num):
  tplt = "{:^10}\t{1:{3}^10}\t{2:^10}"             #保证中文输出对齐
  print(tplt.format("排名", "学校名称", "总分", chr(12288))) #print函数打印表头 for i in range(num):                      #控制打印学校之数量               
    u = ulist[i]     print(tplt.format(u[0], u[1], u[2], chr(12288)))
#函数四:main函数 def main(): uinfo = [] url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html" html = getHtml(url) fillList(uinfo, html) printList(uinfo, 20) main()

5.效果展示:

    技术分享图片

6.注意点:(1).append([元素])

      (2)中文对齐的优化, 应用广泛

 

    小白第一次写博,若有不当之处, 请各位明示,谢谢 。最后,望武汉之疾快快褪去!

 

用python实现中国大学排名的定向爬取

原文:https://www.cnblogs.com/wharder/p/12339745.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!