区块链技术博客
www.b2bchain.cn

Python爬虫入门实例三之爬取软科中国大学排名

这篇文章主要介绍了Python爬虫入门实例三之爬取软科中国大学排名的讲解,通过具体代码实例进行17995 讲解,并且分析了Python爬虫入门实例三之爬取软科中国大学排名的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=17995

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

文章目录

    • 写在前面
    • 一、爬取原界面
      • 1.网站连接
      • 2.爬取内容
    • 二、编程思路
      • 1.功能描述
      • 2.程序的结构设计
    • 三、编写函数
      • 1.函数getHTMLText()
      • 2.函数fillUnivList()
      • 3.函数printUnivList()
    • 四、完整代码
    • 引用源自

写在前面

  这个例子是笔者今天在中国大学MOOC(嵩天 北京理工大学)上学习的时候写下来的。但是很快写完之后我就发现不对劲,首先课程给的例子是中国好大学网站的排名,但是现在这个网站已经重构了,原来的链接进去是软科的大学排名,所以之前的代码就需要做一些修改,在我不懈的努力下(各种瞎折腾,走了很多弯路),现在基本成功了,写这篇博客记录一下。

一、爬取原界面

1.网站连接

链接:https://www.shanghairanking.cn/rankings/bcur/2020.

2.爬取内容

  本例爬取的是下图的排名、大学名称、总分三个内容。
Python爬虫入门实例三之爬取软科中国大学排名

二、编程思路

  这一部分嵩天老师在课中给出了讲解,这里我整理分享给大家。

1.功能描述

输入:大学排名URL链接

输出:大学排名信息的屏幕输出(排名,大学名称,总分)

技术路线:requests­–bs4

定向爬虫:仅对输入URL进行爬取,不扩展爬取

注:requestts和bs4库的使用只能获取静态页面的信息,如何获取动态页面信息,我会在后边专门写篇文章详细说明

2.程序的结构设计

步骤一:从网络上获取大学排名网页内容:定义函数getHTMLText()

步骤二:提取网页内容中信息到合适的数据结构:定义函数fillUnivList()

步骤三:利用数据结构展示并输出结果:定义函数printUnivList()

三、编写函数

  在编写函数前,首先我们要先看一下网页的源代码
Python爬虫入门实例三之爬取软科中国大学排名
  通过对网页源代码的观察,我们可以看到,所有大学信息被封装在一个表格中,这个表格的标签叫tbody,在tbody中,每个大学的信息被封装在一个标签中,这个标签叫tr,每个tr标签里又有一个td标签,每个大学的具体信息就被这个标签包围,但是大学的名字是被包在a标签中的,这里要做处理。
  所以我们首先遍历tbody标签,获得所有大学信息,然后在tbody标签中找到tr标签,获得每个大学信息,最后在tr标签里找到td标签,把我们需要的相关数据写在我们的ulist列表中。

注:
  1.由于大学名称被a标签包含,所以我们可以定义一个列表存放a标签内容(与td标签区别开)。
  2.为了视觉方面更加美观,可采用中文字符的空格填充 chr(12288),其实就是为了对齐。

1.函数getHTMLText()

  从网络上获取大学排名网页内容。

def getHTMLText(url):#获取URL信息,输出内容     try:         r = requests.get(url,timeout = 30)         r.raise_for_status()         r.encoding = r.apparent_encoding         return r.text     except:         return"" 

2.函数fillUnivList()

  提取网页内容中信息到合适的数据结构.

def fillUnivList(ulist,html):#将html页面放到ulist列表中(核心)     soup = BeautifulSoup(html,"html.parser")     for tr in soup.find('tbody').children:         if isinstance(tr,bs4.element.Tag):#如果tr标签的类型不是bs4库中定义的tag类型,则过滤掉             a = tr('a')#将所有的a标签存为一个列表类型             tds = tr('td')#将所有的td标签存为一个列表类型             ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[4].string.strip()]) 

注:这里要注意的是,要注意使用strip()函数,它的作用是用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。但该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。用在此处可以使爬取的内容,在格式化输出时达到对齐的效果。

3.函数printUnivList()

  利用数据结构展示并输出结果:定义函数。

def printUnivList(ulist1,num):#打印出ulist列表的信息,num表示希望将列表中的多少个元素打印出来     #格式化输出     tplt = "{0:^10}t{1:{3}^12}t{2:^10}"     # 0、1、2为槽,{3}表示若宽度不够,使用format的3号位置处的chr(12288)(中文空格)进行填充     print(tplt.format("排名","学校名称","总分",chr(12288)))     for i in range(num):         u = ulist1[i]         print(tplt.format(u[0], u[1], u[2],chr(12288)))     print()     print("共有记录"+str(num)+"条") 

四、完整代码

''' 功能描述: 输入:大学排名URL 输出:大学排名信息的屏幕输出(排名,大学名称,总分) 技术路线:requests—bs4(只能获取静态页面信息) 定向爬虫:仅对输入URL进行爬取,不扩展爬取  程序的结构设计: 1.从网络上获取大学排名网页内容:定义函数getHTMLText() 2.提取网页内容中信息到合适的数据结构:定义函数fillUnivList() 3.利用数据结构展示并输出结果:定义函数printUnivList() ''' import requests from bs4 import BeautifulSoup import bs4  ulist1=[]  def getHTMLText(url):#获取URL信息,输出内容     try:         r = requests.get(url,timeout = 30)         r.raise_for_status()         r.encoding = r.apparent_encoding         return r.text     except:         return""  def fillUnivList(ulist,html):#将html页面放到ulist列表中(核心)     soup = BeautifulSoup(html,"html.parser")     for tr in soup.find('tbody').children:         if isinstance(tr,bs4.element.Tag):#如果tr标签的类型不是bs4库中定义的tag类型,则过滤掉             a = tr('a')             tds = tr('td')#将所有的td标签存为一个列表类型             ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[4].string.strip()])  def printUnivList(ulist1,num):#打印出ulist列表的信息,num表示希望将列表中的多少个元素打印出来     #格式化输出     tplt = "{0:^10}t{1:{3}^12}t{2:^10}"     # 0、1、2为槽,{3}表示若宽度不够,使用format的3号位置处的chr(12288)(中文空格)进行填充     print(tplt.format("排名","学校名称","总分",chr(12288)))     for i in range(num):         u = ulist1[i]         print(tplt.format(u[0], u[1], u[2],chr(12288)))     print()     print("共有记录"+str(num)+"条")  def main():     uinfo = [] #将大学信息放到列表中     url = "https://www.shanghairanking.cn/rankings/bcur/2020"     html = getHTMLText(url)     fillUnivList(uinfo,html)     printUnivList(uinfo,10)  main() 

输出效果如下图:
Python爬虫入门实例三之爬取软科中国大学排名
  本篇完,如有错误欢迎指出~

引用源自

中国大学MOOC Python网络爬虫与信息提取 https://www.icourse163.org/course/BIT-1001870001 

本文转自互联网,侵权联系删除Python爬虫入门实例三之爬取软科中国大学排名

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Python爬虫入门实例三之爬取软科中国大学排名
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们