结合第三方模块requests,文件IO、正则表达式,通过函数封装爬虫应用采集数据

#引用BeautifulSoup更方便提取html信息;requests模块,发生http请求;os模块,文件写入import requests
from bs4 import BeautifulSoup
import os#当使用requests库发送请求时,如果不设置User - Agent,默认的User - Agent可能会被网站识别为爬虫,从而限制访问。
#可在浏览器中右键选择 设置,在 网络 窗口下找到User-Agent,复制到脚本中来
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}# 获取单章内容并自动获取下一章内容,直到整本小说下载完成
#输入的网址为第一章的网址
def download_chapters(first_chapter_url):chapter_num = 1current_chapter_url = first_chapter_url#设置下载章节数while chapter_num<=10 and current_chapter_url :response = requests.get(current_chapter_url, headers=headers)#获取 HTTP 请求返回的状态码,200表示请求已被服务器成功接受if response.status_code == 200:#创建一个soup对象,将html中的内容传递到此soup = BeautifulSoup(response.text, 'html.parser')#查找title div标签,获取此章节的题目和内容#获取标签内的文本内容chapter_title = soup.find('title').get_text()chapter_content = soup.find('div',class_='Readarea ReadAjax_content',id='chaptercontent').get_text()#打开文件,如果没有就创建,写入内容with open('小说.txt','a',encoding='UTF-8') as f:f.write(chapter_title)f.write("\n")f.write(chapter_content)f.write("\n")f.write("-------------------------------------------------------------------------------------")f.write("\n")print(f"第{chapter_num}章 {chapter_title} 下载成功")f.close()# 查找下一章的链接next_chapter= soup.find('div',class_='Readpage pagedown')if next_chapter:next_chapter_link=next_chapter.find('a',id="pb_next",class_="Readpage_down js_page_down")if next_chapter_link:current_chapter_url = next_chapter_link.get('href')#因为html源代码的的链接不完整,手动补全,如果代码完整则不需要此步骤current_chapter_url="https://www.3bqg.cc"+current_chapter_urlchapter_num += 1else:current_chapter_url = Noneelse:print(f"第{chapter_num}章下载失败,状态码:{response.status_code}")current_chapter_url = Noneif __name__ == "__main__":# 替换为实际的第一章网址first_chapter_url ="https://www.3bqg.cc/book/10814/1.html"download_chapters(first_chapter_url)

成果展示

以上使用beatifulsoup模块

接下来使用正则表达式

import requests
import re
import osheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
}# 获取单章内容并自动获取下一章内容,直到整本小说下载完成
# 输入的网址为第一章的网址
def download_chapters(first_chapter_url):chapter_num = 1current_chapter_url = first_chapter_url#提前打开文件避免重复开关文件出现差错with open('正则小说.txt', 'a', encoding='utf-8') as file:# 设置下载章节数while chapter_num <= 10 and current_chapter_url:response = requests.get(current_chapter_url, headers=headers)# 获取 HTTP 请求返回的状态码,200表示请求已被服务器成功接受if response.status_code == 200:html_txt = response.text#通过正则表达式获取标题 内容 下一张的链接  re.DOTALL表示能够匹配包括换行符\n在内的所有字符patter_title = re.compile(r'<title>(.*?)</title>', re.DOTALL)patter_content = re.compile(r'<div id="chaptercontent" class="Readarea ReadAjax_content">(.*?)</div>',re.DOTALL)pattern_next_url = re.compile( r'<a href="(.*?)" id="pb_next" class="Readpage_down js_page_down">下一章</a>')#使用正则表达式对象的search方法进行匹配patter_title_match = patter_title.search(html_txt)patter_content_match = patter_content.search(html_txt)pattern_next_url_match = pattern_next_url.search(html_txt)if patter_title_match:file.write(patter_title_match.group(1))file.write("\n")if patter_content_match:file.write(patter_content_match.group(1))file.write("---------------------------------------------------------------------------------------------")file.write("\n")file.write("\n")print(f"第{chapter_num}章下载成功")#因为原网页链接不完整,所以要加上部分链接if pattern_next_url_match:current_chapter_url = "https://www.3bqg.cc"+ pattern_next_url_match.group(1)chapter_num += 1else:print(f"第{chapter_num}章下载失败")current_chapter_url=Nonefile.close()if __name__ == "__main__":first_chapter_url = "https://www.3bqg.cc/book/10814/1.html"download_chapters(first_chapter_url)

成果展示

使用正则会将html中其他符号叶下载下来,beautifulsoup则不会

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

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

相关文章

Linux虚拟机网络配置

Linux固定IP 跳转到 cd /etc/sysconfig/network-scripts/ 打开文件并编辑 vim ifcfg-ens33 增加或修改选中内容 重启网卡 systemctl restart network ifconfig -a 查看ip已固定 虚拟机网络编辑器调整 子网IP进行修改&#xff0c;例如本机IP修改为10.212.197.34 此处就修改…

CSS实现实现当文本内容过长时,中间显示省略号...,两端正常展示

HTML 结构解析 文档结构: <ul class"con">: 一个无序列表&#xff0c;包含多个列表项。 每个 <li class"wrap"> 表示一个列表项&#xff0c;内部有两个 <span> 元素&#xff1a; <span class"txt">: 显示文本内容。<…

排序算法:直接插入排序,希尔排序,选择排序,快速排序,堆排序,归并排序

1.直接插入排序 基本思想&#xff1a;把待排序的数按照大小逐个插入到前面已经排序好的有序序列中&#xff0c;直到所有的都插入完为止&#xff0c;得到一个新的有序序列。 如图所示&#xff0c;当插入第i个&#xff08;i>1&#xff09;元素的时候&#xff0c;前面的arr[0]…

Qt:信号槽

一. 信号槽概念 信号槽 是 Qt 框架中一种用于对象间通信的机制 。它通过让一个对象发出信号&#xff0c;另一个对象连接到这个信号的槽上来实现通信。信号槽机制是 Qt 的核心特性之一&#xff0c;提供了一种灵活且类型安全的方式来处理事件和数据传递。 1. 信号的本质 QT中&a…

aws凭证(一)凭证存储

AWS 凭证用于验证身份&#xff0c;并授权对 DynamoDB 等等 AWS 服务的访问。配置了aws凭证后&#xff0c;才可以通过编程方式或从AWS CLI连接访问AWS资源。凭证存储在哪里呢&#xff1f;有以下几个方法&#xff1a; 一、使用文件存储 1、介绍 文件存储适用于长期和多账户配置…

Win11下载和配置VSCode(详细讲解)

配置VSCode需要的工具&#xff1a; 一、MinGW-w64 二、Visual Studio Code 一、MinGW-w64下载 1、下载 MinGW官网地址&#xff1a; Downloads - MinGW-w64 直链下载&#xff1a; 下载 mingw-w64-install.exe &#xff08;MinGW-w64 - 适用于 32 位和 64 位 Windows&#…

Python简介以及解释器安装(保姆级教学)

目录 一、Python介绍 1、简介 2、特点 3、来源 4、发展 二、Python解释器的安装 1、安装包下载 2、下载完成后&#xff0c;点击安装包进入安装流程 一、Python介绍 1、简介 Python 是一门解释型、面向对象以及动态数据类型的高级程序设计语言&#xff0c;语法简洁&…

【论文速读】| RobustKV:通过键值对驱逐防御大语言模型免受越狱攻击

基本信息 原文标题&#xff1a;ROBUSTKV: DEFENDING LARGE LANGUAGE MODELS AGAINST JAILBREAK ATTACKS VIA KV EVICTION 原文作者&#xff1a;Tanqiu Jiang, Zian Wang, Jiacheng Liang, Changjiang Li, Yuhui Wang, Ting Wang 作者单位&#xff1a;Stony Brook University…

美畅物联丨智能分析,安全管控:视频汇聚平台助力智慧工地建设

随着科技的持续发展&#xff0c;建筑行业正朝着智能化的方向迅猛迈进。智慧工地作为建筑行业智能化的关键体现形式&#xff0c;借助各类先进技术来提升工地的管理效率、安全性以及生产效益。在这个过程中&#xff0c;视频汇聚平台发挥着极为重要的作用。以畅联AIoT开放云平台为…

AI赋能:PPT制作的创意革命

在现代信息社会&#xff0c;PPT已成为沟通和展示的利器。然而&#xff0c;如何快速制作出高质量的PPT&#xff0c;却是一门学问。幸运的是&#xff0c;智能生成PPT技术的出现&#xff0c;让这一切变得轻松自如。 ai生成PPT技术&#xff0c;犹如一位无形的助手&#xff0c;帮助用…

实战 | C#中使用YoloV8和OpenCvSharp实现目标检测 (步骤 + 源码)

导 读 本文主要介绍在C#中使用YoloV8实现目标检测,并给详细步骤和代码。 详细步骤 【1】环境和依赖项。 需先安装VS2022最新版,.NetFramework8.0,然后新建项目,nuget安装 YoloSharp,YoloSharp介绍: https://github.com/dme-compunet/YoloSharp 最新版6.0.1,本文…

蓝桥杯每日真题 - 第20天

题目&#xff1a;&#xff08;机房&#xff09; 题目描述&#xff08;13届 C&CG题&#xff09; 解题思路&#xff1a; 这道题目可以看作在一个无向图中查找两点之间的最短路径。题目中的 n 台电脑和 n−1 根网线形成了一棵树&#xff0c;树是一个特殊的无向图&#xff0c…

iOS应用网络安全之HTTPS

移动互联网开发中iOS应用的网络安全问题往往被大部分开发者忽略, iOS9和OS X 10.11开始Apple也默认提高了安全配置和要求. 本文以iOS平台App开发中对后台数据接口的安全通信进行解析和加固方法的分析. 1. HTTPS/SSL的基本原理 安全套接字层 (Secure Socket Layer, SSL) 是用来…

项目虚拟机配置测试环境

在企业中&#xff0c;有专门的服务器部署开发环境&#xff0c;测试环境等等 直接在虚拟机中打开虚拟机就可以 dps查看容器

初始ArkUI

一. 什么是ArkUI ArkUI基于方舟UI框架为应用的UI开发提供了完整的基础设施&#xff0c;UI语法更加简洁&#xff0c;丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实现界面预览工具等&#xff0c;可以支持开发者进行可视化界面开发。 &a…

【PCIE常见面试问题-1】

PCIE常见面试问题-1 1 PCIE概述1.1 PCI为何发展开PCIE&#xff1f;1.2 什么是Root Complex(RC)1.3 什么是EP&#xff1f;1.4 什么是Swith1.5 PCIE协议如何组织通信的&#xff1f;1.6 简要介绍一下PCIE的分层结构&#xff0c;为什么需要分层&#xff1f;1.7 PCIE的事务类型有哪些…

用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错

首先看一下我们的示例代码 import os from pyspark.sql import SparkSession import pyspark.sql.functions as F """ ------------------------------------------Description : TODO&#xff1a;SourceFile : etl_stream_kafkaAuthor : zxxDate : 2024/11/…

什么是反向 DNS 查找以及它的作用是什么?

反向DNS查询&#xff08;rDNS&#xff09;是一种技术&#xff0c;用于确定与某个IP地址对应的域名。当我们对一个IP地址进行反向DNS查询时&#xff0c;实际上是向域名系统&#xff08;DNS&#xff09;的特殊部分请求信息&#xff0c;这部分被称为PTR记录。PTR记录会返回与这个I…

HarmonyOS鸿蒙系统上File文件常用操作

HarmonyOS鸿蒙系统上&#xff0c;file文件常用操作记录 1.创建文件 createFile(fileName: string, content: string): string {// 获取应用文件路径let context getContext(this) as common.UIAbilityContext;let filesDirPath context.filesDir / fileName;// 新建并打开…

音视频pts/dts

现在的视频流有两个非常重要的时间戳&#xff0c;pts和dts&#xff0c;其中pts是显示的时候用&#xff0c;dts在解码的时候用。 pts很好理解&#xff0c;按照pts的顺序以及duration不间断的display就可以了。 dts在解码的时候用&#xff0c;那么这句话怎么理解&#xff0c;解…