题目

使用urllib模块编程实现爬取网站的大学排名。
(网址:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html)
(1)获取网站页面,分析代码结构特征;
(2)处理页面,提取相关信息;
(3)解析数据,输出结果。

代码实现

Python3

import urllib.request
import re # 获取指定url的源码信息
def getHTMLText(url):
try:
response = urllib.request.urlopen(url, timeout=30)
html = response.read().decode('utf-8')
return html
except:
return "access the web error!"
return "" # 根据具体结构匹配需要的排名信息,最终以列表的形式返回
def fullTextToSchoolList(html):
# 正则匹配所有学校名称
reg2 = r'<td><div align="left">(.*?)</div></td>'
# 匹配排名信息
reg = r'<td>(.*?)</td>'
reg = re.compile(reg)
reg2 = re.compile(reg2)
ulists=re.findall(reg,html)
unames=re.findall(reg2,html)
# 将学校名称替换到一个list中
i=1
j=0
while i < len(ulists):
ulists[i]=unames[j]
j=j+1
i=i+4
# 返回学校排名信息的列表
return ulists # 格式化输出结果
def printSchoolList(ulist):
print("{:^9}\t{:^13}\t{:^10}\t{:^6}".format("排名", "学校名称","省市","总分"))
print('========================================================================')
i=0
while i < len(ulist):
rank = ulist[i] # 排名
uname = ulist[i+1] # 学校名
city = ulist[i+2] # 所在城市
totalScore = ulist[i+3] # 总评分
print("{:^10}\t{:^13}\t{:^10}\t{:^6}".format(rank, uname, city,totalScore)) # 格式化输出
i=i+4 # main函数
def main():
url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html' html = getHTMLText(url)
ulist = fullTextToSchoolList(html)
printSchoolList(ulist)
# 执行main函数
if __name__ == '__main__':
main()

执行结果


其实使用BeautifulSoup模块实现起来更简单,更容易定位排名信息并获取指定标签体的内容。

另一种使用BeautifulSoup库爬取排名

url = "http://www.zuihaodaxue.cn/BCSR/jisuanjikexueyujishu2019.html"URL变成了2019的。这个最后爬取的内容和上面的一个是不同的。

代码实现

"""
定向爬取最好大学计算机展业排名信息,并输出到控制台
1. getHTMLText(url)
2. fullTextToSchoolList
3. printSchoolList
"""
from bs4 import BeautifulSoup
import requests
import bs4 def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status()
# 注意编码方式
r.encoding=r.apparent_encoding
return r.text
except:
return "access the web error!"
return "" # 将提取后的结果追加到ulist列表中去
def fullTextToSchoolList(ulist,html):
soup = BeautifulSoup(html,"html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr,bs4.element.Tag):
tds = tr('td')
try:
td0 = tds[0].string
td2 = tds[2].string
td3 = tds[3].string
ulist.append([td0,td2,td3])
except:
pass def printSchoolList(ulist,num):
print("{:^10}\t{:^6}\t{:^10}".format("排名","百分段","学校名称"))
for i in range(num):
u = ulist[i]
print("{:^10}\t{:^13}\t{:^10}".format(u[0], u[1], u[2])) def main():
uinfo = []
url = "http://www.zuihaodaxue.cn/BCSR/jisuanjikexueyujishu2019.html"
html = getHTMLText(url)
fullTextToSchoolList(uinfo,html)
printSchoolList(uinfo,20) # 只输出前20学校 if __name__ == '__main__':
main()

输出结果

以上有错误的地方,欢迎评论指出!!!

使用正则表达式和urllib模块爬取最好大学排名信息的更多相关文章

  1. python爬取中国大学排名

    教程来自:[Python网络爬虫与信息提取].MOOC. 北京理工大学 目标:爬取最好大学网前50名大学 代码如下: import requests from bs4 import Beautiful ...

  2. [实战演练]python3使用requests模块爬取页面内容

    本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...

  3. py3+requests+re+urllib,爬取并下载不得姐视频

    实现原理及思路请参考我的另外几篇爬虫实践博客 py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图:http://www.cnblogs.com/UncleYong/p/6892688. ...

  4. 爬虫——URL模块爬取糗事百科段子

    最简单的爬取网页找有用信息,难点应该是正则锁定有用信息部分,看了一些其他大神的正则,最后还是决定按照自己理解写一个,果然我头脑相对简单,写出来的粗糙而易理解,也完成了自己想要的需求,就这样了~ # - ...

  5. Python爬虫实战(一) 使用urllib库爬取拉勾网数据

    本笔记写于2020年2月4日.Python版本为3.7.4,编辑器是VS code 主要参考资料有: B站视频av44518113 Python官方文档 PS:如果笔记中有任何错误,欢迎在评论中指出, ...

  6. 利用Selenium爬取淘宝商品信息

    一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...

  7. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  8. python3编写网络爬虫16-使用selenium 爬取淘宝商品信息

    一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...

  9. python学习(23)requests库爬取猫眼电影排行信息

    本文介绍如何结合前面讲解的基本知识,采用requests,正则表达式,cookies结合起来,做一次实战,抓取猫眼电影排名信息. 用requests写一个基本的爬虫 排行信息大致如下图 网址链接为ht ...

随机推荐

  1. Codeforces Edu Round 64 A-D

    A. Inscribed Figures 分类讨论打表即可. PS:这道题翻译有歧义. 这样稍微翻转一下,就可以是\(7\)个交点呀...(大概是我没看英文题干导致的惨案) #include < ...

  2. Java集合源码分析(四)——Vector

    简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. 和ArrayList不同,Ve ...

  3. Vulnhub实战靶场:ME AND MY GIRLFRIEND: 1

    一.环境搭建 1.官网下载连接:https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 2.下载之后,使用Oracle VM Virtual ...

  4. Typora+图床详解(小白都能学得会)

    Typora+图床详解(小白都能学得会) 1 了解工作 博客中用的笔记软件--Typora(Markdown语法) 博客中用的图床--阿里云对象存储(Object Storage Service,简称 ...

  5. 基于 Source Generators 做个 AOP 静态编织小实验

    0. 前言 上接:用 Roslyn 做个 JIT 的 AOP 作为第二篇,我们基于Source Generators做个AOP静态编织小实验. 内容安排如下: source generators 是什 ...

  6. 庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署

    庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署 一.简介      从今天开始,不出意外的话,以后所写的文章中所介绍项目的部署环境都应该会迁移到Linux环境上,而且是 ...

  7. oracle rm -fr datafile 数据文件被误删的场景恢复(没有rman备份)

    环境: Linux release 7.5 oracle19c (无pdb,从11.2.0.4升级上去的) 一:单个非系统表空间的数据文件被删除 我先备份一下,虽然是测试环境. [oracle@19c ...

  8. ADF 第六篇:Copy Data Activity详解

    在Azure 数据工程中,可以使用Copy Data 活动把数据从on-premises 或云中复制到其他存储中.Copy Data 活动必须在一个IR(Integration Runtime)上运行 ...

  9. CCNP之二层技术

    二层技术 ---数据链路层 核心功能:介质访问控制功能,控制物理层 网络类型: 1)MA:multiple access 多路访问(指在一条链路上有多个访问点,区别于点到点或点到多点的网络) BMA: ...

  10. Java equals方法学习

    通过某个特征值来判断两个对象是否"等价",当这两个对象等价时,判断结果为true,否则结果为false. Object类(Java的"对象世界"的根)中实现的e ...