python解析小说

前言

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

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

首先,我们需要面对的第一个问题就是网站的动态加载。许多小说网站为了提高用户体验,会使用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()

效果

 好东西,偷偷用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis企业级解决方案

缓存预热 “ 宕机 ” 服务器启动后迅速宕机 问题排查 1. 请求数量较高 2. 主从之间数据吞吐量较大,数据同步操作频度较高 , 因为刚刚启动时,缓存中没有任何数据 解决方案 准备工作: 1. 日常例行统计数据访问记录,统计访…

STM32 F103C8T6学习笔记12:红外遥控—红外解码-位带操作

今日学习一下红外遥控的解码使用,红外遥控在日常生活必不可少,它的解码与使用也是学习单片机的一个小过程,我们将通过实践来实现它。 文章提供源码、测试工程下载、测试效果图。 目录 红外遥控原理: 红外遥控特点: …

FPGA_学习_17_IP核_ROM(无延迟-立即输出)

由于项目中关于厂商提供的温度-偏压曲线数据已经被同事放在ROM表了,我这边可用直接调用。 今天在仿真的时候,发现他的ROM表用的IP核是及时输出的,就是你地址给进去,对应地址的ROM数据就立马输出,没有延迟。 我打开他的…

c++代码代码逻辑走查

自助生物采集代码 C部分流程

上传镜像到阿里云的ACR

1、开通阿里云ACR 2、在ACR 中创建命名空间 3、本地安装docker 4、登录到 开通ACR,需要配置访问凭证 [rootmaster ~]# docker login --username***lb registry.cn-beijing.aliyuncs.com Password: 5、给镜像打标签 [rootmaster ~]# docker images REPOSITORY …

IDEA项目实践——Element UI概述

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring当中的切面AOP IDEA项目实践——Spring框架简介,以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 IDEWA项目实践——mybatis的一些基本原理以及案例 文章目录 …

商城-学习整理-高级-商城业务-Sentinel限流熔断降级Sleuth+Zipkin链路追踪(二十二)

目录 一、秒杀系统的架构二、SpringCloud Alibaba-Sentinel简介1、熔断降级限流什么是熔断什么是降级异同:什么是限流 2、Sentinel 简介官方文档:Sentinel 具有以下特征:Sentinel 分为两个部分: 3、Hystrix 与 Sentinel 比较4、整合 FeignSentinel 测试熔…

UE4 地形编辑基础知识 学习笔记

之前自己写过这样的功能,今天看到一个UE现成的 点击地形,选择样条 按住CTRL键点击屏幕中某一个点会在场景内生成一个这样的图标 再点两次,会生成B样条的绿线条 点击号再选择一个模型,会生成对应的链条状的mesh 拉高最远处的一个图…

【从零学习python 】75. TCP协议:可靠的面向连接的传输层通信协议

文章目录 TCP协议TCP通信的三个步骤TCP特点TCP与UDP的区别TCP通信模型进阶案例 TCP协议 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议…

收集的一些比较好的git网址

1、民间故事 https://github.com/folkstory/lingqiu/blob/master 2、童话故事 https://gutenberg.org/cache/epub/11027/pg11027-images.html 搜索:fairy story 3、一千零一夜 https://gutenberg.org/cache/epub/2591/pg2591-images.html 4、ai绘画关键词 https:…

电力巡检三维数字化管理的新方案:图新地球电力版

电力工业是国民经济发展的重要基础能源产业,是世界各国经济发展战略中的优先发展重点。当前中国电力行业运行平稳,电力消费持续增长,电力装机结构延续绿色低碳发展态势,同时投资规模日益扩大。随着全民用电量持续快速增长&#xf…

django+MySQL购物商城系统(含源码+论文)

对购物商城管理的流程进行科学整理、归纳和功能的精简,通过软件工程的研究方法,结合当下流行的互联网技术,最终设计并实现了一个简单、易操作的购物商城系统。内容包括系统的设计思路、系统模块和实现方法。系统使用过程主要涉及到管理员和用…

【3Ds Max】可编辑多边形“点”层级的简单使用

目录 简介 示例 (1)移除 (2)断开 (3)焊接 (4)挤出 (5)切角 (6)目标焊接 (7)连接 简介 在3ds Max中&…

气传导耳机哪个好?推荐几款性能表现不错的气传导耳机

​蓝牙耳机大家都很熟悉,如果更了解一些的朋友,一定也知道气传导耳机。气传导耳机最大的好处在于不入耳佩戴更舒适,户外使用时还能听到周围环境音,不会屏蔽汽车鸣笛声,使用更加安全。但也还有很多小伙伴不知道气传导耳…

香蕉派社区推出带10G SFP+ 端口的Banana Pi BPI-R4 Wifi7开源路由器

香蕉派BPI-R4 根据著名Banana Pi品牌背后的公司Sinovoip提供的初步信息,他们即将推出的Banana Pi BPI-R4路由器板目前正在开发中。与之前的 Banana Pi R3 板相比,这在规格上将有显着提升。这就是我们目前所知道的。 您可以选择 R4 板的两种不同配置。具…

Python爬虫——scrapy_多条管道下载

定义管道类(在pipelines.py里定义) import urllib.requestclass DangDangDownloadPipelines:def process_item(self, item, spider):url http: item.get(src)filename ../books_img/ item.get(name) .jpgurllib.request.urlretrieve(url, filename…

有些网络通信协议? - 易智编译EaseEditing

网络通信协议是计算机网络中用于实现数据传输和通信的规则和标准。以下是一些常见的网络通信协议: TCP/IP协议: 是互联网的核心协议,包括传输控制协议(TCP)和网际协议(IP)。TCP负责数据的可靠传…

JMETER基本原理

Jmeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果; JMETER是运行在JVM虚拟机上的,每个进程的开销比loadrunner的进程开销大&#x…

java八股文面试[数据结构]——集合框架

Java集合体系框架 Java集合类主要由两个根接口Collection和Map派生出来的。 Collection派生出了三个子接口: Map接口派生: Map代表的是存储key-value对的集合,可根据元素的key来访问value。 因此Java集合大致也可分成List、Set、Queue、Map…

Java面向对象三大特性之多态及综合练习

1.1 多态的形式 多态是继封装、继承之后,面向对象的第三大特性。 多态是出现在继承或者实现关系中的。 多态体现的格式: 父类类型 变量名 new 子类/实现类构造器; 变量名.方法名(); 多态的前提:有继承关系,子类对象是可以赋…