收藏 | 一键下载N部小说,你要的免费都在这里

简介: 收藏 | 一键下载N部小说,你要的免费都在这里

大家好,我是欧K。本期给大家带来如何一键下载N部小说,以后再也不用一章一章,一部一部的下载小说了,希望对你有所帮助。


闲言少叙,直入主题

1. 网页分析

打开136书屋网址:https://www.136book.com/可以看到分类小说排行榜

1.1 榜单信息 选择任意分类小说,这里我们以第一类--情感小说排行榜为例:

按F12或者右键选择审查元素查看网页结构:

右键选择审查元素查看网页结构:可以看到,整个榜单存在于一个<table>表格标签中,每部小说信息在每个<tr>标签中,包含了小说的名称、链接、作者、状态等等,这里我们主要看名称链接


1.2 章节信息 以第一部小说《这吻超纲了》为例:

这部小说一共91个章节,我们需要依次获取每个章节的内容这里我们看到,所以章节的内容都包含在<ol>列表标签中,每个具体章节的内容(章节名称和内容链接)则包含在每个<li>标签中。

点击每个链接即可获得章节具体内容。


2. 爬取数据

准备工作,导入以下模块:

import os
import time
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent

如果模块缺失,直接pip安装即可。2.1 获取排行榜小说信息

以前十部为例:

代码:

# 获取排行榜单

def getranklist(url,headers):
    allinfo = []
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        soup = BeautifulSoup(r.text, 'html.parser')
        lsts = soup.find_all('tr', attrs={'class': 'bg'})
        for lst in lsts[:10]:
            oneinfo = []
            nh = lst.find_all('td')[1]
            href = nh.a['href']
            name = nh.text
            oneinfo.append(name)
            oneinfo.append(href)
            allinfo.append(oneinfo)
        return allinfo
    except:
        if allinfo:
            return allinfo
        else:
            return None

结果:

2.2 获取每部小说所有章节信息

代码:

# 获取一部小说的所有章节名称及链接

def getallchapters(url,headers):
    allinfo = []
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        soup = BeautifulSoup(r.text, 'html.parser')
        info = soup.find_all('ol', attrs={'class': 'clearfix'})[1]
        lsts = info.find_all('li')
        for lst in lsts:
            oneinfo = []
            href = lst.a['href']
            name = lst.text
            oneinfo.append(name)
            oneinfo.append(href)
            allinfo.append(oneinfo)
        return allinfo
    except:
        if allinfo:
            return allinfo
        else:
            return None

结果:

2.3 获取具体章节信息

代码:

# 获取每章节具体内容

def getchapterinfo(info,headers):
    try:
        r = requests.get(info[1], headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        soup = BeautifulSoup(r.text, 'html.parser')
        lsts = soup.find('div', attrs={'id': 'content'})
        print(lsts.text.lstrip('\n'))
    except:
        return None

结果:

3. 保存数据

要求:

  • 所有小说放在新建的books文件夹中(注意判断是否已经存在)
  • 将每部小说分别放在自己命名的文件夹
  • 按章节存储

代码:

for st in ranklist:
        try:
            filepath = os.getcwd() + '\\books\\' + st[0]
            if not os.path.exists(filepath):
                os.makedirs(filepath)
            onebookhrefs = getallchapters(st[1], headers)
            for info in onebookhrefs:
                onechapterinfo = getchapterinfo(info, headers)
                with open(f'{filepath}\\{info[0]}.txt', 'w') as f:
                    f.write(onechapterinfo)
        except:
            continue

结果:

with open 语句中使用了f-string格式化,具体用法可参考下面这篇文章(点击跳转):

技巧 | 5000字超全解析Python三种格式化输出方式【% / format / f-string】


完。

END


以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、点在看也可以分享到朋友圈让更多人知道哦

相关文章
|
15小时前
|
人工智能 自然语言处理 安全
新年愿望清单:搭建官网选哪家?
而今立足「SaaS系统」面向中小企业的各种低成本建站产品让人眼花缭乱,小云对比了几大厂牌,梳理出一些【阿里云精选建站】的功能亮点,篇幅有限,各位看官可酌情参考——
117 0
按键精灵下载文华财经数据 一键下载
按键精灵下载文华财经数据 一键下载
71 0
|
搜索推荐 大数据 PHP
网址宣传意义
网址宣传意义
|
数据采集 存储 Python
Python爬虫 爬取下载美国科研网站数据
Python爬虫 爬取下载美国科研网站数据
127 0
|
算法 机器学习/深度学习 安全
2017阿里技术年度精选| 免费资料库
2017年,在技术发展的历史上,一定是个特别的一年:柯洁与AlphaGo的惊世大战,无人咖啡店开放体验,AI设计师“鲁班”横空出世、三年投入千亿的达摩院正式成立……
2107 0
2017阿里技术年度精选| 免费资料库
|
安全
印度最大软件开发商塔塔咨询官网首页被黑
北京时间2月8日消息,据国外媒体报道,印度最大的软件开发商塔塔(Tata)咨询服务公司网站今日遭黑客攻击。塔塔咨询主要开发系统安全软件。 被攻击后的塔塔咨询网站首页 黑客在塔塔公司网站首页上用法文及英文贴出该域名待售的消息。
1183 0