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

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

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

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

运行平台:Windows

Python版本:Python3.6

IDE:Sublime Text Python自带IDLE

其他:Chrome浏览器

简述流程为:

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

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

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

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

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

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

我们通过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浏览器,打开网页。

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

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

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

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

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

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

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

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

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

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

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

'''

利用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)。希望大家能够有所收获咯,当然,大神还是绕路吧,小白瑟瑟发抖。如果有错误的地方,请大家多多指教。

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

  1. 免费python课程排行榜-Python势头大好,PYPL 11 月编程语言排行榜

    PYPL 是非常流行的参考指标,其榜单数据的排名均是根据榜单对象在 Google 上相关的搜索频率进行统计排名,原始数据来自 Google Trends,也就是说某项语言或者某款 IDE 在 Goog ...

  2. python爬取中国大学_Python 3爬取全国高校基本信息

    最近接了一个单子,是爬取全国高校的基本信息,高校名字,高校层次,高校地区,招生办电话,招生办官网~ 镇楼图如下: 信息源网址是:https://gkcx.eol.cn/ 开发环境:python3.6( ...

  3. python爬虫技术路线_爬虫学习——中国大学最好排名(技术路线:requests库和bs4)(来源于北理工Python网络爬虫与信息提取网络公开课)...

    "中国大学排名"定向爬虫示例 课程地址:http://open.163.com/movie/2019/5/G/6/MEEMCM1NP_MEEU3UFG6.html #功能描述: # ...

  4. 免费python课程排行榜-Python爬虫学习排行榜

    Python作为一门高级编程语言,在编程中应用非常的广泛,近年来随着人工智能的发展Python人才的需求更大,北京Python培训班也成了很多人转行高薪行业的一个捷径.想学爬虫,Python爬虫学习排 ...

  5. 免费python课程排行榜-Python培训机构排行榜哪家更好?老男孩Python全栈开发

    Python语言可谓是一个全能的编程语言,具有非常丰富的第三方库,可以解决各类问题的发生.而且无论实现什么功能,都有现成的库可以使用,给我们带来了很大的帮助,也成为了很多人的首要选择. 学习Pytho ...

  6. 零基础入门python爬虫之《青春有你2》选手信息爬取

    零基础入门python爬虫之<青春有你2>选手信息爬取 完成<青春有你2>选手图片爬取,生成选手图片的绝对路径并输出,统计爬取的图片总数量.使用工具:requests模块.Be ...

  7. Python网络爬虫数据采集实战(八):Scrapy框架爬取QQ音乐存入MongoDB

    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本涵盖了爬虫 ...

  8. Python实现对主要城市及其周边地区天气数据的爬取

    python爬虫学习爬虫(爬取指定网站数据) Python实现对主要城市及其周边地区天气数据的爬取,关键步骤已经做了注释此版本仅是初学者的学习版,不喜勿喷 #coding: utf-8 import ...

  9. Python网络爬虫及数据可视化(软科中国大学专业排名|计算机科学与技术)

    设计内容: 对中国大学专业排名网站中2021年,计算机科学与技术专业,进行数据爬取和数据可视化. URL地址:https://www.shanghairanking.cn/rankings/bcmr/ ...

最新文章

  1. ubuntu修改IP
  2. TensorFlow for Hackers - Part III
  3. Linux内核中ioremap映射的透彻理解
  4. AE中获得datalayer所对应的data的文件路径和文件名
  5. 指针、引用以及const限定符、constexpr限定符
  6. 获得三位数的百位,十位和个位
  7. HDU 4597 Play Game
  8. 以mysql为例有几种隔离级别_mysql隔离级别有几种
  9. 季节性ARIMA模型【R语言】
  10. 国内五大主流网站内容抓取工具/采集软件大盘点
  11. reviewboard mysql_【ReviewBoard】安装与配置
  12. 如何将heic格式转化jpg?
  13. 百度搜索引擎的工作原理
  14. XXXX大学课程设计说明书格式规范
  15. 基于Python实现的HTTP代理服务器设计
  16. 哪些权重7权重8的网站怎么做的!我的站就是这么做的!轻量级泛目录无需数据库适合所有网站所有cms只需要放在根目录即可
  17. WPF管理平台 (一)- 登录页面
  18. 分布式算法-Paxos
  19. 使用Nightwatch进行端到端测试
  20. html查看更多隐藏内容,jQuery点击显示隐藏更多文字内容插件jquery.morecontent.js

热门文章

  1. 图卷积网络进行骨骼识别代码_深兰科学院:动作识别——人体骨架时空图卷积网络的关节图构造方法简介...
  2. 文本编辑器查看 cprintf颜色_做生信,你需要一款好用的文本编辑器
  3. HiveQL学习笔记(二):Hive基础语法与常用函数
  4. yolo1-5系列算法备忘录
  5. bzoj 2428: [HAOI2006]均分数据
  6. CodeForces - 937D Sleepy Game
  7. 关于内存对齐介绍的比较好的一个文章
  8. Network 第九篇 - 双机热备-HSRP
  9. Linux虚拟机之间实现密钥登陆
  10. python全栈 操作系统