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

本文是一篇关于下载输入的帖子

            上一版本链接:传送门 

            这是我用pyinstaller打包成的exe文件,便利体验:传送门(上传了正在审核,请稍等)

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

            在上一版本的基础上做个改良.先上图:

    下载和输入

            上面是代码:

    

# -*- coding:gbk -*-
'''
file desc:novel downloader
author:kingviker
email:kingviker@163.com.kingviker88@gmail.com
date:2013-05-31
depends:python 2.7.4,pyquery
'''

import os,codecs,urllib,urllib2
from pyquery import PyQuery as pq


  
searchUrl = 'http://www.dushuge.net/modules/article/search.php'    
baseSavePath="E:/enovel/"
  
print "小说下载器 by kingviker!"
def 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 novelUrlHtml
    if not novelUrlHtml :
        return 
    return (novelUrlHtml.eq(2).text(),novelUrlHtml.eq(2).attr("href"))

def analyzeNovel(url):
    #using pyquery to grub the webpage's content
    html_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"))
    return totalChapters

def fetchDownloadLinks(url):
    #using to save pieces and chapter lists
    pieceList=[]
    chapterList=[]

    html_pq = pq(url=url)
    #find the first piece of the novel.
    piece = html_pq("div.book_article_texttable > div").eq(0)

    isPiece = True
    if piece.attr("class")=="book_article_texttitle":
        #get the current piece's text
        pieceList.append(piece.text())
        #print "piece Text:", piece
    else:
        isPiece = False
        pieceList.append("无")
    #scan out the piece and chapter lists
    nextPiece=False
    while nextPiece==False:
        if isPiece:
            chapterDiv = piece.next()
        else:
            isPiece = True
            chapterDiv = piece
        #print "章节div长度:",chapterDiv.length
        piece = chapterDiv
        if chapterDiv.length==0:
            pieceList.append(chapterList[:])
            del chapterList[:]
            nextPiece=True
        elif 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 pieceList
    
def 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:
                continue
           
            chapter = chapterList[chapterNum]
            print "开始下载章节",chapter[0]
            chapterPage = pq(url=novel[1]+chapter[1])

            chapterContent = piece+" "+chapter[0]+"\r\n"
            chapterContent += chapterPage("#booktext").html().replace("<br />","\r\n")
            print "小说内容:",len(chapterContent)
            novelFile.write(chapterContent+"\r\n"+"\r\n")
        
    novelFile.close()
    print "下载实现,文件位置:",baseSavePath+novel[0]+".txt"
    

            

while(True):
    #if the novel's file system  not exists,created.
    if os.path.exists(baseSavePath) is not True:
        os.mkdir(baseSavePath)
    
    name = raw_input("请输入想要下载的小说名称,输入quit退出:")
    if name =="quit":
        print "bey"
        break
    novel = searchNovel(name)
    if not novel :
        print "没有查找到小说",name,"或者小说名称输出错误!"
    else:
        print "已找到小说:",novel[0]
        result = raw_input("输入yes或回车选定小说,输入no重新输入小说名称:")
        if not result or result=="yes":
            print "开始分析章节信息..."
            totalChapters = analyzeNovel(novel[1])
            print "总章节数:",totalChapters
            startChapterNum = raw_input("请输入肇端章节,全部下载请按回车:")
            if not startChapterNum :
                startChapterNum=0
            #print startChapterNum
            downloadNovel(novel,int(startChapterNum))   
        elif result =="no":
            pass
    每日一道理
今天阳光很好,坐在窗前,看窗外如此晴朗的天感觉特别舒心,雨过天晴后的世界总给人一种明媚,仿佛阳光照耀在“心田”上空,让前些天被风雨践踏的花朵重新得到爱的关怀,重现生命的活力!

    

            这一版本重要更新如下:

    

    

    1.函数封装

    

    

    2,增加用户交互界面.

    

    

    3,用户可自在输入小说名称查询下载

    

    

    4.可选肇端下载章节

    

    

    5.暂时取消单章保存模式

    

    

    

    下一版本目标:

    

    

    

    1.支撑模糊查询

    

    

    2,增加热门小说列表

    

    

    3.优化表现界面

    

    

    

文章结束给大家分享下程序员的一些笑话语录: N多年前,JohnHein博士的一项研究表明:Mac用户平均IQ要比PC用户低15%。超过6000多的参加者接受了测试,结果清晰的显示IQ比较低的人会倾向于使用Mac。Mac用户只答对了基础问题的75%,而PC用户却高达83%。

--------------------------------- 原创文章 By
下载和输入
---------------------------------

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3111416.html