python解析小说

news2024/12/24 13:10:48

前言

在信息爆炸的时代,网络上充斥着大量的小说资源,让人们能够随时随地尽享阅读的乐趣。然而,有些小说网站要求用户付费才能获取完整的内容,这给许多人带来了困扰,尤其是像我这类对金钱概念模糊的人。不过,我们也许可以尝试使用爬虫技术来获取我们想要的小说内容。

然而,实际操作中,我们可能会遇到各种各样的困难,使得爬取小说的任务变得异常艰难,让人望而却步。下面是我在准备过程中考虑到的一些问题。

首先,我们需要面对的第一个问题就是网站的动态加载。许多小说网站为了提高用户体验,会使用JavaScript来动态加载和展示内容。这使得我们传统的爬虫方法无法有效地抓取我们需要的数据。为了解决这个问题,

其次,我们需要面临的问题是网站的防爬机制。一些小说网站为了防止机器人访问,会设置防爬机制,比如检测请求的频率、检查User-Agent等。我通过调整爬虫的请求频率、伪装User-Agent以及随机化请求头等方式来规避这些防爬机制。

最后,我们需要处理的问题是内容的版权问题。在进行爬取的过程中,我们必须尊重网站的版权规定,避免侵犯他人的知识产权。

第一步.选择合适的爬取工具

我最初的尝试是使用Python中的BeautifulSoup模块。这是一个非常强大的HTML解析库,能够方便地从网页中提取出需要的信息。然而,在爬取小说网站时,我很快发现了问题。这些小说网站通常会使用JavaScript动态加载内容,而BeautifulSoup并不能很好地处理这种情况。因此,我需要寻找一种能够处理JavaScript动态加载内容的爬虫工具。

第二步.尝试使用Selenium库

为了应对动态加载的问题,我转而使用了Selenium库。Selenium可以模拟浏览器的行为,包括执行JavaScript代码,从而能够获取到完整的页面内容。我发现,通过Selenium,我可以获取到想要的小说内容,但是又遇到了新的问题。

第三步:Webdriver变量路径安装问题

在使用Selenium时,我需要指定一个Webdriver,它相当于一个浏览器的实例,用于加载网页并执行操作。然而,我在安装过程中遇到了Webdriver变量路径的问题。我尝试了多种方法,但始终无法成功地将Webdriver正确地配置到我的环境中。

在我尝试解决Webdriver变量路径问题时,我遇到了一些挫折。我尝试按照Selenium官方文档的指导,将Webdriver的路径设置到浏览器的安装目录下,但仍然无法成功。

后来,我意识到问题可能出在环境变量上。我需要在系统环境变量中添加Webdriver的路径,才能让Selenium正确地找到并使用它。于是,我按照这个思路进行了操作,并成功地将Webdriver正确地配置到了我的环境中。

具体来说,我按照以下步骤操作:

法①

  1. 找到Webdriver的路径。

    在Windows系统中,Webdriver通常位于浏览器的安装目录下,例如:C:\Program Files (x86)\Mozilla Firefox\geckodriver.exe
  2. 在系统环境变量中添加Webdriver的路径。

    在Windows系统中,可以在系统属性->高级->环境变量中添加新的系统环境变量,将Webdriver的路径添加到其中
  3. 重新启动Selenium并测试是否成功。

 法②

1. 下载合适版本的Webdriver,并将其解压到一个目录中。(我是解压到python安装目录下,记住复制一份并改名,添加变量才能成功)
2. 将Webdriver的路径添加到系统的环境变量中。这样,无论在哪个目录下,系统都能够找到Webdriver的位置。

通过以上步骤,我终于成功地将Webdriver正确地配置到了我的环境中,可以正常地使用Selenium进行网页内容的爬取了。

最终代码

注意事项:

1.一次只能下一本,如果要下一本你需要把txt文本提到一个文件夹中,清空。

2.一定要安装相应的库

import os
import re
from selenium import webdriver
from bs4 import BeautifulSoup
import time
from tqdm import tqdm
 
# 作者信息
from termcolor import colored
 
author_name = "作者:O2Ethereal"
author_url = "https://gitee.com/o2ethereal"
 
print(f"{author_name}\n{author_url}")
print("网站举例:\nhttps://www.biqukan8.cc/38_38836/")
 
# 用户输入小说目录下载地址
directory_url = input("请输入小说目录下载地址(回车键继续):")
 
# 创建 Edge WebDriver,使用无痕模式
options = webdriver.EdgeOptions()
options.add_argument('--inprivate')
driver = webdriver.Edge(options=options)
 
# 打开小说目录页面
driver.get(directory_url)
time.sleep(5)  # 等待页面加载
 
# 获取页面源码
directory_html = driver.page_source
soup = BeautifulSoup(directory_html, 'html.parser')
 
# 获取章节链接和标题
chapter_data = []
in_content_div = False
for element in soup.find_all(['dt', 'dd']):
   if "正文卷" in element.get_text():
       in_content_div = True
   elif in_content_div and element.name == 'dd':
       link = element.a.get('href')
       if link.startswith("/"):
           link = link[1:]  # 去除开头的斜杠
       chapter_url = f"https://www.biqukan8.cc/{link}"
       title = element.a.get_text()
       chapter_data.append((title, chapter_url))
 
# 创建文件夹
output_folder = "novel_chapters"
os.makedirs(output_folder, exist_ok=True)
 
# 正则表达式模式
pattern = re.compile(r'(我们会尽快处理\.举报后请耐心等待,并刷新页面。|\(\)章节错误,点此举报\(免注册\)我们会尽快处理\.举报后请耐心等待,并刷新页面。|笔趣阁手机版阅读网址:m\.biqukan8\.cc|请记住本书首发域名:www.biqukan8.cc。)')
 
# 保存每个章节的内容到文件
for idx, (title, link) in enumerate(
       tqdm(chapter_data, desc="Downloading", ncols=100, bar_format="{l_bar}%s{bar:10}{r_bar} {percentage:3.0f}%",
            colour="cyan"), start=1):
   # 打开章节页面
   driver.get(link)
   time.sleep(0.5)  # 等待页面加载
   chapter_soup = BeautifulSoup(driver.page_source, 'html.parser')
 
   # 获取章节内容
   content_div = chapter_soup.find('div', class_='showtxt')
   if content_div:
       chapter_content = content_div.get_text()
 
       # 去除章节链接
       chapter_content = chapter_content.replace(link, "")
 
       # 使用正则表达式清理文本
       chapter_content = re.sub(pattern, '', chapter_content)
 
       # 去除空行
       lines = [line.strip() for line in chapter_content.split('\n') if line.strip()]
       cleaned_content = '\n'.join(lines)
 
       # 保存到文件
       file_name = os.path.join(output_folder, f"{title}.txt")
       with open(file_name, "w", encoding="utf-8") as file:
           file.write(cleaned_content)
 
       print(f"Downloading:   {idx / len(chapter_data) * 100:.0f}%|▏ {title}  已下载")
 
# 关闭 WebDriver
driver.quit()

效果

 好东西,偷偷用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/909944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 12 源码分析 —— 应用层 二(SystemUI大体组织和启动过程)

Android 12 源码分析 —— 应用层 二(SystemUI大体组织和启动过程) 在前一篇文章中,我们介绍了SystemUI怎么使用IDE进行编辑和调试。这是分析SystemUI的最基础,希望读者能尽量掌握。 本篇文章,将会介绍SystemUI的大概…

工业类LMQ61460AASRJRR,汽车类LMQ61460AFSQRJRRQ1、LMQ61460AASQRJRRQ1 6A、降压转换器简化原理图

一、LMQ61460AASRJRR器件概述: LMQ61460 是一款具有集成旁路电容器的高性能直流/直流同步降压转换器。该器件具有集成式高侧和低侧MOSFET,能够在 3.0V 至 36V 的宽输入电压范围内提供高达 6A 的输出电流;可耐受 42V 电压,简化了输…

智影 R100:首款三维Mesh建模的SLAM激光扫描仪

近年来,激光SLAM系统凭借其更加快速且准确获取更丰富信息的优势,迅速风靡测绘领域,让原本耗时耗力的外业测量变得更加高效。手持激光扫描仪作为基于激光SLAM技术衍生的众多产品之一,相较于架站式激光扫描仪更加轻巧便利&#xff0…

AUTOSAR规范与ECU软件开发(实践篇)5.2 ETAS ISOLAR-A工具入门

目录 1、 ISOLAR-A安装方法 2 、ISOLAR-A界面说明 1、 ISOLAR-A安装方法 ISOLAR-A工具安装方法较为便捷, 按照安装提示默认操作即可。双击打开ETAS ISOLAR-A的安装包文件夹, 双击运行Autostart.exe, 会出现如图5.2所示的安装界面, 然后点击Main, 会弹出如图5.3所示界面,…

Stable Diffusion web UI 部署详细教程

前言 本文使用 AutoDL 平台进行 Stable Diffusion web UI 云端部署 AutoDL 官网:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL Stable Diffusion web UI 官网:AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI (github.com) 步…

string(模拟实现与深拷贝)

目录 深拷贝与浅拷贝 浅拷贝: 深拷贝 写时拷贝(了解) 模拟实现 准备 完整代码 深拷贝与浅拷贝 浅拷贝: 也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一…

AMSET计算极化声子频率

前面已有文章介绍过amset这个软件,包括形变势VASPAMSET计算形变势、迁移率散射AMSET计算不同散射机制下载流子迁移率的计算和绘制功能中能带结构VASPAMSET plot 绘制能带图的使用。 同时,通过amset可以处理密度泛函微扰计算(DFPT)…

软件产品鉴定测试需要哪些材料?选择第三方软件检测机构的必要性

在当今数字化时代,软件产品无论是在企业还是个人生活中都扮演着重要的角色。然而,随着软件产品的不断增多和市场竞争的加剧,软件产品进行鉴定测试显得尤为重要。 一、软件鉴定测试需要提供哪些材料? 1、软件产品的版本号和更新说明 2、软…

2023国赛数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其…

docker容器的基础操作

一、安装docker服务,配置镜像加速器 1.安装必要的一些系统工具 2.添加软件源信息 3.更新源并安装 Docker-ce 4.安装校验 [rootnode ~]# docker version 5.docker镜像加速 可以在阿里云的容器镜像服务中查看配置镜像加速器 二、下载系统镜像(Ubuntu、 …

AUTOSAR规范与ECU软件开发(实践篇)5.1 ETAS ISOLAR-A工具简介

前言 如前所述, 开发者可以先在系统级设计工具ISOLAR-A中设计软件组件框架, 包括端口接口、 端口等, 即创建各软件组件arxml描述性文件; 再将这些软件组件描述性文件导入到行为建模工具, 如Matlab/Simulink中完成内部行为建模。 亦可以先在行为建模工具中完成逻辑建模, 再…

【ES6】—数组的扩展

一、类数组/ 伪数组 1. 类/伪数组: 并不是真正意义的数组,有长度的属性,但无法使用Array原型上的方法 let divs document.getElementsByTagName(div) console.log(divs) // HTMLCollection []let divs2 document.getElementsByClassName("xxx&q…

C++ malloc/free/new/delete详解(内存管理)

C malloc/free/new/delete详解(内存管理) malloc/free典型用法内存分配实现过程brk和mmap申请小于128k的内存申请大于128k的内存释放内存brk和mmap的区别 new/delete典型用法 内存分配实现过程new/delete和malloc/free的区别malloc对于给每个进程分配的内…

【matlab利用shp文件制作mask白化文件】

matlab白化文件 mask文件的作用matlab制作mask文件mask结果 mask文件的作用 地理信息绘图中的 “mask” 通常指的是遮罩或掩膜,用于在地图或图像上隐藏、高亮或标记特定区域。 数据可视化: 地理信息绘图 mask 可以用于突出显示特定地理区域,使…

第四讲:Bean的生命周期

Bean的生命周期 一、生命周期演示二、添加Bean后置处理器 简单的描述并测试Bean的生命周期(细节会在后续文章中单独讲解),并加入一些BeanPostPorcessor处理测试。 一、生命周期演示 准备一个普通的SpringBoot项目 import lombok.extern.slf…

CentOS7安装部署Doris

文章目录 CentOS7安装部署Doris一、前言1.简介2.环境 二、正文1.Doris基础1)架构图2)通讯端口 2.部署服务器3.安装基础环境1)安装JDK 112)安装GCC3)设置文件句柄数4)关闭交换分区(swap&#xff…

python 打印一个条形堆积图

背景 今天介绍一个不使用 matplot,通过 DebugInfo模块打印条形堆积图 的方法。 引入模块 pip install DebugInfo打印销售转化数据 下面的代码构建了两个销售团队,团队A 和团队B;两个团队的销售数据构成了公司总的销售成果。以条形堆积图的…

不同屏幕的触控技术

不同显示屏的触控技术原理有所不同。触摸屏的基本原理是,用手指或其他物体触摸安装在显示器前端的触摸屏时,所触摸的位置(以坐标形式)由触摸屏控制器检测,并通过接口(如RS-232串行口)送到CPU,从而确定输入的信息。 目前市场上常…

机器学习之数据清洗

一、介绍 数据清洗是机器学习中的一个重要步骤,它涉及对原始数据进行预处理和修复,以使数据适用于机器学习算法的训练和分析。数据清洗的目标是处理数据中的噪声、缺失值、异常值和不一致性等问题,以提高数据的质量和准确性。 二、方法 处理…

电动汽车智能充电桩及运营管理云解决方案-安科瑞黄安南

摘要:电动汽车采用了电力作为发动能源,但是同样存在很大缺陷,即续航能力方面存在较大不足。因此如何利用现代技术进行电动汽车的智 能充电便十分重要。在电动汽车智能充 电的研究过程中需要用到的技术有有电力电子 变流技术、REIP无线射频技术、智能监控…