1、实验概述
设计、实现图片网络爬虫,从网站上批量下载图片;并对图片进行图像处理。

2、实验环境
1)语言:网络爬虫:Python;图片处理:C++
2)软件环境:Visual Studio2015;Pycharm2017

3、实验设计思路

python requests 下载图片 最后下载了html_网络图片下载

4、实验实现
A.全局变量及导入的库

python requests 下载图片 最后下载了html_爬虫_02

B.网址获取

python requests 下载图片 最后下载了html_爬虫_03

定义了一个MyCrawler类用于获得当前页面的链接网址,其中成员linkQuence用于存储已访问过的网址和即将访问的网址;成员bloomfilter类用于网页去重。

python requests 下载图片 最后下载了html_网络图片下载_04

crawling函数用于抓取网页中的链接并将已访问过的网址加入已访问网址栈,当抓取深度超过自定义的需要爬取的深度即停止爬虫;当已访问过的不重复的网址超过1023或者未访问过的网址栈为空,即开始下一深度的爬取。将网址加入已访问网址栈时需要对其利用BloomFilter进行去重。爬取网址结束后打印出已访问网址栈的长度,即已访问的网址个数。

python requests 下载图片 最后下载了html_爬虫_05

通过requests中的get函数得到网页url中的源码内容存储在data中;正则表达式r"(?<=href=“).+?(?=”)|(?<=href=‘).+?(?=’)"通过匹配从data中取出标签href中的内容;if判断筛选出有效超连接。

python requests 下载图片 最后下载了html_网络图片处理系统_06

实现一个网址访问栈类。

C.网页去重

实现一个BloomFilter类。

根据公式以及要求假阳性概率在0.1%之内,且应有至少1000个不重复的网址,则取布隆过滤器的n = 1200, m = 15000, k = 7。

python requests 下载图片 最后下载了html_网络图片处理系统_07

python requests 下载图片 最后下载了html_爬虫_08

利用DEK哈希算法生成哈希值。

D.图片下载

利用request库中的urlopen方法打开一个url地址并用read方法读取url上的数据;正则表达式r’src=“([a-zA-Z0-9.😕]+?.jpg)”'用来获取url上的图片地址;再利用urlretrieve方法保存图片到本地。

python requests 下载图片 最后下载了html_python_09

E.图像处理

python requests 下载图片 最后下载了html_python_10

python requests 下载图片 最后下载了html_爬虫_11

定义了一个PixImage类,private部分存有图片的尺寸、像素信息、处理后的图片信息以及图片处理方式对应的函数;public部分有相应的像素处理函数接口、中值滤波图片模糊处理接口、sobel算子处理接口以及图片显示、保存的函数。

python requests 下载图片 最后下载了html_爬虫_12

利用.ptr<>函数访问并得到图片的像素信息。

python requests 下载图片 最后下载了html_python_13

对图像中的像素进行量化处理。如常见的RGB24图像有256256256中颜色,通过Reduce Color将每个通道的像素减少8倍至256/8=32种,则图像只有323232种颜色。假设量化减少的倍数是N,则代码实现时就是简单的value/N*N,通常会再加上N/2以得到相邻的N的倍数的中间值,最后图像被量化为(256/N)×(256/N)×(256/N)种颜色。

python requests 下载图片 最后下载了html_爬虫_14


python requests 下载图片 最后下载了html_python_15


python requests 下载图片 最后下载了html_网络图片处理系统_16


python requests 下载图片 最后下载了html_爬虫_17


python requests 下载图片 最后下载了html_课程设计_18


python requests 下载图片 最后下载了html_python_19