【Python脚本】爬取网络小说

news/2024/9/18 12:40:19/ 标签: python, 开发语言

原文链接:https://www.cnblogs.com/aksoam/p/18378309

作为重度小说爱好者, 小说下载网站经常被打击,比如:笔趣阁,奇书网,爱书网,80电子书.这些网站的下载链接经常会失效, 所以, 我想自己动手写一个爬虫程序, 抓取网络小说, 并下载到本地.

给出两种思路的python脚本,脚本并不对所有小说网站通用,具体使用时,需要根据网站的网页结构进行修改.

  • 思路1: 给定小说目录页URL,解析所有章节的url,然后遍历,下载每一章的内容,保存到本地文件.
python"># -*- coding: utf-8 -*-
"""
方法:
给定小说目录页URL,解析所有章节的url,然后遍历,下载每一章的内容,保存到本地文件.
"""# 使用requests库发送HTTP请求,获取网页内容
from icecream import ic
import requests
from bs4 import BeautifulSoup
import time
agent={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'}
Web_URL = 'https://www.bqzw789.org'  # 笔趣网小说网址
url = 'https://www.bqzw789.org/546/546317/'  # 小说页面URL
txtfile='test.txt'  # 保存小说内容的文件名response = requests.get(url,headers=agent)
ic(response.status_code)  # 打印响应状态码with open('test.html', 'wb') as f:  # 保存网页内容到本地文件f.write(response.content)# 解析网页内容
html=response.text
soup = BeautifulSoup(html, 'html.parser')# 查找章节标题和链接的标签
chapters_link= soup.find_all('a', id='list',href=True)  #<dd><a id="list" href="/546/546317/172937678.html">第六章 炼器师</a></dd># 写入到文件
i,k=0,0  # 下载前10章
with open(txtfile, 'w', encoding='utf-8') as f:for chapter in chapters_link:chap_link=Web_URL+chapter['href']resp=requests.get(chap_link,headers=agent)print(f"正在下载章节: {chapter.text},{chap_link}...")        soup2 = BeautifulSoup(resp.text, 'html.parser')chapContent= soup2.find('div', id='content')  #<dd><a id="list" href="/546/546317/172937678.html">第六章 炼器师</a></dd># 写入到文件# 章节标题f.write('\n\n'+chapter.text+'\n\n')# 章节内容f.write(chapContent.text.replace('\xa0\xa0\xa0\xa0','\n\n'))
  • 思路2: 给定小说的第一章的网站,解析网页中’下一章’,'下一页’按钮的链接,下载小说的全部章节内容并保存到txt文件中.
python"># -*- coding: utf-8 -*-
"""
给定小说的第一章的网站,解析网页中'下一章','下一页'按钮的链接,下载小说的全部章节内容并保存到txt文件中.
"""
# %%
from icecream import ic
import requests
from bs4 import BeautifulSoup
import time# 预设参数
# 章节名称 标签,class: <h1 class="title">第4章 剧情的开始</h1>
chapter_name_html={'tag':'h1','class':'title'}
# 章节内容 标签,class: <div id="content">...</div>
chapter_content_html={'tag':'div','id':'content','class':'content'}
# 下一页的按钮的文字<a id="next_url" href="/biqu74473/36803977_2.html"> 下一页</a>
next_Page_html={'tag':'a','id':'next_url','text':'下一页'}
# 下一章的按钮的文字  <a id="next_url" href="/biqu74473/36803977.html">下一章 </a>
next_chapter_html={'tag':'a','id':'next_url','text':'下一章'}  # 脚本参数
# 网址首页
web_url='https://www.22biqu.com'
# 小说第一章的网址
start_url='/biqu74473/36803973.html'
# 请求头
agent={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'}
# 保存文件名
txtfile='t1.txt'
# 是否测试?
is_test=False
StatusCodeOK=200
is_write_title=False
end=1 if is_test else 1e6# 程序执行
fp=open(txtfile,'w',encoding='utf-8')
# 如果处于测试模式,只下载一章内容i=0
while i<end:time.sleep(4)# 测试脚本时,只下载第一章内容p1=requests.get(web_url+start_url,headers=agent)if p1.status_code!=StatusCodeOK:fp.write(f"\n请求失败,状态码:{p1.status_code}\n")continueprint(f"正在下载章节{i+1}...,状态码:{p1.status_code}")# 解析网页内容s1=BeautifulSoup(p1.text,'html.parser')# 章节名称if is_write_title:chap_name=s1.find(chapter_name_html['tag'],class_=chapter_name_html['class']).textprint(f"章节名称:{chap_name}")fp.write(chap_name+'\n\n')chap_content=s1.find(chapter_content_html['tag'],id=chapter_content_html['id'])fp.write(chap_content.text.replace('\r' , '\n\n'))if next_Page_html['text'] in s1.text:# print("存在下一页按钮")next_url=s1.find(next_Page_html['tag'],id=next_Page_html['id'])['href']start_url=next_url# print(f"下一页链接:{web_url+next_url}")elif next_chapter_html['text'] in s1.text:# print("存在下一章按钮")next_url=s1.find(next_chapter_html['tag'],id=next_chapter_html['id'])['href']start_url=next_url# 计数器加1i+=1# print(f"下一章链接:{web_url+next_url}")else:# print("没有下一页或章按钮")breakprint(f"下载完成,文件名:{txtfile},总章节数:{i}")
fp.close()

http://www.ppmy.cn/news/1515994.html

相关文章

ShareSDK 企业微信

本篇文档主要讲解如何使用企业微信并进行分享和授权。 创建应用 登录企业微信并通过企业认证。选择应用管理 > 应用 >创建应用。编辑应用信息。配置授权登录信息。 以下为创建过程示例&#xff0c;图中信息仅为示例&#xff0c;创建时请按照真实信息填写&#xff0c;否…

紧跟大模型技术趋势,为更大更通用的大模型提供底层支撑!关于智能计算系统:从深度学习到大模型,全新版本,发布!

文章目录 &#x1f4cb;前言&#x1f3af; 关于智能计算系统&#x1f3af; 内容简介&#x1f3af; 作者简介&#x1f3af; 专家推荐&#x1f3af; 目录大纲&#x1f525; 参与方式 &#x1f4cb;前言 “只要你想把大模型做得更好、做得更大、做得更快、做得更省电&#xff0c;…

如何正确使用static、class、abstract方法二

如何正确使用static、class、abstract方法 ####How methods work in Python A method is a function that is stored as a class attribute. You can declare and access such a function this way: ####方法在Python中是如何工作的 方法就是一个函数&#xff0c;它作为一个类…

膨胀罐的安装注意事项

1、膨胀罐在热力系统中如空调、锅炉、热泵等一般安装在系统的回水端&#xff1b; 2、膨胀罐在供水系统一般装在水泵的出口。 3、膨胀罐在太阳能承压循环系统中一般安装在水泵的进口附近。 膨胀罐的原理&#xff1a; 当外界有压力的水进入膨胀罐气囊内时&#xff0c;密封在罐内的…

【C#】【EXCEL】Bumblebee/Classes/ExGraphic.cs

Bumblebee/Classes/ExGraphic.cs Flow diagram 根据您提供的代码和要求&#xff0c;我将创建一个流程图来展示ExGraphic类的结构。这个流程图将使用中英双语标注&#xff0c;并对应到代码中的英文。 #mermaid-svg-TRwsnkAxI5mhmCmk {font-family:"trebuchet ms",ve…

数学建模学习(118):牛顿冷却定律的原理解析、案例分析与Python求解

介绍来源:2020全国大学生数学建模竞赛论文展示(A070) ,这里我们详细完整的对该优秀论文的方法进行学习和实践。 文章目录 1. 牛顿冷却定律的定义2. 牛顿冷却定律公式3. 牛顿冷却定律的推导4. 牛顿冷却定律的应用方法5. 牛顿冷却定律的验证6. 牛顿冷却定律的图形7. 案例一7.…

建筑楼宇电气安全与能效管理

随着建筑业的发展&#xff0c;配电系统在楼宇建筑特别是高层建筑中的比重也随之加大。现代的建筑的功能越来越完善&#xff0c;变配电工程、空调工程、机电工程、电梯工程、消防工程等工程设施设备与建筑体相结合&#xff0c;敷设的电气线路变得更为复杂&#xff0c;火灾隐患明…

使用Dotween制作按钮弹性动画效果

效果&#xff1a; 方式&#xff1a; 优点&#xff0c;不需要写任何代码、稳定、可自定义效果

AutoGPT开源项目解读

AutoGPT开源项目解读 (qq.com) AutoGPT旨在创建一个自动化的自我改进系统&#xff0c;能够自主执行和学习各种任务 项目基本信息 首先阅读项目的README.md&#xff0c;下述代理和智能体两个名词可互换 项目简介&#xff1a;一个创建和运行智能体的工具&#xff0c;这些智能体…

C++的模板

文章目录 教学一1. 函数模板定义和使用注意事项 2. 类模板定义和使用注意事项 3. 模板特化全特化偏特化 4. 模板参数非类型参数模板模板参数 5. SFINAE&#xff08;Substitution Failure Is Not An Error&#xff09;示例 6. 模板的高级特性6.1 变长模板参数包&#xff08;Vari…

【解决问题】linux系统运行程序可以打印信息到屏幕,重定向到一个文件,文件中没有信息

在Linux系统中运行程序时&#xff0c;如果你发现程序打印的信息无法通过重定向写入到文件中&#xff0c;那么很可能是因为程序将信息打印到了标准错误流&#xff08;stderr&#xff09;&#xff0c;而不是标准输出流&#xff08;stdout&#xff09;。重定向操作通常只对标准输出…

变声器免费的直接说话的那种!不整虚的,一键变声!好听!

听说网络上一堆推荐软件测评的&#xff0c;一半斗志推销自己家的软件&#xff0c;好不好用其次&#xff0c;关键是名声已经在外&#xff01;今天俺老孙也不整这些虚的&#xff0c;直接上干货&#xff0c;测评2024最新的电脑变声软件&#xff0c;帮助大家了解这六款国内外不同系…

OpenCV几何图像变换(6)计算反转仿射变换函数invertAffineTransform()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 反转一个仿射变换。 该函数计算由 23 矩阵 M 表示的逆仿射变换&#xff1a; [ a 11 a 12 b 1 a 21 a 22 b 2 ] \begin{bmatrix} a_{11} & a…

接口如何设计

在企业中&#xff0c;前后端分离开发是一种常见的开发模式。在这种模式下&#xff0c;Java 程序员通常负责设计和实现后端 API 接口&#xff0c;而前端工程师则根据这些接口来开发用户界面和功能。 首先明确该接口是一个前后端交互接口&#xff0c;该接口由前端通过HTTP协议进…

第2章 C语言基础知识

第2章 C语言基础知识 1.printf()函数 在控制台输出数据&#xff0c;需要使用输出函数&#xff0c;C语言常用的输出函数为printf()。 printf()函数为格式化输出函数&#xff0c;其功能是按照用户指定的格式将数据输出到屏幕上。 printf(“格式控制字符串”,[输出列表]); 格式控…

Ruby Web服务开发:构建高效RESTful API的秘诀

标题&#xff1a;Ruby Web服务开发&#xff1a;构建高效RESTful API的秘诀 Ruby作为一种灵活、高效的编程语言&#xff0c;通过其丰富的库和框架&#xff0c;为开发Web服务提供了强大的支持。本文将深入探讨如何在Ruby中开发Web服务&#xff0c;特别是RESTful API。我们将从基…

[JAVA]什么是泛型?泛型在Java中的应用

目录 1.初识泛型的应用 2.创建自定义泛型类 3.利用较小范围的泛型方法定义 4.了解泛型通配符&#xff0c;什么是泛型通配符&#xff1f; 1.初识泛型的应用 —所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。 —定…

前端宝典十六:深入浅出8大设计模式

本文主要探讨前端开发中的各种设计模式&#xff0c;主要分类有&#xff1a; 单例模式建造者模式代理模式装饰器模式适配器模式策略模式观察者模式发布订阅模式 通过对他们实际开发中的使用场景的解析&#xff0c;深入浅出的一起更全面直观的进行学习&#xff1a; 一、单例模…

基于vue3和audio封装的简易音频播放器

样式如图所示 <template><div class"audio-player"><div class"player_top" flex-ac flex-justify-between ><div class"fileName genericTitle" fs-28 l-height-32 height-64 pr-42 flex-ac><span class"t…

机器人走路的问题

public class Test52 {//假设有N个位置&#xff0c;记为1-N&#xff0c;N大于或等于2//开始机器人在M位置上&#xff08;M为1-N中的一个&#xff09;//如果机器人来到1位置&#xff0c;那么下一步只能向右来到2位置//如果机器人来到N位置&#xff0c;那么下一步只能向左来到N-1…