1.0版本链接:传送门

2.0版本链接:传送门

我想了一下,每个版本打包exe 意义不大,如果是最终版什么的 打一个还行,所以暂时不打包了 有需要的可以留言,我在打包.

这里使用了第三方库pyquery,安装方法见:1.0版本链接

在上一版本的基础上做个改进.主要是,增加推荐榜,支持模糊查询,交互方式有一定优化.如上图:

下面是代码:

# -*- coding:gbk -*-
'''
file desc:novel downloader
author:kingviker
email:kingviker@163.com.kingviker88@gmail.com
date:2013-05-21
depends:python 2.7.4,pyquery
'''import os,codecs,urllib,urllib2,sys
from pyquery import PyQuery as pqsearchUrl = 'http://www.dushuge.net/modules/article/search.php'
baseSavePath="E:/enovel/"def searchTopList():html = pq(url="http://www.dushuge.net")searchTopA= html("#compZnNav").next().find("td").eq(0)("a")searchTopList = []for index in range(1,len(searchTopA)):searchTopList.append([searchTopA.eq(index).text(),searchTopA.eq(index).attr("href")])return  searchTopListdef searchNovel(novelName):values = urllib.urlencode({'searchkey' : novelName,    'searchtype' : 'articlename'})req = urllib2.Request(url=searchUrl,data=values)response = urllib2.urlopen(req)searchHtml_pq = pq(response.read())novelUrlHtml = searchHtml_pq("#content > .sf-mainbox > .head > h1 > a")#print novelUrlHtmlif not novelUrlHtml :resultList = searchHtml_pq("#content > table > tr")if resultList:novelList = []    for index in range(1,len(resultList)):novelTR = resultList.eq(index)novelA = novelTR("td").eq(0)("a")#print novelA.text(),novelA.attr("href")novelList.append([novelA.text(),novelA.attr("href")])return novelListelse:returnreturn (novelUrlHtml.eq(2).text(),novelUrlHtml.eq(2).attr("href"))def analyzeNovel(url):print "开始分析章节信息..."#using pyquery to grub the webpage's contenthtml_pq = pq(url=url)#print html_pq("div.book_article_texttable").find(".book_article_texttext")totalChapters = len(html_pq("div.book_article_texttable").find(".book_article_listtext").find("a"))print "总章节数:",totalChaptersreturn totalChaptersdef fetchDownloadLinks(url):#using to save pieces and chapter listspieceList=[]chapterList=[]html_pq = pq(url=url)#find the first piece of the novel.piece = html_pq("div.book_article_texttable > div").eq(0)isPiece = Trueif piece.attr("class")=="book_article_texttitle":#get the current piece's textpieceList.append(piece.text())#print "piece Text:", pieceelse:isPiece = FalsepieceList.append("无")#scan out the piece and chapter listsnextPiece=Falsewhile nextPiece==False:if isPiece:chapterDiv = piece.next()else:isPiece = TruechapterDiv = piece#print "章节div长度:",chapterDiv.lengthpiece = chapterDivif chapterDiv.length==0:pieceList.append(chapterList[:])del chapterList[:]nextPiece=Trueelif chapterDiv.attr("class")=="book_article_texttitle":pieceList.append(chapterList[:])del chapterList[:]pieceList.append(piece.text())else:chapterUrls = chapterDiv.find("a");for urlA in chapterUrls:urlList_temp = [pq(urlA).text(),pq(urlA).attr("href")]chapterList.append(urlList_temp)print "下载列表收集完成",len(pieceList)return pieceListdef downloadNovel(novel,startChapterNum):# if os.path.exists(baseSavePath+novel[0]) is not True:#    os.mkdir(baseSavePath+novel[0])#based on the piecelist,grub the special webpage's novel content and save them .if os.path.exists(baseSavePath+novel[0]+".txt"):os.remove(baseSavePath+novel[0]+".txt")#using codecs to create a file. write mode(w+) is appended.novelFile = codecs.open(baseSavePath+novel[0]+".txt","wb+","utf-8")pieceList = fetchDownloadLinks(novel[1])chapterTotal = 0;print "从",startChapterNum,"章开始下载"#just using two for loops to analyze the piecelist.for pieceNum in range(0,len(pieceList),2):piece = pieceList[pieceNum]print "开始下载篇章",pieceList[pieceNum]chapterList = pieceList[pieceNum+1]for chapterNum in range(0,len(chapterList)):chapterTotal +=1# print chapterTotal,startChapterNum,startChapterNum>chapterTotal# print type(startChapterNum),type(chapterTotal)if startChapterNum > chapterTotal:continuechapter = chapterList[chapterNum]print "开始下载章节",chapter[0]chapterPage = pq(url=novel[1]+chapter[1])chapterContent = (piece+" "+chapter[0]+" \r")#print chapterPage("#booktext").remove("strong").html()chapterContent += chapterPage("#booktext").remove("strong").html().replace("<br />","\r")print "小说内容:",len(chapterContent)novelFile.write(chapterContent+"\r"+"\r")novelFile.close()print "下载完成,文件位置:",baseSavePath+novel[0]+".txt"print "小说下载器 by kingviker!,输入quit返回或退出:"
#if the novel's file system  not exists,created.
if os.path.exists(baseSavePath) is not True:os.mkdir(baseSavePath)
while(True):searchToplist = searchTopList()for index in range(len(searchToplist)):print "(",index,")",searchToplist[index][0]name = raw_input("输入序号直接下载热门小说,或者输入想要下载的小说名称搜索")try:if name =="quit":print "bey"breakelif int(name) in range(11):print "选择小说:",searchToplist[int(name)][0]totalChapters = analyzeNovel(searchToplist[int(name)][1])startChapterNum = raw_input("请输入起始章节,全部下载请按回车:")if startChapterNum =="quit":continueif not startChapterNum :startChapterNum=0#print startChapterNumdownloadNovel(searchToplist[int(name)],int(startChapterNum)) except Exception ,e:novel = searchNovel(name)if not novel :print "没有查找到小说",name,"或者小说名称输出错误!"else:if isinstance(novel,list):print "以下是结果列表"for index in range(len(novel)):print "(",index,")",novel[index][0]novelIndex = raw_input("请输入序号选择:")if novelIndex =="quit":continuenovelIndex = int(novelIndex)print"选定小说:",novel[novelIndex][0]searchHtml_pq = pq(url=novel[index][1])novelUrlHtml = searchHtml_pq("#content > .sf-mainbox > .head > h1 > a")novel[index][1] = novelUrlHtml.eq(2).attr("href")totalChapters = analyzeNovel(novel[index][1])startChapterNum = raw_input("请输入起始章节,全部下载请按回车:")if startChapterNum =="quit":continueif not startChapterNum :startChapterNum=0#print startChapterNumdownloadNovel(novel[index],int(startChapterNum))   elif isinstance(novel,tuple):print "已找到小说:",novel[0]result = raw_input("输入yes或回车选定小说,输入no重新输入小说名称:")if not result or result=="yes":totalChapters = analyzeNovel(novel[1])startChapterNum = raw_input("请输入起始章节,全部下载请按回车:")if not startChapterNum :startChapterNum=0#print startChapterNumdownloadNovel(novel,int(startChapterNum))   elif result =="no":pass

这一版本主要更新如下:

1.增加推荐榜

2,改进用户交互界面.

3,支持模糊查询

下一版本目标:

下一版本我打算做一个优化版本,感觉代码越来越多 越来越乱,是时候套用一些模式和编码技巧的时候了.

优化目标:代码清晰易读,复用度高,增强拓展性,

python之小说下载器version3.0相关推荐

  1. 下载输入python之小说下载器version2.0

    本文是一篇关于下载输入的帖子 上一版本链接:传送门 这是我用pyinstaller打包成的exe文件,便利体验:传送门(上传了正在审核,请稍等) 这里使用了第三方库pyquery,安装方法见:上一版本 ...

  2. python 小说下载工具_下载输入python之小说下载器version2.0

    本文是一篇关于下载输入的帖子 上一版本链接:传送门 这是我用pyinstaller打包成的exe文件,便利体验:传送门(上传了正在审核,请稍等) 这里使用了第三方库pyquery,安装方法见:上一版本 ...

  3. Python实现小说下载器,可以打包exe

    前言 闲的无聊,现在没得什么好剧追(你们或许可以给我推荐推荐) 朋友都在看小说,那我就来用Python搞一个小说下载器吧 顺便打包一下 实现步骤 爬虫基本四个步骤: 采集一章小说内容 发送请求, 模拟 ...

  4. python编程免费小说_使用Python开发小说下载器,不再为下载小说而发愁

    有点荒废 这几天有点荒废,之前弃坑的网文<伏天氏>,这几天又给捡起来了.然后一发不可收拾的只想看小说,荒废了我的学习.在这里我要检讨啊..... 像我这样的穷人,看小说肯定是找免费的网站, ...

  5. python 小说下载工具_下载代码python之小说下载器

    时光紧张,先记一笔,后续优化与完善. 首先声明,我写这个是为了练手,我不看小说了.因为眼睛近视太厉害了,我连手机都不玩了. 小说下载器的目标是为了解决当初市面上能下载最新小说的网站是在太少了,但是在线 ...

  6. 使用Python开发小说下载器,不再为下载小说而发愁 #华为云·寻找黑马程序员#

    需求分析 免费的小说网比较多,我看的比较多的是笔趣阁.这个网站基本收费的章节刚更新,它就能同步更新,简直不要太叼.既然要批量下载小说,肯定要分析这个网站了- 在搜索栏输入地址后,发送post请求获取数 ...

  7. python tkinter下载器_下载小说还要去找网站?Python使用tkinter打造一个小说下载器...

    前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...

  8. python 小说下载工具_python 制作网站小说下载器

    基本开发环境 ・ Python 3.6 ・ Pycharm 相关模块使用 目标网页分析 输入想看的小说内容,点击搜索 这里会返回很多结果,我只选择第一个 网页数据是静态数据,但是要搜索,是post请求 ...

  9. 【Python】实现一个小说下载器,可以打包成exe(附原码)

    前言 闲的无聊,现在没得什么好剧追(你们或许可以给我推荐推荐) 朋友都在看小说,那我就来用Python搞一个小说下载器吧 顺便打包一下 实现步骤 爬虫基本四个步骤: 采集一章小说内容 发送请求, 模拟 ...

最新文章

  1. 人工智能系列精品课学习笔记-2如何提问以获得更多更好的帮助
  2. ACM-ICPC 2017 Asia Nanning
  3. Python 调度算法 死锁 静动态链接 分页分段
  4. 详解 MySql InnoDB 中意向锁的作用
  5. sqlserver存储过程加锁后怎么解锁_MySQL 的加锁处理,你都了解的一清二楚了吗?...
  6. C# winform程序运行在XP
  7. leetcode刷题日记-472. 连接词
  8. 关于搭建Hybrid App所需要的基础技术一文
  9. 微信开发者工具的tabBar和数据双向绑定
  10. 关于CS61b sp21中proj0的问题
  11. Py 实现导线测量的内业计算
  12. 第三方支付宝API应用流程
  13. 工行智能客服服务量突破1.7亿笔;迪拜机场拟用人脸识别技术替代护照检查
  14. GitHub开源:支持100多种语言的OCR文字识别
  15. java音频剪辑_Java混剪音频
  16. “eclipse在编译代码时运行结果始终是之前程序的结果”如何解决?
  17. 模拟电子技术实验指导书
  18. 使用MD.ai标注医学图像及covid-19数据集标注
  19. Android push原理
  20. aaaaaaaaaaaaaa

热门文章

  1. SEO中的十大关键词竞争度分析方法
  2. 微信自定义菜单使用特殊字符出现的问题
  3. ElasticSearch 在 Spring 项目中的实践
  4. 51单片机电机测速程序c语言,单片机电机测速程序
  5. 已解决:Win10无法访问Samba共享文件夹
  6. 百度地图如何在html中显示图片,在网页中插入百度地图(实例)
  7. python爬取笔趣阁小说(附源码)
  8. Ps笔刷:雨水掉落效果
  9. Miktex 修改经验
  10. fiddler手机抓包配置代理后没有网络(手机不能上网)