iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 爬取全本免费小说网的小说
  • 292
分享到

python 爬取全本免费小说网的小说

小说网全本小说 2023-01-30 22:01:10 292人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

  这几天朋友说想看电子书,但是只能在网上看,不能下载到本地后看,问我有啥办法?我找了好几个小说网址看了下,你只能直接在网上看,要下载txt要冲钱买会员,而且还不能在浏览器上直接复制粘贴。之后我就想到python的爬虫不就可以爬取后下载吗

  这几天朋友说想看电子书,但是只能在网上看,不能下载到本地后看,问我有啥办法?我找了好几个小说网址看了下,你只能直接在网上看,要下载txt要冲钱买会员,而且还不能在浏览器上直接复制粘贴。之后我就想到python爬虫不就可以爬取后下载吗?

  码源下载:

    https://GitHub.com/feiquan123/GetEBook/

  思路:

  首先,选择网址:Http://www.yznnw.com/files/article/html/1/1129/index.html 这个是全本免费小说网上《龙血战神》的网址:

  

  F12,分析网页元素,可以看到,在此页的 .zjlist4 li a 下存放了所有章节的URL,首先我们要获取这些url放在一个数组里。然后循环遍历下载

  

  有了这些网址后开始分析具体的每一章:

  书名:

  

  章节名:

  

  内容:

  

  下一章:

  

  有了这些信息我们就可以开始爬取了(其实这里可以不爬取下一章的,主要我之前的思路是:下载小说的第一章后,返回小说的下一章,之后不断递归直到最后一页,这么做后下载速度慢,不能并发,还有就是一直递归占用资源大,一直请求服务器会断开连接,导致失败)

  所以我换成了这种思路:就是先获取所有的章节的网页连接,再用线程(你也可以用进程)开始下载,果然速度上升了好多,

  但是,仔细分析后发现,其实有些章节是作者的感言啥的,这些是不用下载的,而真正的章节的标题一定含有:****章*****,所以要用正则排除掉(这个要具体分析,不一定每个作者的感言标题都是这样的,不过直接使用此程序也可以,这样也没啥)

           

  代码如下:

   

#coding:utf-8
import urllib
import urllib.request
import multiprocessing
from bs4 import BeautifulSoup
import re
import os
import time

def get_pages(url):
    soup=""
    try:
        # 创建请求日志文件夹
        if 'Log' not in os.listdir('.'):
            os.mkdir(r".\Log")

        # 请求当前章节页面  params为请求参数
        request = urllib.request.Request(url)
        response = urllib.request.urlopen(request)
        content = response.read()
        data = content.decode('gbk')
        # soup转换
        soup = BeautifulSoup(data, "html.parser")

    except Exception as e:
        print(url+" 请求错误\n")
        with open(r".\Log\req_error.txt",'a',encoding='utf-8') as f:
            f.write(url+" 请求错误\n")
        f.close()
    return soup

# 通过章节的url下载内容,并返回下一页的url
def get_ChartTxt(url,title,num):
    soup=get_pages(url)

    # 获取章节名称
    subtitle = soup.select('#htmltimu')[0].text
    # 判断是否有感言
    if re.search(r'.*?章', subtitle) is  None:
        return
    # 获取章节文本
    content = soup.select('#htmlContent')[0].text
    # 按照指定格式替换章节内容,运用正则表达式
    content = re.sub(r'\(.*?\)', '', content)
    content = re.sub(r'\r\n', '', content)
    content = re.sub(r'\n+', '\n', content)
    content = re.sub(r'<.*?>+', '', content)


    # 单独写入这一章
    try:
        with open(r'.\%s\%s %s.txt' % (title, num,subtitle), 'w', encoding='utf-8') as f:
            f.write(subtitle + content)
        f.close()
        print(num,subtitle, '下载成功')

    except Exception as e:
        print(subtitle, '下载失败',url)
        errorPath='.\Error\%s'%(title)
        # 创建错误文件夹
        try :
            os.makedirs(errorPath)
        except Exception as e:
            pass
        #写入错误文件
        with open("%s\error_url.txt"%(errorPath),'a',encoding='utf-8') as f:
            f.write(subtitle+"下载失败 "+url+'\n')
        f.close()
    return


# 通过首页获得该小说的所有章节链接后下载这本书
def thread_getOneBook(indexUrl):
    soup = get_pages(indexUrl)
    # 获取书名
    title = soup.select('#htmldhshuming')[0].text
    # 根据书名创建文件夹
    if title not in os.listdir('.'):
        os.mkdir(r".\%s" % (title))
        print(title, "文件夹创建成功———————————————————")

    # 加载此进程开始的时间
    print('下载 %s 的PID:%s...' % (title, os.getpid()))
    start = time.time()

    # 获取这本书的所有章节
    charts_url = []
    # 提取出书的每章节不变的url
    indexUrl = re.sub(r'index.html', '', indexUrl)
    charts = soup.select(".zjlist4 li a")
    for i in charts:
        # print(j+i.attrs['href'])
        charts_url.append(indexUrl + i.attrs['href'])

    # 创建下载这本书的进程
    p = multiprocessing.Pool()
    #自己在下载的文件前加上编号,防止有的文章有上,中,下三卷导致有3个第一章
    num=1
    for i in charts_url:
        p.apply_async(get_ChartTxt, args=(i,title,num))
        num+=1
    print('等待 %s 所有的章节被加载......' % (title))
    p.close()
    p.join()
    end = time.time()
    print('下载 %s  完成,运行时间  %0.2f s.' % (title, (end - start)))
    print('开始生成 %s ................' %title )
    sort_allCharts(r'.',"%s.txt"%title)
    return

# 创建下载多本书书的进程
def process_getAllBook(base):
    # 输入你要下载的书的首页地址
    print('主程序的PID:%s' % os.getpid())
    book_indexUrl=[
        'http://www.yznnw.com/files/article/html/1/1129/index.html',
        'http://www.yznnw.com/files/article/html/29/29931/index.html',
        'http://www.yznnw.com/files/article/html/0/868/index.html'
    ]
    print("-------------------开始下载-------------------")
    p = []
    for i in book_indexUrl:
        p.append(multiprocessing.Process(target=thread_getOneBook, args=(i,)))
    print("等待所有的主进程加载完成........")
    for i in p:
        i.start()
    for i in p:
        i.join()
    print("-------------------全部下载完成-------------------")

    return

#合成一本书 def sort_allCharts(path,filename): lists=os.listdir(path) # 对文件排序 # lists=sorted(lists,key=lambda i:int(re.match(r'(\d+)',i).group())) lists.sort(key=lambda i:int(re.match(r'(\d+)',i).group())) # 删除旧的书 if os.path.exists(filename): os.remove(filename) print('旧的 %s 已经被删除'%filename) # 创建新书 with open(r'.\%s'%(filename),'a',encoding='utf-8') as f: for i in lists: with open(r'%s\%s' % (path, i), 'r', encoding='utf-8') as temp: f.writelines(temp.readlines()) temp.close() f.close() print('新的 %s 已经被创建在当前目录 %s '%(filename,os.path.abspath(filename))) return if __name__=="__main__": # # 主页 base = 'http://www.yznnw.com' # 下载指定的书 process_getAllBook(base)
   #如果下载完出现卡的话,请单独执行如下命令 # sort_allCharts(r'.\龙血战神',"龙血战神.txt")

 

   如果要下载其他书的话,找到书的首页,添加到如下位置:

   找书的首页URL,随便点开一章,删除后面的***.html,后回车,就是这本书的首页URL。

  

  

  运行结果:

        

 

  

  

 

     请求URL失败的网页放在,Log\req_error.txt中

  爬取失败的章节存放在这本书的目录下的error_url.txt中

  之后,你可以使用电子书生成器,生成就好,也可以在跟目录下看到相应的总的小说:

  

  这个是我爬了3本书的结果,爬完后程序卡了,只能结束掉,单独执行最后一条命令了。。。。。。。。

   手机端打开,目录也正确

        

 

 

版权

作者:feiquan

出处:http://www.cnblogs.com/feiquan/

版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)

--结束END--

本文标题: python 爬取全本免费小说网的小说

本文链接: https://www.lsjlt.com/news/180351.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 爬取全本免费小说网的小说
      这几天朋友说想看电子书,但是只能在网上看,不能下载到本地后看,问我有啥办法?我找了好几个小说网址看了下,你只能直接在网上看,要下载txt要冲钱买会员,而且还不能在浏览器上直接复制粘贴。之后我就想到python的爬虫不就可以爬取后下载吗...
    99+
    2023-01-30
    小说网 全本 小说
  • Python爬取小说
    这次爬虫并没有遇到什么难题,甚至没有加header和data就直接弄到了盗版网站上的小说,真是大大的幸运。 所用模块:urllib,re 主要分三个步骤: (1)分析小说网址构成; (2)获取网页,并分离出小说章节名和章节内容; (3)写...
    99+
    2023-01-31
    小说 Python
  • python爬虫之小说网站--下载小说(
    python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/2447.html) 2.分析自己要得到的内...
    99+
    2023-01-30
    爬虫 小说网站 小说
  • python怎么爬取小说内容
    在Python中,可以使用`requests`库发送HTTP请求,并使用`BeautifulSoup`库解析HTML页面,从而爬取小...
    99+
    2023-10-10
    python
  • Python爬虫之爬取最新更新的小说网站
    目录一、引言二、关于相关访问请求及应答报文2.1、百度搜索请求2.2、百度返回搜索结果2.3、小说网站关于最新更新的展现及html报文格式三、实现思路及代码3.1、根据url获取网站...
    99+
    2024-04-02
  • Python的scrapy之爬取6毛小说
    闲来无事想看个小说,打算下载到电脑上看,找了半天,没找到可以下载的网站,于是就想自己爬取一下小说内容并保存到本地 圣墟 第一章 沙漠中的彼岸花 - 辰东 - 6毛小说网  http://www.6mao.com/html/40/40184...
    99+
    2023-01-30
    小说 Python scrapy
  • python爬虫之爬取笔趣阁小说
    目录前言一、首先导入相关的模块二、向网站发送请求并获取网站数据三、拿到页面数据之后对数据进行提取四、获取到小说详情页链接之后进行详情页二次访问并获取文章数据五、对小说详情页进行静态页...
    99+
    2024-04-02
  • 怎么用python爬取小说内容
    使用Python爬取小说内容,可以使用requests库发送HTTP请求获取小说网站的HTML内容,然后使用BeautifulSou...
    99+
    2023-09-12
    python
  • python中怎么使用XPath爬取小说
    这篇文章将为大家详细讲解有关python中怎么使用XPath爬取小说,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决...
    99+
    2023-06-14
  • python中使用XPath爬取小说的方法
    这篇“python中使用XPath爬取小说的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python中使用XPath爬...
    99+
    2023-06-30
  • 使用PyCharm怎么爬取小说
    使用PyCharm怎么爬取小说?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。爬取小说的思路: 1.获取小说地址本文以搜书网一小说为例《嘘,梁上有王妃!》目录网址:...
    99+
    2023-06-14
  • Python爬虫:爬取小说并存储到数据库
    爬取小说网站的小说,并保存到数据库第一步:先获取小说内容#!/usr/bin/python # -*- coding: UTF-8 -*- import ...
    99+
    2024-04-02
  • python爬虫之爬取笔趣阁小说升级版
    python爬虫高效爬取某趣阁小说 这次的代码是根据我之前的 笔趣阁爬取 的基础上修改的,因为使用的是自己的ip,所以在请求每个章节的时候需要设置sleep(4~5)才不会被封ip...
    99+
    2024-04-02
  • python使用XPath解析数据爬取起点小说网数据
    目录1. xpath 的介绍优点:安装lxml库XML的树形结构:选取节点的表达式举例:2. 爬取起点小说网在浏览器中获取书名和作者测试使用xpath获取起点小说网的数据1. xpa...
    99+
    2024-04-02
  • 怎么用Python写个听小说的爬虫
    这篇文章主要介绍了怎么用Python写个听小说的爬虫的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python写个听小说的爬虫文章都会有所收获,下面我们一起来看看吧。书名和章节列表随机点开一本书,这个页面...
    99+
    2023-06-29
  • Python爬虫教程使用Scrapy框架爬取小说代码示例
    目录Scrapy框架简单介绍创建Scrapy项目创建Spider爬虫Spider爬虫提取数据items.py代码定义字段fiction.py代码提取数据pipelines.py代码保...
    99+
    2024-04-02
  • python如何使用XPath解析数据爬取起点小说网数据
    小编给大家分享一下python如何使用XPath解析数据爬取起点小说网数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的数据类型有哪些python的...
    99+
    2023-06-14
  • Python脚本自动下载小说
            本人喜欢在网上看小说,一直使用的是小说下载阅读器,可以自动从网上下载想看的小说到本地,比较方便。最近在学习Python的爬虫,受此启发,突然就想到写一个爬取小说内容的脚本玩玩。于是,通过在逐浪上面分析源代码,找出结构特点之后...
    99+
    2023-01-31
    脚本 小说 Python
  • 使用PyCharm批量爬取小说的完整代码
    目录使用pycharm批量爬取小说 1.获取小说地址2.分析小说地址结构3.拼接地址4.分析章节内容结构5.保存文本6.完整代码使用pycharm批量爬取小说 爬取小说的思...
    99+
    2024-04-02
  • python爬取晋江文学城小说评论(情绪分析)
    1. 收集数据 1.1 爬取晋江文学城收藏排行榜前50页的小说信息 获取收藏榜前50页的小说列表,第一页网址为 ‘http://www.jjwxc.net/bookbase.php&...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作