作为一个很喜欢看书的人,有时候在网页上看小说,会被数不胜数的广告弄的很烦,刚好最近在研究python,就自己写了一个小说爬虫,并用pyqt做了图形界面。

下面介绍一下主要思路,不过就不开源了,因为我的程序目前写的也不怎么样,可以使用,但用起来不怎么舒服,性能也有待优化。

一、需求分析

需求分析很重要,不过我要做的只是一个小项目,而且我既是用户也是开发者,就没仔细的做需求分析。简单来说,功能需求有:搜索小说,下载小说,查看书架,看小说(根据目录选择章节)

二、界面设计

已经确定了功能需求有4个,初步想法就是做4个页面:搜索,下载,书架,阅读。不过搜索和下载可以合并为一个页面,所以只需3个页面即可。

但是如果做一个主窗口,再做三个功能窗口,每次选择一个功能时,都要弹出窗口,感觉比较麻烦,所以我用了QSplitter和QFrame控件进行窗口内页面替换,类似steam的商店,库,社区按钮的效果。

下面展示一下我做的界面,比较质朴,都是用的最原始的控件。

书架

bookshelf.png

搜索

search.png

阅读

read.png

三、主要功能的实现和封装

仔细分析一下功能需求,具体要做的事都有:

搜索:发送http请求,得到搜索内容

下载:抓取小说的所有内容

书架:读取本地已下载的书,显示

阅读:显示小说目录,选取章节显示本章内容

其实不难看出,搜索和下载,用到的其实就是爬虫;而其他的都是对pyqt的一些基础控件控件的操作。而对于基础控件的操作较为简单,所以这个项目的核心是爬虫。

我决定采用urllib库和BeautifulSoup库写爬虫。

爬虫对于不同的网站,要作出相应的调整。具体怎么写这里不加赘述,同样只提供思路:

先通过urllib库抓取网页内容,然后用beautiful soup进行解析。

(beautiful soup非常强大,可以方便的处理HTML和xml等格式的文件。)解析得到需要的结果,写入文件或在pyqt的控件中显示。

四、初步优化

软件构思的非常好,但写出来后,发现不尽如人意,性能,稳定性都需要改进。具体表现在:

1.抓取加分析网页的时间较长,若小说章节多,则下载耗时长。

2.循环抓取每一章有可能卡住,导致无法继续抓取。经过分析是urllib.request会卡死,具体原因还在研究。

目前我采用了两个措施来进行改进:

1.多线程抓取

最多开设5个线程进行抓取,可以节省下载时间。而且提高程序的稳定性:若一个线程停止,还可以有其他线程进行抓取。

2.pv操作防止死锁

这个是为了解决线程的同步性问题和限制最大线程数的。具体请参见操作系统死锁方面的相关知识。我是使用threading.Semaphore进行信号量的pv操作。

五、打包成可移植的EXE文件

我使用了pyinstaller进行多个py文件的打包,打包为可移植的exe文件。最近有时间了可能会写一篇博客介绍pyinstaller的用法。网上也可以很容易的查到,这里就不多说了。

最后说一点感想:

很久没有静下心来研究技术,开发程序了。平时要上课,没有成块的时间。刚好趁着假期,做点想做的东西。

同时,纸上得来终觉浅,绝知此事要躬行,在做这个软件的过程中,我也实际运用了在课上学过的一些东西。

之前,我做软件基本只注重结果。程序只要能运行成功,满足使用要求就行了。在学完人机交互之后,现在我在开发软件的过程中,也在时刻注意编程的规范性和可维护性,注意对写的代码进行合理的封装。

另外,我原来也写过多线程的程序,但是不知道线程的同步可能产生的问题,程序的健壮性可想而知。最近通过学习操作系统,我了解了死锁、临界区等在并发需要注意的东西,而且也在实际编程中对其进行了处理。

总而言之,这个项目我还会继续做下去。一方面这个软件对自己有用,另一方面也可以激励自己更加深入的学习一些东西,并且实际运用。

python爬虫小说系统_python3小说爬虫相关推荐

  1. python3爬虫小型代码_python3简单爬虫实现代码

    分享一个python实现的网络爬虫代码.转自:http://www.cnblogs.com/yes123/p/3761388.html 写了个python3的.代码非常简单就不解释了,直接贴代码. # ...

  2. python网络验证系统_python3+django2 开发易语言网络验证(下)

    第六步:网络验证服务器端项目上线部署 功夫不负有心人,终于部署成功啦! 前期准备: 项目名:netauth 系统:百度云服务器下的Ubuntu16.4 软件:xshell(无论如何想办法用这个跟服务器 ...

  3. python网络爬虫_Python爬虫实战之网络小说

    今天和大家分享的是python爬虫实战,由于本人最近迷上了看网络小说,学生党又穷,只能看看网络dao版小说,现在这类dao版小说网站可以说非常的多,但是所有的网站进去都可以看见一大把的广告信息,非常影 ...

  4. python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载

    从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载Ehco 5 个月前 本来只是准备做一个爬起点小说名字的爬虫,后来想了一下,为啥不顺便把小说的内容也爬下来呢?于是我就写了这个 ...

  5. python多线程爬虫 爬取多个网页_python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)...

    思路 之前写过python爬取起点中文网小说,多线程则是先把爬取的章节链接存到一个列表里,然后写一个函数get_text每次调用这个函数就传一个章节链接,那么就需要调用n次该函数来获取n章的内容,所以 ...

  6. python3爬小说_python3小说爬虫

    作为一个很喜欢看书的人,有时候在网页上看小说,会被数不胜数的广告弄的很烦,刚好最近在研究python,就自己写了一个小说爬虫,并用pyqt做了图形界面. 下面介绍一下主要思路,不过就不开源了,因为我的 ...

  7. Python爬虫--笔趣阁小说爬取

    Python爬虫–笔趣阁小说爬取 爬虫用到的插件 import requests from lxml import etree 小说目录页 以小说"我有百万技能点"为例,在笔趣阁搜 ...

  8. python爬虫爬取歌曲_python爬虫实战:爬取全站小说排行榜

    喜欢看小说的骚年们都知道,总是有一些小说让人耳目一新,不管是仙侠还是玄幻,前面更了几十章就成功圈了一大波粉丝,成功攀上飙升榜,热门榜等各种榜,扔几个栗子出来: 新笔趣阁是广大书友最值得收藏的网络小说阅 ...

  9. python爬虫实战-爬取小说

    今天做一个爬虫练手的小实战:爬取顶点小说网的小说,实现下载到本地(虽然网站上本来就可以下载,不过还是自己写代码来有成就感嘛!) 爬取网站 进入官网后,点击元尊,就爬取这本书了. 我们先把整个网页爬下来 ...

最新文章

  1. 用 Linux 命令玩一个有趣的数学游戏
  2. package.json字段全解
  3. 微信支付 body不是UTF-8编码以及中文签名错误的问题
  4. 设计模式之十一:创建模式(Builder Pattern)
  5. C语言字符串类型转换为整型,c语言中将一个字符串转换到整型数据类型的函数是什么?...
  6. jpeglib的jpeg_finish_compress函数疑似越界
  7. AllWinner board 笔记
  8. HBase权威指南阅读——第一章
  9. keil4 如何生成bin文件
  10. xp计算机字体在哪,Windows XP系统字体库在哪-如何安装新字体
  11. 国产单路AHDRX芯片XS9950,替代TP9950
  12. android手游渠道接入业务+技术全讲解
  13. 数据库设计中面临的主要困难和问题的总结
  14. 工作督办系统功能开发设计
  15. C# 获取汉字的拼音首字母(转)
  16. 离散数学(8)——函数
  17. 联邦学习笔记-《Federated Machine Learning: Concept and Applications》论文翻译个人笔记
  18. ubuntu命令行界面自作iso镜像
  19. MySQL基础学习——Day5
  20. 用vue3实现根据出生年月计算年龄

热门文章

  1. 个人服务器(Linux)安装confluence
  2. PowerDesigner(数据库建模工具) 使用教程+如何生成主键和自增列
  3. 嵌入式Linux Qt设备随机死机问题分析记录
  4. [Tensorflow] Ubuntu下NVIDIA Driver+CUDA+cuDNN 安装踩坑总结
  5. php 魔术方法 sleep,PHP 魔术方法: __sleep __wakeup
  6. 在ROS下利用OpenCV的Mat类,将激光点云展开为深度图像(从零开始,超详细)
  7. 路由、中继、AP、客户端模式之间的区别
  8. 怎样才能做好一场直播
  9. C#,图论与图算法,二分图(Bipartite Graph)的霍普克罗夫特-卡普(Hopcroft Karp)最大匹配算法与源程序
  10. IDEA设置启动选择项目