虚拟打印机-cab软件下载

2023年4月3日发(作者:光盘装系统)
Python⽹络爬⾍实现⾳乐下载器和图⽚下载器功能
引⾔
1.1课题背景
作为搜索引擎技术核⼼元素之⼀,⾃1993年初MatthewGray’sWandered在⿇省理⼯学院开发出有史记载的第⼀个⽹络爬⾍以来,爬
⾍技术历经20多年的发展,技术已⽇趋多样。为满⾜不同⽤户多种多样的需求,创建开发了类型众多的爬⾍系统。按照实现技术和其系统
构成,爬⾍系统主要可以分为以下⼏种:
1.通⽤⽹络爬⾍
通⽤⽹络爬⾍(GeneralPurposeWebCrawler)也可称之为全站爬⾍(ScalableWebCrawler),它通过⼀系列预设的初始链接开始,获取
页⾯上所有链接,根据预设规则,提取链接,进⼊待爬取队列,进⽽不断访问⽹页下载⽹页或取链接。然后通过HTML解析技术,获取页⾯
数据,提取所需信息并保存,与此同时将新获取的链接放⼊待爬取队列,直到达到系统预设指定条件为⽌。通⽤⽹络爬⾍有两种常⽤的爬取
策略:
(1)深度优先策略(Depthfirststrategy):
这个是在爬⾍发展早期使⽤⽐较多的⽅法。这种策略最终要达到的效果是⼀直搜索到由站点分布抽象出来的树的叶⼦节点(即⽹页站点的最
底层不包含任何其他不重复的⽹页链接的⽹页)。在⼀个⽹页⽂件中,当爬⾍获得当前⽹页中的第⼀个链接后,就对该链接所指向的⽹页⽂
件执⾏深度优先搜索策略,也就是说在搜索当前页⾯的其他的链结结果之前,必须先搜索出⼀条路径使其形成⼀条独⽴的完整的链。形象点
说深度优先搜索策略就是沿着该⽹页解析出的HTML⽂件的⼀个链接转接到另⼀个链接从⽽由链接组成的链接⽹络⼀直⾛到不能更加深⼊为
⽌,然后返回到之前所在的某⼀个⽹页⽂件中,再继续选择该⽹页⽂件中的下⼀个不重复的链接,重复上述动作。当初始⽹页中不再存在其
他链接可供选择时,说明此次搜索已经结束。但如果所需爬取⽹页节点结构⽐较深时的时候,该策略会引起较⼤的资源浪费,爬取效率也不
太⾼。
(2)⼴度优先策略(Breadthfirststrategy):
简称BFS,⼜称之为宽度优先搜索策略,或横向优先搜索策略,作为⼀种图形搜索算法提出来,其思想亦可⽤于⽹络爬⾍的设计。简单的
说,⼴度优先搜索策略是从树根节点开始,沿着树的宽度遍历树在同⼀层的节点。如果该树的所有节点均被访问,则算法结束。⼴度优先搜
索策略的实现⼀般采⽤open-closed表。⼴度优先搜索策略先将所需爬取⽹页的站点按照页⾯结构划分成不同的层次,然后沿着划分好的层
次⼀层⼀层的由上到下进⾏爬取。先爬取浅层次的链接,将处于同⼀层次的所有⽹页处理完成之后再向下⼀个层次继续爬取。⼴度优先策略
可以以并发的⽅式进⾏爬取,由于程序并发会提⾼程序的⼯作效率,所以这种特性在⼀定程度上可以提⾼爬⾍的爬取效率,⽽且同时也可以
任意控制爬⾍爬取⽹站站点的深度,从⽽避免了使⽤深度优先策略是爬⾍陷⼊⽆穷深度从⽽导致爬⾍不能正常结束的状态。
利⽤通⽤爬⾍策略实现爬⾍算法的Googlecrawl爬取⽬前存在于互联⽹上所有⽹站⽹页,⾕歌公司通过建⽴分布式系统⽹络加上异步输⼊
输出的技术来⽤以提⾼整个爬⾍系统的并发度,期间还使⽤了包括PageRank算法在内的众多提升系统运⾏效率的算法来优化Googlecrawl
爬⾍的爬取性能。
1.2⽬的和意义
使⽤Python–⽹络爬⾍技术实现“⾳乐下载器”功能,该功能为⽤户搜集了⼤多数⾳乐⽹站的⾳乐歌曲信息,这样使得⽤户⽆需到各个⾳
乐⽹站去搜索所需下载的⾳乐歌曲信息,不仅为⽤户节省了时间,同时提升的搜索结果效率。
使⽤Python–⽹络爬⾍技术实现“图⽚下载器”功能,该功能为⽤户提供了三⼤搜索⽹站的图⽚批量下载功能,当⽤户想要在某⽹站下载
批量图⽚时,⽆需⼀张张的点击保存,这样使得⽤户⽆需到某⽹站去搜索想要下载“关键字”所需下载的⾳乐歌曲信息,不仅为⽤户节省了
时间,同时提升的搜索结果效率。
所以说使⽤Python–⽹络爬⾍实现“⾳乐下载器”和“图⽚批量下载”功能是很有帮助的,由此,在本⽂中将详细讲解使⽤Python–⽹络
爬⾍技术实现“⾳乐下载器”和“图⽚批量下载”功能时所涉及到相关问题和解决相关问题的⽅法。
1.3要实现的功能
⾳乐下载器功能:
1)、⽤户输⼊想要下载的歌曲名称;
2)、程序获取⽤户所输⼊的歌曲名称关键字,根据该“关键字”向QQ⾳乐、酷狗⾳乐、⽹易⾳乐等⽹站发起数据请求;
3)、程序根据返回的数据信息,进⾏分析后,呈现表格的形式给⽤户
4)、⽤户输⼊表格所显⽰的id号,便可下载该歌曲;
图⽚的批量下载功能:
1)、⽤户输⼊想要下载的图⽚名称、再选择该图⽚的名称要在哪个⽹站搜索(所⽀持的⽹站有:百度、必应、Google)、接着再输⼊要下载图
⽚的数量(最⼤⽀持下载1000张);
2)、程序获取⽤户所输⼊的图⽚名称关键字,根据该“关键字”向⽤户所选择的⽹站发起数据请求,并下载指定数量的图⽚;
1.4本章⼩结
本章节主要介绍了Python⽹络爬⾍的课题背景、⽬的和意义以及要实现的的功能要求。
系统结构
2.1⾳乐下载器功能
2.1.1流程图
2.1.2测试环境
操作系统:Window10
开发⼯具:PyCharm
Python版本:3.7.3
2.1.3所需依赖包
pycryptodome、requests、click、prettytable
2.1.4所⽀持下载歌曲的⽹站
1、基本POST实例
2、发送请求头和数据实例
importrequests
importjson
prettytable模块的使⽤描述:
1.安装
pipinstallPrettyTable
2.导⼊模块
fromprettytableimportPrettyTable
3.实例代码
fromprettytableimportPrettyTable
x=PrettyTable([“姓名”,“性别”,“年龄”,“存款”])
[“姓名”]=“1”#以姓名字段左对齐
g_width=1#填充宽度
_row([“赵⼀”,“男”,20,100000])
_row([“钱⼆”,“男”,21,500])
_row([“孙三”,“男”,22,400.7])
_row([“李四”,“男”,23,619.5])
_row([“周五”,“男”,24,1214.8])
_row([“吴六”,“⼥”,25,646.9])
_row([“郑七”,“⼥”,26,869.4])
_row([“王七加⼀”,“男”,21,869.4])
print(x)
4.实现效果
2.2图⽚的批量下载功能
2.2.1流程图
2.2.2测试环境
操作系统:Window10
开发⼯具:PyCharm
Python版本:3.7.3
2.2.3所需依赖包
future、PySocks、requests、selenium、PyQt5
2.2.4所⽀持下载图⽚的⽹站
百度、必应、Google
2.2.5各个模块的介绍
requests模块:requests是使⽤Apache2licensed许可证的HTTP库,⽐urllib2模块更简洁。Request⽀持HTTP连接保持和连接池,
⽀持使⽤cookie保持会话,⽀持⽂件上传,⽀持⾃动响应内容的编码,⽀持国际化的URL和POST数据⾃动编码。在python内置模块的基
础上进⾏了⾼度的封装,从⽽使得python进⾏⽹络请求时,变得⼈性化,使⽤Requests可以轻⽽易举的完成浏览器可有的任何操作。
selenium模块:selenium是⼀个⽤于测试⽹站的⾃动化测试⼯具,⽀持各种浏览器包括Chrome、Firefox、Safari等主流界⾯浏览器,同
时也⽀持phantomJS⽆界⾯浏览器。
PySocks模块:PySocks是⼀个基于Python的SOCKS代理客户端,它是SocksiPy的⼀个分⽀,修改了⼀些bug和增加了⼀些额外功能。
PyQt5模块:PyQt5是⼀套来⾃Digia的Qt5应⽤框架和Python的粘合剂。⽀持Python2.x和Python3.x版本。PyQt5以⼀套Python模块
的形式来实现功能。它包含了超过620个类,600个⽅法和函数。它是⼀个多平台的⼯具套件,它可以运⾏在所有的主流操作系统中,包含
Unix,Windows和MacOS。PyQt5采⽤双重许可模式。
⿏标拖放⽰例:
#定位元素的原位置
element=_element_by_name(“source”)
#定位元素要移动到的⽬标位置
target=_element_by_name(“target”)
#执⾏元素的移动操作
ActionChains(driver).drag_and_drop(element,target).perform()
PyQt5模块的使⽤描述:
1.安装
pipinstallpyqt5
2.实例代码:简单的窗⼝
importsys
etsimportQApplication,QWidget
defshow_w():
#所有的PyQt5应⽤必须创建⼀个应⽤(Application)对象
参数是⼀个来⾃命令⾏的参数列表。
app=QApplication()
Qwidget组件是PyQt5中所有⽤户界⾯类的基础类。我们给QWidget提供了默认的构造⽅法
w=QWidget()
#resize()⽅法调整了widget组件的⼤⼩
(500,500)
(500,100)#move()⽅法移动widget组件到⼀个位置,这个位置是屏幕上x=500,y=200的坐标。
dowTitle(‘Simple’)#设置了窗⼝的标题。这个标题显⽰在标题栏中
()#show()⽅法在屏幕上显⽰出widget。⼀个widget对象在这⾥第⼀次被在内存中创建,并且之后在屏幕上显⽰。
(_())#应⽤进⼊主循环。在这个地⽅,事件处理开始执⾏。主循环⽤于接收来⾃窗⼝触发的事件,
#并且转发他们到widget应⽤上处理。如果我们调⽤exit()⽅法或主widget组件被销毁,主循环将退出。
#()⽅法确保⼀个不留垃圾的退出。系统环境将会被通知应⽤是怎样被结束的。
ifname==‘main’:
show_w()
代码实现
3.1 ⾳乐下载器功能代码实现
3.1.1定义类musicdl,并进⾏初始化
3.1.2⽤户输⼊想要下载的歌曲名称,程序获取⽤户所输⼊的信息
处理⽤户输⼊的信息
3.1.3根据该“关键字”向QQ⾳乐、⽹易⾳乐等⽹站发起数据请求
获取⽤户输⼊的关键字,并调⽤search⽅法
在search⽅法中,根据该关键字向QQ⾳乐⽹站、⽹易⾳乐等⽹站发起数据请求
例如:根据该关键字向酷狗⽹站发起数据请求,
1、创建酷狗⾳乐下载类kugou,并进⾏初始化
2、创建search⽅法,根据获取到的关键字,向酷狗⾳乐⽹站发起数据请求
3、调⽤⽅法,并将⽤户输⼊关键字的数值传递给该⽅法
3.1.4根据返回的数据信息,进⾏分析后,以表格的形式呈现给⽤户
3.1.5⽤户输⼊表格所显⽰的id号,便可下载该歌曲
根据⽤户输⼊的id号,执⾏下载
若输⼊的id号是酷狗⽹站的,则调⽤酷狗的download⽅法;同理其他⽹站也⼀样。这⾥以酷狗⾳乐⽹站为例⼦
3.2 图⽚批量下载功能代码实现
3.2.1创建类DialogAbout(⽤于显⽰图⽚下载窗⼝),并进⾏初始化
3.2.2创建类MainWindow(⽤于显⽰图⽚批量下载的内容窗⼝),并进⾏初始化
3.2.2创建类MainWindow(⽤于显⽰图⽚批量下载的内容窗⼝),并进⾏初始化
3.2.3定义progress_log⽅法,⽤于执⾏过程的⽇志信息显⽰
3.2.4定义reset_ui⽅法,⽤于重新初始化图⽚下载窗⼝
3.2.5定义update_elapsed_time⽅法,⽤于显⽰下载过程中的时间
3.2.6定义start_download⽅法,⽤于实现图⽚的批量下载
3.2.7定义cancel_download⽅法,⽤于取消图⽚的下载
3.2.8最后,创建image_downloader_⽂件,在⽂件中并定义main⽅法,⽤于调⽤执⾏,已经创建好的类和⽅法
3.2.9数据爬取过程;这⾥以“百度”⽹站为例⼦
在图⽚批量下载的页⾯中,⽤户输⼊想要下载图⽚的关键字,选择从“百度”⽹站搜索
当⽤户点击“Start”后,便调⽤MainWindow类中的start_download()⽅法,
在该⽅法中,程序获取⽤户所输⼊的关键字、选择的是哪个⽹站以及所需下载图⽚的数量等信息;
根据所选择的⽹站,执⾏⽂件中相应的⽅法(这⾥选择的是“百度”⽹站,由此调⽤的是baidu_get_image_url_using_api)
实验结果
4.1 ⾳乐下载器
输⼊想要下载的歌曲名称;例如这⾥输⼊歌曲名称:⽅圆⼏⾥
搜索结果,以表格的形式输出显⽰
在输出显⽰的信息中,输⼊编号id,即可下载该⾳乐;例如这⾥输⼊:0
成功下载
4.2图⽚批量下载器
图⽚批量下载器页⾯
输⼊要下载图⽚的关键字,并选择该关键字要在哪个⽹站下载,再设置要下载图⽚的数量以及线程的个数,最后,再点击Start开始进⾏图
⽚下载;例如:这⾥关键字为“周杰伦”,从“百度”⽹站进⾏搜索,设置下载的图⽚数量为10张,开启的线程个数也为10个。
下载成功
更多推荐
百度mp3批量下载器
发布评论