题目

使用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. typora字体与字体颜色

    字体 基本格式:\字体信息{内容} 罗马体\rm \rm{罗马体abc}>>\(\rm{罗马体abc}\) 意大利体\it \it{意大利体}>>\(\it{意大利体}\) 等 ...

  2. CF1439C Greedy Shopping

    题解 尝试做一下,感觉是每次取一段前缀和,这样就相当于让我们证明在 \(a_i\le 10^{12}\) 时,不可能构造出隔一个取一个的情况(\(n=10^5\)). a[i]: 1, 2, 3, 5 ...

  3. 深入理解Java虚拟机(一)——JVM内存模型

    文章目录 程序计数器 定义 作用 特点 Java虚拟机栈 定义 特点 本地方法栈 定义 Java堆 定义 特点 方法区 定义 特点 运行常量池 直接内存 总结 Java虚拟机的内存空间分为五个部分: ...

  4. v-text、v-html、v-pre

    v-text 用于将数据填充到标签中,作用于插值表达式类似,但是相对于直接插值是没有闪动问题的 v-html 用于将HTML片段填充到标签中,但是可能有安全问题(易被跨域脚本攻击[XSS攻击]) v- ...

  5. C#数据结构-赫夫曼树

    什么是赫夫曼树? 赫夫曼树(Huffman Tree)是指给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小.哈夫曼树(也称为最优二叉树)是带权路径长度最短的树,权值较大的结点 ...

  6. disable_functions Bypass

    参考文章和poc(文中均有poc下载地址) : https://www.uedbox.com/post/59295/ https://www.uedbox.com/post/59402/ 当然 fre ...

  7. 太酷炫了!!我会Python 导包八种方法,你呢?

    1. 直接 import 人尽皆知的方法,直接导入即可 >>> import os >>> os.getcwd() '/home/wangbm'复制代码 与此类似的 ...

  8. (七)、touch--创建文件或者更新时间戳

    一.命令说明与格式 创建文件并更新时间戳,若要创建的文件名已经存在,则仅仅更新时间戳,而不改变其他任何信息 格式:touch     [选项]   目录名/文件名 选项: -a            ...

  9. 编程方式实现MySQL批量导入sql文件

    有时候需要在本地导入一些stage环境的数据到本地mysql,面对1000+的sql文件(包含表结构和数据,放在同一个文件夹下),使用navicat一个一个导入sql文件显然有点太慢了,于是考虑使用s ...

  10. 【代码周边】-GitHub笔记

    ------------恢复内容开始------------ 程序员的宝库github是个好东西,其中开源的项目足够我们的使用,但是如何去精准的获取我们的项目是很多初学者的问题.特别是英语不好的我,一 ...