非结构化数据与结构化数据(爬虫)-16

embedded/2025/3/26 15:52:42/

文章目录

  • 1. 页面解析和数据提取
  • 2. 非结构化的数据处理
  • 3. 结构化的数据处理
  • 4. 什么是正则表达式
  • 5. 正则表达式匹配规则
    • 5.1 字符
    • 5.2 预定义字符集(可以写在字符集[...]中)
    • 5.3 数量词(用在字符或(...)之后)
    • 5.4 边界匹配(不消耗待匹配字符串中的字符)
    • 5.5 逻辑、分组
    • 5.6 特殊构造(不作为分组)
  • 6. 案例:笔趣阁小说批量下载

1. 页面解析和数据提取

一般来说,抓取某个网站或某个应用的内容,提取有用的价值。内容一般分为2部分,非结构化数据 和 结构化数据。

  • 非结构化数据:先有数据,再有结构
  • 结构化数据:先有结构,再有数据

不同类型的数据,需要采用不通过的方式来处理

2. 非结构化的数据处理

  1. 文本、电话号码、邮箱地址:使用正则表达式
  2. HTML文件:可以使用正则表达式、XPath、CSS选择器

3. 结构化的数据处理

  1. JSON文件:可以使用JSON Path、转化成功Python类型进行操作(json类)
  2. XML文件:转化成功Python类型(xmltodict)、XPath、CSS选择器、正则表达式

4. 什么是正则表达式

概念:

正则表达式,通常用来检索、替换符合某个规则的文本。

正则表达式式对字符串操作的一种逻辑公式,就是用先定义好的一些特定字符,及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

应用:

  • 给定的字符串是否符合正则表达式的过滤逻辑(“主要用来匹配”)
  • 通过正则表达式,从文本字符串中获取我们想要的特定部分(“主要用来过滤”)

5. 正则表达式匹配规则

5.1 字符

语法说明表达式实例完整匹配的字符串
一般字符匹配自身abcabc
.匹配任意除换行符 “\n” 外的字符。在DOTALL模式中也能匹配到换行符a.cabc
\转义字符,使用后一个字符改变原来的意思。如果字符串中有字符 * 需要匹配,可以使用 * 或者字符集 [*]a.c
a\c
a.c
a\c
[…]字符集(字符类)。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。第一个字符如果是则表示取反,如[abc]表示不是abc的其他字符。
所有的特殊字符在字符集中和都失去原有的特殊含义。在字符集中如果使用 ] \ - 或 ^ ,可以在前面加上反斜杠,或把 ] \ - 放在第一个字符,把^放在非第一个字符
a[bcd]eabe
ace
ade

5.2 预定义字符集(可以写在字符集[…]中)

语法说明表达式实例完整匹配的字符串
\d数字:[0-9]a\dca1c
\D非数字:[^\d]a\Dcabc
\s空白字符:[<空格>\t\r\n\f\v]a\sca c
\S非空白字符:[^\s]a\Scabc
\w单词字符:[A-Za-z0-9_]a\wcabc
\W非单词字符:[^\w]a\Wca c

5.3 数量词(用在字符或(…)之后)

语法说明表达式实例完整匹配的字符串
*匹配前一个字符0或无限次abc*ab
abccc
+匹配前一个字符1次或无限次abc+abc
abccc
匹配前一个字符0次或1次abc?ab
abc
{m}匹配前一个字符m次

http://www.ppmy.cn/embedded/176142.html

相关文章

六西格玛遇上Python:统计学的高效实践场

在当今数据驱动的时代&#xff0c;数据分析和可视化工具成为了各行业优化流程、提升质量的关键手段。六西格玛&#xff08;Six Sigma&#xff09;作为一种以数据为基础、追求完美质量的管理理念&#xff0c;其实施依赖于一系列基础工具的灵活运用。而Python&#xff0c;凭借其强…

Vite管理的Vue3项目中monaco editer的使用以及组件封装

文章目录 背景环境说明安装流程以及组件封装引入依赖封装组件 外部使用实现效果 v-model实现原理 背景 做oj系统的时候,需要使用代码编辑器,决定使用Monaco Editor&#xff0c;但是因为自身能力问题&#xff0c;读不懂官网文档&#xff0c;最终结合ai和网友的帖子成功引入&…

Java Stream API 全面指南(完整版)

Java Stream API 全面指南&#xff08;完整版&#xff09; 一、基础概念 1.1 什么是 Stream API&#xff1f; 定义&#xff1a;Java 8 引入的 java.util.stream 包&#xff0c;提供函数式编程风格的流式操作&#xff0c;用于高效处理集合、数组等数据源。核心特性&#xff1a…

解决Qt信号在构造函数中失效的问题

情景引入&#xff1a;音乐播放器的“幽灵列表”问题 假设你正在开发一个音乐播放器应用&#xff0c;其中有一个功能是用户首次打开应用时&#xff0c;需要从服务器拉取最新的歌曲列表并显示在“本地音乐”页面中。你可能会写出类似这样的代码&#xff1a; // LocalSong 类的构…

用 pytorch 从零开始创建大语言模型(六):对分类进行微调

用 pytorch 从零开始创建大语言模型&#xff08;六&#xff09;&#xff1a;对分类进行微调 6 微调用于分类6.1 微调的不同类别6.2 准备数据集6.3 创建数据加载器6.4 使用预训练权重初始化模型6.5 添加分类头部6.6 计算分类损失和准确率6.7 在监督数据上微调模型6.8 使用LLM进…

2025年Postman的五大替代工具

虽然Postman是一个广泛使用的API测试工具&#xff0c;但许多用户在使用过程中会遇到各种限制和不便。因此&#xff0c;可能需要探索替代解决方案。本文介绍了10款强大的替代工具&#xff0c;它们能够有效替代Postman&#xff0c;成为你API测试工具箱的一部分。 什么是Postman&…

基于 PyTorch 的 MNIST 手写数字分类模型

一、概述 本代码使用 PyTorch 框架构建了一个简单的神经网络模型&#xff0c;用于解决 MNIST 手写数字分类任务。代码主要包括数据的加载与预处理、神经网络模型的构建、损失函数和优化器的定义、模型的训练、评估以及最终模型的保存等步骤。 二、依赖库 torch&#xff1a;P…

SpringBoot的启动原理?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot的启动原理&#xff1f;】面试题。希望对大家有帮助&#xff1b; SpringBoot的启动原理&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot的启动原理主要是通过 SpringApplication 类来…