小说下载器(python)

为了练习BeautifulSoup模块的使用,搞了个小说下载器。

一、效果展示

二、模块导入

需要的模块有BeautifulSoup,os,requests,re和lxml

from bs4 import BeautifulSoup
import os,requests,re
三、功能实现

1、为了方便找到想要的小说,于是我找了一个盗(和)版(谐)小说网站。网址是笔趣看

2、指定小说的下载地址

os.chdir(r"D:\\")

3、首先我需要根据每一章节的网址提取小说内容

def xiazai(url):
    try:
        html=requests.get(url).text
        soup=BeautifulSoup(html,"lxml")
        name=soup.find("div",class_="p").find_all("a")[1].get_text()
        zj=soup.find("h1").get_text()
        book=soup.find_all("div",id="content",class_="showtxt")[0]
        book=str(book.get_text()).replace(u"\xa0",u" ").replace("       ","\n   ").replace("&1t;/p>","").replace(url,"").replace("请记住本书首发域名:www.biqukan.com。笔趣阁手机版阅读网址:m.biqukan.com","")
        book=book.replace("[笔趣看  www.biqukan.com]百度搜索“笔趣看小说网”手机阅读:m.biqukan.com","").replace("手机阅读地址:http://m.biqukan.com,数据和书签与电脑站同步,无广告清新阅读!","")  #去除广告
        with open(name+".txt","a") as f:
            f.write(zj+"\n"+book+"\n\n\n")
        print(zj+"  下载完成")
    except:
        print("下载失败")
这里我用string的replace()方法将广告替换为空白,同时由于文章内容存在特殊字符将导致存储失败所以我也将其替换为空格string.replace(u"\xa0",u" ")

4、既然已经能够提取给定地址的小说内容,那通过小说目录提供的地址,提取整本小说内容也不是不可能的。

def mulu(url):
    html=requests.get(url).text
    link1=re.findall("正文卷</dt>([\S\s]*?)</dl>",html)[0]
    link2=re.findall('href="(.*?)">',link1)
    for link in link2:
        link="http://www.biqukan.com"+link
        xiazai(link)

到此,只要提供小说目录的地址,就可以提取整本小说内容,但是正常使用的话还是不太方便,有没有方法能够直接通过查找小说名字就能下载小说呢?

5、还好,网站提供了搜索小说的接口http://www.biqukan.com/s.php?ie=gbk&s=2758772450457967865&q=“小说名”。

利用它,我们就可以直接对感兴趣的小说进行搜索,然后选择想下载的小说。

name=input("输入书名:")
url="http://www.biqukan.com/s.php?ie=gbk&s=2758772450457967865&q={}".format(name)
html=requests.get(url).text
try:
    link1=re.findall('"bookimg"><a href="(.*?)"><img src=',html)
    name1=re.findall('/">([\u4E00-\u9FA5]+)</a></h4><div class="cat">',html)
    i=1;
    for name in name1:
        print(str(i)+"  "+name)
        i=i+1
    i=0
    for link1[i] in link1:
        link1[i]="http://www.biqukan.com"+link1[i]
        i=i+1
    s=input("请选择: ")
    mulu(link1[int(s)-1])
except:
    print("未查询到相关结果!")
6、至此,一个完整的小说下载器就完成了。









  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值