python爬取笔趣阁小说的代码微小调整修改

2023-05-16

原文来自:  https://blog.csdn.net/u012717715/article/details/92811743

本人说明:其实严格地这不是转载,实际上更应该算是原创!原文代码不能正常运行(我推测准确说应该是:原系统是在MAC中开发的,但在win中有若干问题),所以才有本文,但是实际上就算在windows中还是有问题没有完全解决:就是如果保存数据的文件夹和文件已经存在则会有错误发生,所以大家使用时如果碰到请手工删除他们。本来是想发在原文的评论中,但是评论篇幅有限,只能发40行代码!没办法才单独发的

程序的原理那些请看原文

环境:win10 20h2 19042.804,64位简体中文版,python-3.9.2,VScode x64 1.53.2

一、要pip install lxml和pip install requests

二、完整代码修改后如下

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests, sys, threading , os , shutil
 
"""
类说明:下载《笔趣看》网小说《一念永恒》
Parameters:
    无
Returns:
    无
Modify:
    2017-09-13
"""
class downloader(object):
 
    def __init__(self):
        self.server = 'http://www.biqukan.com/'
        self.target = 'http://www.biqukan.com/1_1094/'
        self.names = []            #存放章节名
        self.urls = []            #存放章节链接
        self.nums = 0            #章节数
 
    """
    函数说明:获取章节列表以及对应的下载链接列表
    Parameters:
        无
    Returns:
        无
    Modify:
        2017-09-13
    """
    def get_download_url(self):
        req = requests.get(url = self.target)
        html = req.text
        div_bf = BeautifulSoup(req.content,'lxml')
        div = div_bf.find_all('div', class_ = 'listmain')
        a_bf = BeautifulSoup(str(div[0]),'lxml')
        a = a_bf.find_all('a')
        self.nums = len(a[13:])  #剔除不必要的章节,并统计章节数
        for each in a[13:]:
            self.names.append(each.string)
            self.urls.append(self.server + each.get('href'))
 
    """
    函数说明:获取对应章节的内容
    Parameters:
        target - 下载连接(string)
    Returns:
        texts - 章节内容(string)
    Modify:
        2017-09-13
    """
    def get_contents(self, target):
        req = requests.get(url = target)
        html = req.text
        bf = BeautifulSoup(req.content, 'lxml')
        texts = bf.find_all('div', class_ = 'showtxt')
        texts = texts[0].text.replace('\xa0'*8,'\n\n')
        return texts
 
    """
    函数说明:将爬取的文章内容写入文件
    Parameters:
        name - 章节名称(string)
        path - 当前路径下,小说保存名称(string)
        text - 章节内容(string)
    Returns:
        无
    Modify:
        2017-09-13
    """
    def writer(self, name, path, text):
        write_flag = True
        with open(path, 'a', encoding='utf-8') as f:
            '''
            f.write(name + '\n')
            f.writelines(text)
            '''
            tmpstr=name+ '\n'+text
            f.write(tmpstr)
            f.write('\n\n')
 
class myThread (threading.Thread):   #继承父类threading.Thread
    def __init__(self, name,temdl,startNum,endNum):
        threading.Thread.__init__(self)
        self.runlist = list()
        self.name = name
        self.temdl = temdl
        self.startNum = startNum
        self.endNum = endNum
    def run(self):                   #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 
        print ("Starting " + self.name)
        startDownloadTxt(self.temdl,self.startNum,self.endNum)
        print ("Exiting " + self.name)
 
def mkdir(path):
    '''
    判断路径是否存在
    存在     True
    不存在   False
    ''' 
    isExists=os.path.exists(path)
    if not isExists:
        os.makedirs(path) 
        return True
    else:
        return False
    
def subFile(path):
    #特定目录下的文件列表
    docList = os.listdir(path)
    # 显示当前文件夹下所有文件并进行排序
    '''
    key = lambda x:int(x[:-4])
    忽略文件名开始到倒数第四个字符为止
    docList.remove(i)
    删除数组中点开头的系统隐藏文件,因为会影响排序
    '''
    for i in docList:
        if(i[0]=='.'):
            docList.remove(i)
            break
    docList.sort(key = lambda x: int(x[:-4]))
        
    #创建一个以书籍名字命名的文件
    fnamepath = path+'/一念永恒.txt'
    fname = open(fnamepath, "w", encoding='utf-8')
    #打开你之前命名的下载文件
    for i in docList:
        tempath = path+'/'+i
        x = open (tempath,  "r", encoding='utf-8')    #打开列表中的文件,读取文件内容
        fname.write(x.read())  #写入新建的文件中
        x.close()    #关闭列表文件
    fname.close()
    
    #移动最后的完成文件到桌面,在删除download文件夹(windows环境下根据情况自己修改路径)
    shutil.move(fnamepath, 'c:/Users/lps/Desktop')
    shutil.rmtree(path)
    
 
'''
temdl:downloader类
startNum,endNum开始和结束的rang
'''
def startDownloadTxt(temdl,startNum,endNum):
    mkdir('download')
    for i in range(startNum,endNum):
        temPath = './download/'+str(i)+'.txt'
        tem=temdl.get_contents(temdl.urls[i])
        temdl.writer(temdl.names[i], temPath, temdl.get_contents(temdl.urls[i]))
    print(temdl.names[i]+'done')
 
if __name__ == "__main__":
    dl = downloader()
    #获取章节列表以及对应的下载链接列表
    dl.get_download_url()
    print('《一年永恒》开始下载:')
    # 创建二十个线程(太多的话,会卡)
    threads = []
    threadNum = 40
    for p in range(threadNum):
        threadname = '"Thread'+str(p)
        stepNum = dl.nums//threadNum
        if(p==threadNum-1):
            thread = myThread(threadname,dl,p*stepNum,dl.nums)
        else:
            thread = myThread(threadname,dl,p*stepNum,(p+1)*stepNum)
        threads.append(thread)
    
    try:
        # 开启线程
        for t in threads:
            t.start()
        for t in threads:
            t.join()
            
    except:
        print ("Error: unable to start thread")
 
subFile('./download')
print('一念永恒下载完成')

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取笔趣阁小说的代码微小调整修改 的相关文章

  • centos中安装Python2.7

    转载于 xff1a 秋水逸冰 CentOS 6 8安装Python2 7 13 查看当前系统中的 Python 版本 python version 返回 Python 2 6 6 为正常 检查 CentOS 版本 cat etc redha
  • 安装tar.gz文件(无configure文件)

    如何安装tar gz文件 xff08 以webstorm为例 xff09 1 获取root权限并输入密码 xff1a su root 2 进入有该文件的目录下 xff08 以我的为例 xff0c 具体看你的文件在哪里 xff09 cd 下载
  • 游戏服务端框架之业务线程模型

    请求消息绑定线程策略的选择 在上一篇文章中 我们看到 消息是直接在网络框架的io线程中处理的 这样做有一个非常严重的缺陷 如果业务处理比较耗时 那么io线程接受消息的速度就会下降 严重影响io的吞吐量 典型的 我们应该另起线程池 专门用于异
  • 在WSL中使用GPU:WSL2 + Ubuntu 18.04 + CUDA + Gnome图形界面环境配置

    目录 引言1 确认Windows 10版本2 在Windows上安装WSL23 在Windows上安装CUDA on WSL驱动4 在WSL2中安装CUDA Toolkit3 测试CUDA是否能在WSL2中运作4 安装Gnome图形界面其他
  • Centos 开启路由转发实现全网互通

    只需在RouterSrv网关服务器上开启路由转发功能即可 root 64 RouterSrv vi etc sysctl conf net ipv4 ip forward 61 1 添加此行即可 root 64 localhost sysc
  • 虚拟机中配置外网环境

    文章目录 在虚拟机中配置外网环境 在虚拟机中配置外网环境 主机为 win10 xff0c 虚拟机中为 ubuntu 系统 xff0c 采用clash 1 xff0c 设置 Allow Lan xff0c 允许局域网访问 2 xff0c 虚拟
  • mysql 操作数据库(备份与恢复)

    一 直接把创建数据库的语句放到sql 文件中 xff1a php 写法 xff1a lt php mysql port 61 get mysql port cmd 61 US MYSQL BIN 34 mysql exe port 61 3
  • Go调用Python by go-python3

    确保python版本为3 7 conda create go python span class token assign left variable python span span class token operator 61 spa
  • linux下搭建maven私服

    maven私服我相信很多公司都有 xff0c 私服的好处有以下几点 xff1a 1 节省下载资源开销 jar包 xff08 不一定是jar xff0c 也可以是其他资源 xff09 都存在私服 xff0c 可以不必每次下载都去远程仓库去下载
  • git 安装包 最新 下载 快速 国内 镜像 地址

    下载git时 xff0c 先进官网看 https git scm com download win 然后发现几kb的网速 xff0c 这是要让我下一年么 xff0c 找了找网上有没有其他的镜像 xff0c 发现阿里有一个镜像 xff0c 下
  • docker笔记(四、docker部署beego打包后的二进制文件)

    在beego工程里 xff0c 使用go build可以将该工程打包成一个二进制文件 xff0c 那么这个二进制文件在docker里面该怎么部署呢 xff1f 先写一个简单的图片上传的demo xff0c 名字叫docker test 在工
  • LINUX服务器最简洁的HTTPS免费证书配置方法

    注意 xff1a 该方法已在多台服务器配置了免费的https证书 xff0c 无论是更新还是第一次配置都运行成功 xff1b 由于是免费版 xff0c 每个证书都只有三个月的有效期 xff0c 也无法保证安全和稳定性 xff0c 所以只建议
  • 【性能测试】获取性能系统指标之示例Python代码

    usr bin env python coding utf 8 import sys import datetime import time import psutil from ctypes import 34 34 34 性能测试示例P
  • select I/O 多路复用实现服务器聊天室功能

    基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取 xff0c 它就通知该进程 IO多路复用适用如下场合 xff1a xff08 1 xff09 当客户处理多个描述字时 xff08 一般是交互式输入和网络套接口 x
  • iOS-使用Masnory实现UITableViewCell自适应高度

    在iOS开发当中 xff0c 如果涉及到UITableViewCell的一些复杂UI的绘制时难免会碰到这么一个难题 xff1a UITableViewCell的高度如何设置 xff01 的确 xff0c 我们就拿一个简单的例子来说 xff1
  • ubuntu中共享文件夹看不到

    博主的ubuntu安装VMwaretools后共享文件夹设置完发现在 mnt hgfs总看不到 经过多次摸索后终于可以了 首先要使用root用户登陆ubuntu 然后再安装VMwaretools 在设置共享文件夹 然后解决挂在的问题 1 设
  • keystore was tampered with,or password was incorrect解决办法

    利用keytool导入证书 xff0c 命令如下 keytool import alias HZZSQKJdianshang file HZZSQKJdianshang cer keystore trust jks storepass st
  • Convert Picture or Video to ascii

    一个利用ascii拼成的谷歌街景地图 xff01 http tllabs io asciistreetview 看上去效果真不错 xff01 除此之外 xff0c linux下面也有类似的ascii艺术 xff0c 比如 aview asc
  • texlive2015-6安装

    http www cnblogs com snake553 p 4831588 html CentOS6 5 下安装 texlive2015 并设置 ctex 中文套装 0 卸载旧版本的 texlive 0 1 卸载 texlive2007
  • ubuntu20.04 安装显卡驱动后开机卡住,无法进入登陆界面问题解决

    ubuntu20 04 安装显卡驱动后开机卡住 xff0c 无法进入登陆界面问题解决 进入recovery mode 禁用nvidia drm systemctl isolate multi user target modprobe r n

随机推荐

  • Linux环境变量失效,命令不可用

    背景 linux在修改完环境变量 etc profile后保存文件后 xff0c 发现大多数命令不可用 xff0c 只有少数如 xff1a cd pwd可以使用 xff1b 原因分析 1 etc profile文件中有无效字符或变量 xff
  • Ubuntu20.04安装MySQL5.7-实测3种方法(保姆级教程)

    最近生产系统系统需要使用MySQL5 7版本的数据库 xff0c 而Ubuntu20 04默认是8 0的版本 xff0c 折腾了一段时间后 xff0c 测试了3中方法 xff0c 在实际应用环境中测试成功 xff0c 因此发布出来给大家参考
  • 数据仓库的源数据类型

    数据仓库中集成了企业几乎所有的可以获取到的数据以用于数据分析和决策支持 xff0c 当然也包括了我在网站分析的数据来源一文中所提到的所有数据 这些进入到数据仓库中的数据无外乎三种类型 xff1a 结构化数据 半结构化数据 和非结构化数据 x
  • soj 1075 拓扑排序队列实现

    就是soj 拓扑排序的模板题吧 然后我中午把用队列实现的拓扑排序的方法看了下 晚上就打算来练一下这种纯模板 对于这实现的方法 xff0c 我的理解就是存下每个节点的入度以及它指向的其他节点 xff0c 由于指向多少个这个不太能确定所以用一个
  • poker

    include lt stdbool h gt include lt stdio h gt include lt stdlib h gt define NUM RANKS 13 define NUM SUTTS 4 define NUM C
  • vue实现筛选动态配置

    lt el form class 61 34 cellStyleForm 34 model 61 34 queryParams 34 ref 61 34 queryForm 34 v show 61 34 showSearch 34 inl
  • C. Good String Codeforces Round #560 (Div. 3)

    C Good String time limit per test 1 second memory limit per test 256 megabytes input standard input output standard outp
  • v4l2接口解析和摄像头数据采集

    V4L2接口解析 操作步骤 应用程序通过V4L2接口采集视频数据步骤 打开视频设备文件 xff0c 通过视频采集的参数初始化 xff0c 通过V4L2接口设置视频图像属性 申请若干视频采集的帧缓存区 xff0c 并将这些帧缓冲区从内核空间映
  • 阿里云cdn缓存命中查看

    我们在使用阿里云想知道CDN缓存命中 命中Hit X Cache HIT TCP MEM HIT dirn 9 435942540 上面的情况是命中的情况 不命中的情况miss X Cache MISS TCP MISS dirn 2 2
  • ffmpeg解码RTSP/TCP视频流H.264(QT界面显示视频画面)

    源码下载地址 http download csdn net detail liukang325 9489952 我用的ffmpeg版本为 ffmpeg 2 1 8 tar bz2 版本低了恐怕有些头文件和API找不到 在Linux下解压后编
  • vue的script代码

  • C++扑克牌类的设计

    C 43 43 扑克牌 1 设计扑克类Card xff1a 主要属性有花色和点数 xff1b 主要方法有初始化 输出 比较大小等 2 设计一副扑克牌类Cards xff1a 主要属性包括扑克对象数组 xff1b 主要方法有初始化 洗牌 输出
  • 用Linux系统做路由器

    一 网络结构如下 Internet nbsp nbsp nbsp nbsp nbsp 路由器A Lan 192 168 1 1 nbsp nbsp nbsp nbsp Linux路由器 eth0接路由器A IP 192 168 1 2 网关
  • rust 学习笔记

    按照菜鸟教程 xff1a Rust 教程 菜鸟教程 安装成功了 xff0c 可以跑通第一个程序 中间有一些插曲 xff0c 比如报了 error linker 96 link exe 96 not found 这个错误 输入 xff1a r
  • Rust:axum学习笔记(4) 上传文件

    Rust axum学习笔记 4 上传文件 上传文件是 web开发中的常用功能 xff0c 本文将演示axum如何实现图片上传 xff08 注 xff1a 其它类型的文件原理相同 xff09 xff0c 一般来说要考虑以下几个因素 xff1a
  • vue el-select数据量太大,导致浏览器崩溃解决办法

    下拉数据量太大 xff0c 浏览器单线程渲染时间较长 xff0c 会导致浏览器崩溃 为了解决这一问题 xff0c 可以采用懒加载形式 xff0c 完美解决 lt el col span 61 34 24 34 gt lt el form i
  • Rust:axum学习笔记(2) response

    Rust axum学习笔记 2 response 上一篇的hello world里 xff0c 示例过于简单 xff0c 仅仅只是返回了一个字符串 xff0c 实际上axum的response能返回各种格式 xff0c 包括 plain t
  • Win2008 R2打2019年9月份的月度补丁KB4516065打不上解决办法

    先下载安装KB4490628补丁 xff0c 再安装KB4516065 KB4490628补丁下载地址 xff1a http www catalog update microsoft com Search aspx q 61 kb44906
  • MinGW-w64 vscode C C++快速配置

    一 MinGW w64 1 下载mingw w64 install exe https sourceforge net projects mingw w64 files mingw w64 这里可以下载此在线安装程序 运行它 建议 xff1
  • python爬取笔趣阁小说的代码微小调整修改

    原文来自 xff1a https blog csdn net u012717715 article details 92811743 本人说明 xff1a 其实严格地这不是转载 xff0c 实际上更应该算是原创 xff01 原文代码不能正常