高级扩展模块

574 阅读7分钟

高级扩展模块的相关知识,内容包括图像处理库、Web 服务框架、网络爬虫、绘制数据图标、上机练习。

一、图像处理库

1. Pillow库

Python里的图像处理库

  • PIL:Python Image Library

功能强大,可以对图像做各种处理

  • 缩放、裁剪、旋转、滤镜、文字、调色板等等

2. 图像处理步骤

打开图像

image.open(<路径+图像名+文件格式>)
  • Pillow库能自动根据文件内容确定格式
  • 若图片在程序目录下,则不需要附带路径,直接将图像名+文件格式作为参数

处理图像

  • image模块中提供了大量处理图像的方法

存取或显示图像

im.show()
im.save(<文件名>)

3. PIL图像操作:缩略图

thumbnail函数

thumbnail(size, Image.ANTIALIAS)
  • 参数size为一个元组,指定生成缩略图的大小
  • 直接对内存中的原图进行了修改,但是修改完后的图片需要保存,处理后的图片不会被拉伸

4. PIL图像操作:模糊效果

5. PIL图像操作:添加文字

6. 小程序:PIL生成验证码

二、Web 服务框架

1. Web 应用

Web应用已经成为目前最热门的应用软件形式

Web应用通过Web服务器提供服务,客户端采用浏览器或者遵循HTTP协议的客户端

由于需要处理HTTP传输协议,很多web开发框架涌现

2. 框架的基本概念

什么是框架

  • Web服务器会处理与浏览器客户端交互的HTTP协议具体细节,但对具体内容的处理还需要自己编写代码
  • 一个Web框架至少要具备处理浏览器客户端请求和服务端响应的能力

框架的特性

  • 路由 -- 解析URL并找到对应的服务端文件或者Python服务器代码
  • 模板 -- 把服务端数据合并成HTML页面。
  • 认证和授权 -- 处理用户名、密码和权限
  • Session -- 处理用户在多次请求之间需要存储的数据

框架可能具备这些特性中的一种或多种

3. Flask框架

Flask是一种非常容易上手的Python web开发框架,功能强大,支持很多专业Web开发需要的扩展功能

  • Facebook认证和数据库集成

只需要具备基本的Python开发技能,就可以开发出一个web应用来

4. Flask框架:小例子

一个Web服务器测试

  • 在浏览器中访问http://127.0.0.1:5000/,这个服务器会返回一行文本

5. 表单插件Flask-WTF

关于表单的扩展库

  • 使用Flask-WTF时,每个表单都抽象成一个类

三、网络爬虫

1. 搜索引擎蜘蛛

爬虫是按照一定规则,自动地提取并保存网页中信息的程序

  • 蜘蛛沿着网络抓取猎物
  • 通过一个节点之后,顺着该节点的连线继续爬行到下一个节点,最终爬完整个网络的全部节点

通过向网站发起请求获取资源,提取其中有用的信息

2. requests库

  1. Python实现的一个简单易用的HTTP库
    • 支持HTTP持久连接和连接池、SSL证书验证、cookies处理、流式上传等
  2. 向服务器发起请求并获取响应,完成访问网页的步骤
  3. 简洁、容易理解,是最友好的网络爬虫库

http请求类型

  1. requests.request():构造一个请求
  2. requests.get():获取HTML网页
  3. requests.head():获取HTML网页头信息
  4. requests.post():提交POST请求
  5. requests.put():提交PUT请求
  6. requests.patch():提交局部修改请求
  7. requests.delete():提交删除请求
  8. requests.options():获取http请求

返回的是一个response对象

  • 包含服务器返回的所有信息,例如状态码、编码形式、文本内容等;也包含请求的request信息
  • .status_code:HTTP请求的返回状态
  • .text:HTTP响应内容的字符串形式
  • .content:HTTP响应内容的二进制形式
  • .encoding:(从HTTP header中)分析响应内容的编码方式
  • .apparent_encoding:(从内容中)分析响应内容的编码方式

定制请求头

  • requests的请求接口有一个名为headers的参数,向它传递一个字典来完成请求头定制

设置代理

  • 一些网站设置了同一IP访问次数的限制,可以在发送请求时指定proxies参数来替换代理,解决这一问题

3. Beautiful Soup

页面解析器

  • 使用requests库下载了网页并转换成字符串后,需要一个解析器来处理HTML和XML,解析页面格式,提取有用的信息

解析器类型

搜索方法

find_all(name, attrs, recursive, string, **kwargs)

返回文档中符合条件的所有tag,是一个列表

find(name, attrs, recursive, string, **kwargs)

相当于find_all()中limit = 1,返回一个结果

  • name:对标签名称的检索字符串
  • attrs: 对标签属性值的检索字符串
  • recursive: 是否对子节点全部检索,默认为True
  • string: <>...</> 中检索字符串
  • **kwargs:关键词参数列表

4. 爬虫的基本流程

  1. 分析网页结构

  1. 爬取页面
    • 通过requests库向目标站点发送请求,若对方服务器正常响应,能够收到一个response对象,它包含了服务器返回的所有信息

  1. 解析页面
    • HTML代码-网页解析器
    • Json数据-json模块,转换成Json对象
    • 二进制数据-以wb形式写入文件,再做进一步处理此处使用bs4进行解析

四、绘制数据图标

1. numpy库

numpy是Python用于处理大型矩阵的一个速度极快的数学库

  • 可以做向量和矩阵的运算,包括各种创建矩阵的方法,以及一般的矩阵运算、求逆、求转置

它的很多底层的函数都是用C写的,可以得到在普通Python中无法达到的运行速度

numpy方法

  • 矩阵计算
创建矩阵  a = np.matrix([]) 
矩阵求逆  a.I
矩阵转置  a.T
矩阵乘法  a*b或np.dot(a,b)
  • 对象属性
np.shape  数组形状,矩阵则为n行m列
np.size  对象元素的个数
np.dtype  指定当前numpy对象的整体数据

2. matplotlib绘图库

matplotlib是Python的一个绘图库。它包含了大量的工具,可以使用这些工具创 建各种图形

  • 简单的散点图、折线图,甚至三维图形、动画等

matplotlib功能异常强大

Python科学计算社区经常使用它完成数据可视化的工作

3. 绘制函数图像基本思路

基本思路

  • 通过将图像上一些点的坐标连接起来,即可绘制函数的近似图像,当点越多时,所绘图像越接近函数图像

numpy库的linspace( )函数生成数组

numpy.linspace(<start>,<stop>,<num>)
  • 生成一个存放等差数列的数组,数组元素为浮点型,包含三个参数,分别是:数列起始值、终止值(默认包含自身)、数列元素个数

matplotlib库的plot( )函数用来画图

  • 可以设定图形颜色、线条线型、以及做标注等

4. 简单图形

5. 多个简单图形

6. 定制线型

plot()函数的绘制样式参数表示

7. 标签图例

坐标轴标签

plt.xlabel()、plt.ylabel()

图形标题

plt.title()

8. 散点图

函数scatter(x,y)

(x, y)是点的坐标

9. 直方图

函数hist(x, n),x是横坐标,n是条状图的数量

五、上机练习

1. 信息隐藏工具

轻微改变图片中像素的RGB值,肉眼无法察觉

将8bit R/G/B中的最低1bit,用于隐藏一个数据文件(如文本)

  • 每3个像素可以隐藏1个字节

注意使用不失真图像格式

  • BMP/PNG格式

要求:

  1. 提供图片和数据文件,生成隐藏信息的图片
  2. 从隐藏信息的图片中提取数据文件

2. 微博系统

开发一个单用户的微博系统

  • 可以浏览、发帖、删帖、回复
  • 利用Flask编程/shelve持久存储

3. 蒙特卡罗方法求圆周率

蒙特卡罗方法原理

  • 通过大量随机样本,去了解一个系统,进而得到所要计算的值

用蒙特卡罗方法计算圆周率π

  • 正方形内部有一个相切的圆
  • 在这个正方形内部,随机产生10000个点,计算它们与中心点的距离,从而判断是否落在圆的内部
  • 如果这些点均匀分布,那么圆内的点应该占到所有点的 π/4

用matplotlib可视化

「资料来源:Python语言与基础应用-陈斌」