题目

使用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. Python排序函数用法

    Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,di ...

  2. 解决idea 中web项目无法正常显示的问题

  3. 【PY从0到1】第二节 字符串和数字

    #本课程都以代码形式呈现.现在进入Python的基础内容的学习. #由于本课程是从0开始分享,所以Python的基础内容是必不可少的.这也是Python量化的必经之路. #下面进入正题. #一般用'# ...

  4. SQL注入-DNS注入(二)

    其实就是盲注的简化版本,不过这种方式确实简单,不需要写py脚本一点点去跑 参考文章: https://www.jianshu.com/p/c805209244c2                  这 ...

  5. 【Java】Java Win10环境搭建--JDK、Eclipse

    win10安装Java JDK环境及Eclipse安装使用(Hello world) win10环境下安装Java环境,对于小白来说简直是头疼,因为Java内部环境有着JDK和JRE两块,互相牵扯着很 ...

  6. MySQL_CRUD_In_Terminal

    MySQL的CRUD操作 从Terminal中,可以对数据库进行链接,无需GUI界面就可以对数据库进行相关操作.对于Linux.Windows.MacOS,也可以使用可视化软件Navicat.MySQ ...

  7. ubuntu20.04 LTS 更换国内163源、阿里源、清华源、中科大源

    Ubuntu 20.04 是 Ubuntu 的第 8 个 LTS 版本,其重大更新和改进将在 2030 年前终止,计划于2020年 4 月 23 日发布. 国内有很多Ubuntu的镜像源,有阿里的.网 ...

  8. python 简单逻辑回归实例

    import sys reload(sys) sys.setdefaultencoding('utf-8') from sklearn.feature_extraction.text import T ...

  9. Git的使用以及命令

    个人常用命令 git初始化操作 git init 把当前的目录变成git仓库,生成隐藏.git文件. git remote add origin url 把本地仓库的内容推送到GitHub仓库. gi ...

  10. Autofac官方文档翻译--一、注册组件--3属性和方法注入

    官方文档:http://docs.autofac.org/en/latest/register/prop-method-injection.html Autofac 属性和方法注入 虽然构造函数参数注 ...