【源码+文档】爬虫检索系统

②实验内容

从Top250电影榜单上爬取所有电影的相关信息(包括影片海报、影片海报链接、影片中外文名、影片评分、影片评价人数、影片概况、影片缩略信息,例如:导演,部分演员,上映时间,电影类型等等),将海报以.jpg形式、将其他信息以excel文件的形式存在本地,数据量足够支撑现场演示的检索需求;在爬取信息的同时产生了一个字典,以排名为键,中文名为值,将其存在本地,方便爬虫完毕后的查找。

以榜单中的排名为键,以待查电影存在本地的图片路径和excel路径组成的元组为值,建立B+树,为了扩充查找功能,建立一个hash表,键为豆瓣排名,值为中文名和评分人数,以及评分组成的列表。当要查找排名时,通过键的比对可以迅速定位磁盘路径,减少对磁盘的读取次数,提高查找效率,查找其他信息时通过hash表映射,将在磁盘中的搜索转化为在内存中的搜索,大大提高检索效率。

在GUI界面提供了豆瓣榜单排名准确查找,电影名准确查找,评分区间模糊查找,评分人数区间模糊查找(即查找符合要求区间的所有电影,由于数量过多此时不呈现电影海报)。

为查找的过程提供了异常处理,提高了该查找软件的用户友好度。

设计方案与设计思路

本爬虫检索系统分为六个部分:爬取信息,数据结构建立,建立B+树,GUI设计,检索,异常处理。

爬取信息(spider.py)

对Top250电影榜单上所有电影的相关信息进行了爬取,并将相关信息进行数据结构建模后存储到本地,以便之后的搜索。

在爬取信息的过程中使用了urllib库,进行了request_headers的伪装。使用了第三方库fake_uesragent,频繁更换UA,同时采用了IP代理(IP资源来源于网络),build_opener加入到headers中,每次发送请求时,从UA和IP池中随机选择进行headers的伪装(使用random库);在爬取图片时,由于豆瓣电影榜有防盗链,所以还需要在headers中加入Referer进行深层伪装,除此之外,每爬取一定数量的图片,还要暂停一定的时间(time库),进一步模拟用户行为。

由于信息最初请求到的信息是字节流,所以需要以utf-8编码的形式获取相应体内容,返还html形式的文件,然后进行html解析。在解析过程中,选择Beautifulsoup进行第三方库进行处理,生成字符串,最后用re库中的正则表达式匹配提取目的信息。

数据结构建模(spider.py)

在爬取的过程中,以list作为容器储存所有文字信息,并使用第三方库xlwt,对list中的信息进行写入并以excel的形式保存在本地,图片采用jpg形式保存在本地;同时对扩展检索功能的字典进行维护,生成键值对,爬取完毕后,将字典存在本地,当需要进行中文名、评分、评价人数的查找时,先读取hash表,再配合排名B+树为多种查找提供支持。

建立B+树(BPlus.py)

建立了叶子节点类和非叶子节点类,叶子结点中存储的数据为KeyValue型,键为排名,值为包含图片和excel路径的元组),非叶子节点中存储豆瓣排名作为Key。

GUI设计(UI.py,UIdesign.py)

GUI设计使用了PyQt5库,先用QTdesigner进行前端界面的设置,产生.ui的文件。然后将.ui文件转化为.py文件。此外GUI设计采用界面交互逻辑和界面设计分离的形式,界面py文件保存在UI.py中,界面逻辑保存在UIdesign.py文件中,方便之后的维护。

当用户点击相应查询框的search按钮之后,触发对应函数,查询结束之后,将结果在label中呈现。

同时为了使用的舒适度与流畅度,在细节上也进行了处理。比如单个电影信息呈现完之后,下一个电影的信息呈现之前要清空所有搜索框和信息框;异常发生时也要进行相应的清除,提高使用舒适度。

检索(BPlus.py)

在进行排名的搜索时,通过B+树的键值比对得到目标图片,excel文件的路径,读取图片并呈现在label中采用第三方库QtGUI,excel信息的读取采用第三方库xlrd。

在进行中文名检索时,通过之前建立的字典(hash表),将中文名映射到排名,再通过排名查找对应文件的地址。

在进行给定区间的评分,和评价人数的模糊查找时,根据区间,通过检索hash表,实现快速将所有符合要求的电影信息进行呈现,由于数量过多,不进行图片展示。

异常处理(UI.py)

由于用户可能在排名中输入250以后的数字或者小数或者负数,在评价人数中输入负数,小数,或者在评分中输入大于10的数(10分制),甚至没有输入搜索内容就开始搜索,可能导致程序崩溃,为了提高友好性,增强了程序的异常处理,对可能情况进行异常分析与维护。

源码和文档都托管在了【WRITE-BUG数字空间】上面了,有需要的可自取~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值