趣笔阁爬虫实验

趣笔阁爬虫实验

用BeautifulSoup解析网页结构,爬取指定小说的页面,将每个章节的内容保存到txt文件中

可以改进的点:(待更新

1.反爬措施

2.多线程

3.保存为markdown格式更加美观

import os
import re
import requests
from bs4 import BeautifulSoup
import time
def getHtml(url, param=None, encoding=None):# 获取url内的html文本内容try:# 构造访问头header = {'user-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"}# 获取返回html = requests.get(url, headers=header, timeout=10)# 定义编码方式if encoding is None:encoding = html.apparent_encodinghtml.encoding = encoding# 保存html文本content = html.text# 关闭连接html.close()# 间隔1s 防止过快访问time.sleep(1)# 返回网页内容return contentexcept requests.RequestException as e:print(f"请求失败: {e}")return None  # 返回None表示失败def getLink(content):soup = BeautifulSoup(content, "html.parser")res = []# 查找所有章节标题的标签titles = soup.find_all('dd')# 提取每个章节的文本for title in titles:a_tag = title.find('a')if a_tag:name = a_tag.textres.append(name)print(res)return resdef save(name, passage_content, path):# 定义文件路径,文件名使用章节名称file_path = os.path.join(path, f"{name}.txt")# 将连续空格替换为换行符,并将其写入文件with open(file_path, 'w', encoding='utf-8') as file:for content in passage_content:# 替换连续空格为换行符formatted_content = re.sub(r'\s{2,}', '\n', content.text)file.write(formatted_content + "\n")  # 额外加上换行符,使得段落更清晰print(f"章节 {name} 已保存")
def saveImg(title,imgLink,path):# 定义文件路径,文件名使用章节名称file_path = os.path.join(path, f"{title}.jpg")response = requests.get(imgLink)# 将连续空格替换为换行符,并将其写入文件if response.status_code == 200:with open(file_path, 'wb') as file:file.write(response.content)  # 额外加上换行符,使得段落更清晰print(f"图片 {title} 已保存")else:print(f"图片 {title} 保存失败")def getMain(content):soup = BeautifulSoup(content, "html.parser")name = ''titles = soup.find_all('div',attrs={"class":"info"})# 提取每个章节的文本for title in titles:img_tag = title.find('img')img = img_tag['src']# print(img_tag['src'])name = img_tag['alt']# print(img_tag['alt'])return name,imgdef getConcent(root,titles,path):pat = re.compile(r'第(.*?)章')for title in titles:res = pat.search(title)if res:print(res.groups())page = res.group(1)url = root + page + ".html"content = getHtml(url)soup = BeautifulSoup(content, "html.parser")# print(content)passage = []passage_content = soup.find_all("div",attrs={"id":"chaptercontent"})for item in passage_content:passage.append(item.text)print(item.text)print(markdownify.markdownify(item.text))# print(passage_content)save(title, passage_content, path)
if __name__ == "__main__":try:# 目标贴吧url = "https://www.3bqg.cc/book/152484/"# 目标输出csv文件路径path = "./novel/"# 获取目标网页的源码content = getHtml(url)title,img = getMain(content)saveImg(title,img,path+title)titles = getLink(content)getConcent(url,titles,path+title)except Exception as e:print(f"程序运行出错: {e}")

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

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

相关文章

第一个maven web工程(eclipse)

1、点击file--》new--》Maven Project,如下: 2、直接next,如下 3、搜索web原型,如下 4、填写项目的坐标,如下 5、创建完成后,需要自己补一个文件夹,名称为java,如下: …

C++进阶|多态知识点详解及经典面试题总结

🍬 mooridy-CSDN博客 🧁C专栏(更新中!) 目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数的重写/覆盖 2.3 虚函数重写的⼀些其他问题 2.4 override 和 final关键字 2.5 重载/重写/隐藏的…

IDEA全局搜索快捷键ctrl+shift+f失效问题解决

目录 一、搜狗输入法 二、windows输入法 其实就是与输入法快捷键冲突了,一般用的最多的就是windows自带输入法和搜狗输入法,我们只需要把两个输入法的快捷键取消即可解决。 一、搜狗输入法 二、windows输入法 “设置”-“日期和时间”,选择…

Elasticsearch——介绍、安装与初步使用

目录 1.初识 Elasticsearch1.1.了解 ES1.1.1.Elasticsearch 的作用1.1.2.ELK技术栈1.1.3.Elasticsearch 和 Lucene1.1.4.为什么不是其他搜索技术?1.1.5.总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3.Elasticsearch 的一些概念1.3.1.文档和字…

【中级通信工程师】终端与业务(三):电信业务

【零基础3天通关中级通信工程师】 终端与业务(三):电信业务 本文是中级通信工程师考试《终端与业务》科目第三章《电信业务》的复习资料和真题汇总。终端与业务是通信考试里最简单的科目,有效复习通过率可达90%以上,本文结合了高频考点和近几…

SQL 性能调优

什么是 SQL 性能调优 SQL 性能调优是优化 SQL 查询以尽可能高效地运行的过程,从而减少数据库负载并提高整体系统性能。这是通过各种技术实现的,例如分析查询执行计划、优化索引和重写查询以确保最佳执行路径。目标是最大限度地减少执行查询所需的时间和…

Windows安装openssl开发库

1 下载openssl安装包并安装 下载网址: https://slproweb.com/products/Win32OpenSSL.html 下载对应的安装版本。 双击安装包,一路下一步完成安装。注意:1.安装路径不要有空格; 2. 建议不要把DLL拷贝到系统路径。 2 编辑代码 …

什么是Node.js?

为什么JavaScript可以在浏览器中被执行? 在浏览器中我们加载了一些待执行JS代码,这些字符串要当中一个代码去执行,是因为浏览器中有JavaScript的解析引擎,它的存在我们的代码才能被执行。 不同的浏览器使用不同的javaScript解析引…

数据结构之链表(1),单链表

目录 前言 一、什么是链表 二、链表的分类 三、单链表 四、单链表的实现 五、SList.c文件完整代码 六、使用演示 总结 前言 本文讲述了什么是链表,以及实现了完整的单链表。 ❤️感谢支持,点赞关注不迷路❤️ 一、什么是链表 1.概念 概念:链…

19、网络安全合规复盘

数据来源:5.网络安全合规复盘_哔哩哔哩_bilibili

精密制造的革新:光谱共焦传感器与工业视觉相机的融合

在现代精密制造领域,对微小尺寸、高精度产品的检测需求日益迫切。光谱共焦传感器凭借其非接触、高精度测量特性脱颖而出,而工业视觉相机则以其高分辨率、实时成像能力著称。两者的融合,不仅解决了传统检测方式在微米级别测量上的局限&#xf…

【C++】入门基础知识-1

🍬个人主页:Yanni.— 🌈数据结构:Data Structure.​​​​​​ 🎂C语言笔记:C Language Notes 🏀OJ题分享: Topic Sharing 目录 前言: C关键字 命名空间 命名空间介…

使用 Llama-index 实现的 Agentic RAG-Router Query Engine

前言 你是否也厌倦了我在博文中经常提到的老式 RAG(Retrieval Augmented Generation | 检索增强生成) 系统?反正我是对此感到厌倦了。但我们可以做一些有趣的事情,让它更上一层楼。接下来就跟我一起将 agents 概念引入传统的 RAG 工作流,重新…

凌晨1点开播!Meta Connect 2024开发者大会,聚焦Llama新场景和AR眼镜

作者:十九 编辑:李宝珠 北京时间 9 月 26 日凌晨 1 点,Meta Connect 2024 开发者大会即将举行,马克扎克伯格将聚焦 AI 和元宇宙,向大家分享 Llama 模型的更多潜在应用,并介绍 Meta 最新产品 AR 眼镜和 Meta…

OceanBase云数据库战略实施两年,受零售、支付、制造行业青睐

2022年OceanBase推出云数据库产品OB Cloud,正式启动云数据库战略。两年来OB Cloud发展情况如何,9月26日,OceanBase公有云事业部总经理尹博学向记者作了介绍。 尹博学表示,OB Cloud推出两年以来,已服务超过700家客户,客…

智算中心动环监控:构建高效、安全的数字基础设施@卓振思众

在当今快速发展的数字经济时代,智算中心作为人工智能和大数据技术的核心支撑设施,正日益成为各行业实现智能化转型的重要基石。为了确保这些高性能计算环境的安全与稳定,卓振思众动环监控应运而生,成为智算中心管理的重要组成部分…

理解Java引用数据类型(数组、String)传参机制的一个例子

目录 理解Java引用数据类型(数组、String)传参机制的一个例子理解样例代码输出 参考资料 理解Java引用数据类型(数组、String)传参机制的一个例子 理解 引用数据类型传递的是地址。用引用类型A给引用类型B赋值,相当于…

Linux(含麒麟操作系统)如何实现多显示器屏幕采集录制

技术背景 在操作系统领域,很多核心技术掌握在国外企业手中。如果过度依赖国外技术,在国际形势变化、贸易摩擦等情况下,可能面临技术封锁和断供风险。开发国产操作系统可以降低这种风险,确保国家关键信息基础设施的稳定运行。在一…

【C++位图】构建灵活的空间效率工具

目录 位图位图的基本概念如何用位图表示数据位图的基本操作setresettest 封装位图的设计 总结 在计算机科学中,位图(Bitmap)是一种高效的空间管理数据结构,广泛应用于各种场景,如集合操作、图像处理和资源管理。与传统…

一文读懂 Pencils Protocol 近期不可错过的市场活动

Pencils Protocol 是 Scroll 上综合性的 DeFi 协议,自 9 月 18 日开始其陆续在 Tokensoft、Bounce、Coresky 等平台开启 DAPP 通证的销售,并分别在短期内完成售罄。吸引了来自韩国、CIS、土耳其等 70 多个国家的 5 万多名认证用户,反响热烈&a…