免费python课程排行榜-Python基础练习(一)中国大学定向排名爬取

说好的要从练习中学习爬虫的基础操作,所以就先从容易爬取的静态网页开始吧!

今天要爬取的是最好大学网上的2018年中国大学排名。我个人认为这个是刚接触爬虫时用来练习的一个很不错的网页了。

在说这个练习之前,给新着手学习爬虫的同学提供一个中国MOOC上北京理工大学嵩天老师的视频,Python网络爬虫与信息提取

今天这个练习便是出自嵩天老师的视频

运行平台:Windows

Python版本:Python3.6

IDE:Sublime Text Python自带IDLE

其他:Chrome浏览器

简述流程为:

步骤1:利用IDLE简单测试爬取的网页

步骤2:浏览器上查看网页信息

步骤3:从网页中获取HTML文本

步骤4:提取网页信息并存入合适的数据结构

步骤5:利用数据结构输出结果

首先我们可以用Python自带的IDLE来简单测试一下网页是否可访问

1426991-20180625144924696-47387294.png

我们通过requests的get方法已经获得了网页的响应,通过返回的状态码200可以知道访问成功,随后用text方法来查看返回的HTML文档,这里要注意记得控制返回的Text文档大小,用切片的方法控制一下,否则很容易使得IDLE无响应。我们注意到返回的源码中有许多乱码,这是怎么回事呢?我们先查看一下网页的编码是什么,返回的"ISO-8859-1’可以让我们知道该编码不支持中文显示,所以我们可以通过修改编码为"utf-8’的方法成功取得可以显示中文的源码。当然我们还可以用robotparser模块查看网页的obots.txt文件,robots.txt文件是网页用来告诉我们哪些页面允许爬取,哪些页面不建议爬取,这并不是一个强制性约束的文件,不过在涉及到其他应用的时候,还是建议遵守文件。当然,我们这里只是用来练习,是没啥问题的,需要查看最好大学网的robots。txt文件也可以直接输入网址"http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html/robots.txt”,当然,你会看到404 Not Found,这表示这个网页没有robots.txt,相应的也就是默认可以爬取的,当然,爬取的时候需要控制好频率。

随后,我们打开Chrome浏览器,打开网页。

1426991-20180625144941511-2019973189.png

可以看到排名都在一个总的表格中,我们要爬取的学校以及总分排名等信息也都在其中。我们可以在清华大学点击鼠标右键,然后点击检查,看看网页返回了什么。

1426991-20180625145011235-656781828.png

可以在下方看到(也有可能出现在右方,这个可以自己设置,下方这个新出的区域的右上角有三个竖着的点,点击就可以设置了)清华大学,北京,95.3等大学信息都在标签

里。清楚了我们要爬取的信息位置后,接下来就是写代码获取这些信息了。

1426991-20180625145039947-248146672.png

9224291.html

第一步就是使用嵩天老师一直强调的通用代码框架了,这个框架可以用在很多爬虫中用来获取HTML文本,并且它通过response.raise_for_status()方法判断返回的状态码是不是200,如果不是,就会引发HTTPError异常,然后通过try except的异常处理获取到异常,而apparent_encoding则可以使得返回的编码准确。这样一个简单的通用代码框架可以有效的处理访问处理时遇到的网络问题。

1426991-20180625145058865-440043679.png

第二步则是用BeautifulSoup解析提取到的HTML文本,'html.parser'是Python标准库作为解析器,刚才用浏览器已经看到我们所要提取的信息位置位于标签

里,所以用for循环获取找到

1426991-20180625145116865-863324870.png

9224291.html

第三步则是将存入列表中的信息格式化输出出来,这一步也可以用文件操作替换,后续很多练习会用到文件存放。这里还是使用format格式化输出的办法。首先来理解一下tplt这个字符串的结构,如图所示:

1426991-20180625145137909-1792440049.png

9224291.html

关于format的其他用法,比如填充对齐,精度控制等大家有兴趣可以百度一下啦。关于chr(12288)则是嵩天老师在优化中文对齐时提到的,因为中文字符对齐与英文字符对齐的宽度不一样,所以用chr(12288)使得采用中文字符的空格对齐。

然后就是使用format输出列表中的文本了。这里还用到了range 来控制输出的大学数。

最后我们看下输出结果,这里只输出了排名前20的大学。

1426991-20180625145200192-792314830.png

9224291.html

源码的话,由于代码不长,就直接文本放出来吧

'''

利用requests+BeautifulSoup爬取最好大学网中2018年中国大学排名

'''

import requests

from bs4 import BeautifulSoup

import bs4

def get_one_page(url):

try:

response = requests.get(url,timeout=30)

response.raise_for_status()

response.encoding = response.apparent_encoding

return response.text

except:

print("产生异常")

return ""

def parse_one_page(ulist,html):

soup = BeautifulSoup(html,'html.parser')

for tr in soup.find('tbody').children:

if isinstance(tr,bs4.element.Tag):

tds = tr('td')

ulist.append([tds[0].string,tds[1].string,tds[2].string,tds[3].string])

def print_one_page(ulist,num):

tplt = "{0:^10} {1:{4}^10} {2:{4}^10} {3:^10}"

print(tplt.format("排名","学校名称","学校地址","总分",chr(12288)))

for i in range(num):

u = ulist[i]

print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))

def main():

uinfo = []

url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html'

html = get_one_page(url)

parse_one_page(uinfo,html)

print_one_page(uinfo,20)

if __name__ == '__main__':

main()

好啦,今天的练习就到此结束了,应该写得还是挺详细的吧(emmmmm)。希望大家能够有所收获咯,当然,大神还是绕路吧,小白瑟瑟发抖。如果有错误的地方,请大家多多指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 伴随着人才教学的关注度越来越高,对于人才的培养也是当今社会发展的最为重要的问题之一。为了进一步的进行人才的培养关工作,许多的学校或者是教育的机构逐步的开展了网络信息化的教学和和管理工作,通过信息化的手段和技术实现网络信息化的教育及管理模式,通过网络信息化的手段实现在线答题在线考试和学生信息在线的管理等操作。这样更加的快捷解决了人才培养之中的问题,也在进一步的促进了网络信息化教学方式的快速的发展工作。相较于之前的人才教育和培养工作之中,存在这许多的问题和局限性。在学生信息管理方面通过线下管理的形式进行学生信息的管理工作,在此过程之中存在着一定的局限性和低效性,往往一些突发的问题导致其中工作出现错误。导致相关的教育工作受到了一定的阻碍。在学生信息和学生成绩的管理方面,往常的教育模式之下都是采用的是人工线下的进行管理和整理工作,在这一过程之中存在这一定的不安全和低效性,面对与学生基数的越来越大,学生的信息管理也在面领着巨大的挑战,管理人员面领着巨大的学生信息的信息量,运用之前的信息管理方式往往会在统计和登记上出现错误的情况的产生,为后续的管理工作造成了一定的困难。然而通过信息化的管理方式进行对学生信息的管理不仅可以避免这些错误情况的产生还可以进一步的简化学生信息管理工作的流程,节约了大量的人力和物力的之处。在线答题系统的实现不仅给学生的信息管理工作和在线考试带来了方便也进一步的促进了教育事业信息化的发展,从而实现高效化的教学工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值