当前位置: 首页 > news >正文

02、爬虫数据解析-Re解析

数据解析的目的是不拿到页面的全部内容,只拿到部分我们想要的内容内容。

Re解析就是正则解析,效率高准确性高。学习本节内容前需要学会基础的正则表达式。

一、正则匹配规则

1、常用元字符

.       匹配除换行符以外的字符

\w    匹配字母或数字或下划线

\s     匹配任意的空白符

\d     匹配数字

\n     匹配一个换行符

\t      匹配一个制表符

^      匹配字符串的开始

$      匹配字符串的结尾

 \W   匹配非字母或数字或下划线

\D     匹配非数字

\S     匹配非空白符

a|b    匹配字符a或字符b

()       匹配括号内的表达式,也表示一个组

[...]    匹配字符组中的字符

[^...]   匹配除了字符组中字符的所有字符

2、量词:控制前面的元字符出现的次数

*        重复0次或更多次

+       重复一次或更多次

?      重复0次或一次

{n}     重复n次

{n,}    重复n次或更多次

{n,m} 重复n到m次

3、贪婪匹配和非贪婪匹配(重要)

.*     贪婪匹配

.*?   惰性匹配

二、Re模块

re模块中只需要记住以下几种功能就够用了

1、re.findall

匹配字符串中所有的符合正则的内容,返回list

import re
list = re.findall(r"\d+","我的电话号是:10086,小红的电话是100000")
print(list)
#运行结果:['10086', '100000']

2、re.finditer(重点)

和findall差不多,只不过这时返回的是迭代器

因为findall返回列表,当页面上数据较大时,list就会非常大,效率不高。

从迭代器中拿到内容需要.group()

import re
it = re.finditer(r"\d+","我的电话号是:10086,小红的电话是100000")
print(it)
#返回结果:<callable_iterator object at 0x000001914FB0D850>for i in it:print(i.group())
#返回结果
# 10086
# 100000

3、re.search

进行匹配,但是如果匹配到了第一个结果,就会返回这个结果。如果匹配不上search返回的是None。

如果拿到了返回的依然是迭代器,使用.group()取到匹配的内容

import re
s = re.search(r"\d+","我的电话号是:10086,小红的电话是100000")
print(s.group())
#返回结果 10086

4、re.match

只能从字符串的开头进行匹配。相当于在正则表达式前面加了一个^

import re
s1 = re.match(r"\d+","我的电话号是:10086,小红的电话是100000")
print(s1.group()) #报错,未找到
s2 = re.match(r"\d+","10086,小红的电话是100000")
print(s2.group()) #返回10086

5、预加载正则表达式(re.compile(r"\d+"))

当后面正则较为复杂的时候,就可以使用预加载,先写规则。

import re
obj = re.compile(r"\d+")
ret = obj.finditer("我的电话号是:10086,小红的电话是100000")
for it in ret:print(it.group())

6、单独提取正则中的内容

re.S的作用是让.能匹配换行符

obj = re.compile(r"<div class='.*?'><span id='\d'>(?P<hello>.*?)</span></div>", re.S)#re.S的作用是让.能匹配换行符
ret = obj.finditer(s)
for it in ret:print(it.group("hello"))
# 小米
# 华为
# 三星
# 苹果

三、实战:豆瓣top250

1、需求:

拿到排行榜的电影名称,年份,评价,打分,并使用csvwriter写入到csv文件中

2、思路:

(1)拿到页面源代码 requests

(2)通过re来提取到想要的有效信息 re

import re
import requests
import csvurl = "http://movie.douban.com/top250"
headers ={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
}
resp = requests.get(url,headers=headers)
page_content = resp.text
#解析数据
obj = re.compile(r'<li>.*?<div class="item".*?<span class="title">(?P<name>.*?)</span>.*?'r'<p class="">.*?<br>(?P<time>.*?)&nbsp.*?'r'<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?'r'<span>(?P<judge>.*?)人评价</span>', re.S)
ret = obj.finditer(page_content)
f = open("data.csv",mode="w",encoding="utf-8")
csvwriter = csv.writer(f)
for it in ret:# print(it.group("name"))# print(it.group("time").strip())# print(it.group("score"))# print(it.group("judge"))dic = it.groupdict()dic['time'] = dic['time'].strip()#因为年份后面有空格,单独处理csvwriter.writerow(dic.values())
resp.close()

 结果:

四、实战:屠戮盗版天堂电影信息

1、需求:

想拿到2024必看篇的所有电影下载地址。

2、思路

(1)定位到2024必看篇

(2)从2024必看篇中提取到子页面的链接地址

(3)请求子页面的链接地址,拿到我们想要的下载地址

注:此站点进行了反爬措施,需要添加User-Agent和Cookie。并且编码为gb2312,需要设置。

import requests
import re
url = "https://www.dytt89.com/"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0","Cookie":"guardok=VxXtQIYG+FVwAJLu76U/QvRiEyoXdFVFLcCsBijzPzwTF6G1uhyRle6K2pHzz4oYx32wQY0n0W/gv80enczOuA==; __vtins__KSHU1VNqce379XHB=%7B%22sid%22%3A%20%222408df8b-f3ee-5771-b99c-a0b206621ca0%22%2C%20%22vd%22%3A%201%2C%20%22stt%22%3A%200%2C%20%22dr%22%3A%200%2C%20%22expires%22%3A%201722072217375%2C%20%22ct%22%3A%201722070417375%7D; __51uvsct__KSHU1VNqce379XHB=1; __51vcke__KSHU1VNqce379XHB=8133f70d-0abb-5af7-91dc-fbf00581cf6a; __51vuft__KSHU1VNqce379XHB=1722070417377; Hm_lvt_93b4a7c2e07353c3853ac17a86d4c8a4=1722070418; Hm_lpvt_93b4a7c2e07353c3853ac17a86d4c8a4=1722070418; HMACCOUNT=4AF1B6073CA4B2F3; Hm_lvt_8e745928b4c636da693d2c43470f5413=1722070418; Hm_lpvt_8e745928b4c636da693d2c43470f5413=1722070418; Hm_lvt_0113b461c3b631f7a568630be1134d3d=1722070418; Hm_lpvt_0113b461c3b631f7a568630be1134d3d=1722070418"
}
resp = requests.get(url, verify=False,headers=headers)#verify=False去掉安全验证
resp.encoding = "gb2312"
# print(resp.text)#定位到2024必看
obj1 = re.compile(r'2024必看热片.*?<ul>(.*?)</ul>', re.S)
obj2 = re.compile(r"a href='(?P<href>.*?)'",re.S)
obj3 = re.compile(r'译  名(?P<movie>.*?)<br />.*?WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<download>.*?)">', re.S)
result1 = obj1.finditer(resp.text)
for it in result1:ul = it.group()#提取子页面链接result2 = obj2.finditer(ul)for it2 in result2:href = "https://www.dytt89.com/"+it2.group("href")#请求子页面链接resp2 = requests.get(href, headers=headers,verify=False)resp2.encoding = "gb2312"#拿到子页面链接的下载地址result3 = obj3.finditer(resp2.text)for it3 in result3:print(it3.group("movie"))print(it3.group("download"))resp2.close()
resp.close()

相关文章:

02、爬虫数据解析-Re解析

数据解析的目的是不拿到页面的全部内容&#xff0c;只拿到部分我们想要的内容内容。 Re解析就是正则解析&#xff0c;效率高准确性高。学习本节内容前需要学会基础的正则表达式。 一、正则匹配规则 1、常用元字符 . 匹配除换行符以外的字符 \w 匹配字母或数字或下划…...

掀桌子了!原来是咱们的大屏设计太酷,吓着前端开发老铁了

掀桌子了&#xff01;原来是咱们的大屏设计太酷&#xff0c;吓着前端开发老铁了 艾斯视觉观点认为&#xff1a;在软件开发的世界里&#xff0c;有时候创意和设计的火花会擦得特别亮&#xff0c;以至于让技术实现的伙伴们感到既兴奋又紧张。这不&#xff0c;我们的设计团队刚刚…...

JavaScriptfor循环的树形菜单栏·

在此声明一下嗷兄弟闷儿&#xff01;我没写样式纯粹是console.log()打印控制面板的&#xff01; 全局声明一个data&#xff1b; let data; 然后去获取到json的假数据 let xhr new XMLHttpRequest(); // 设置请求方式和请求地址 xhr.open(get, ./js/menu.json, true); // 发…...

easyExcel 3.x以上版本导入数据后,再把错误信息导出,外加自定义RGB背景色、行高、宽度等

easyExcel 3.x以上版本导入数据后&#xff0c;再把错误信息导出&#xff0c;外加自定义RGB背景色 背景 由于项目中用的easypoi导入的数据量大了&#xff0c;会导致OOM的问题&#xff0c;所以要求更换为easyExcel框架做导入。话不多说&#xff0c;这里只做一个导入的示例&…...

React的img图片路径怎么写

在React中&#xff0c;图片路径的写法取决于你的图片资源是如何被管理和存放的。这里有几种常见的情况和对应的写法&#xff1a; 1. 图片作为React组件的静态资源 如果你的图片文件放在React项目的public文件夹下&#xff08;这是Create React App项目的默认结构&#xff09;…...

UGUI优化篇--UGUI合批

UGUI合批 UGUI合批规则概述UGUI性能查看工具合批部分的特殊例子一个白色image、蓝色image覆盖了Text&#xff0c;白色image和Text哪个先渲染 Mask合批Mask为什么会产生两个drawcallMask为什么不能合批Mask注意要点 RectMask2D为什么RecMask2D比Mask性能更好主要代码RectMask2D注…...

FineBI连接MySQL5.7

一、在FineBI系统管理中&#xff0c;点击【新建数据库连接】 选择MySQL数据库 配置数据库连接&#xff0c;如下&#xff0c;其中数据库名称就是需要连接的目标数据库...

基于tkinter的学生信息管理系统之登录界面和主界面菜单设计

目录 一、tkinter的介绍 二、登陆界面的设计 1、登陆界面完整代码 2、部分代码讲解 3、登录的数据模型设计 4、效果展示 三、学生主界面菜单设计 1、学生主界面菜单设计完整代码 2、 部分代码讲解 3、效果展示 四、数据库的模型设计 欢迎大家进来学习和支持&#xff01…...

web基础以及http协议

⼀、web基本概念和常识 Web&#xff1a;为⽤户提供的⼀种在互联⽹上浏览信息的服务&#xff0c;Web 服 务是动态的、可交 互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联⽹服务&#xff0c;这些服务包括信息浏览 服务&#xff0c;以及各种交互式服务&#xff0c;包括…...

DataEase一键部署:轻松搭建数据可视化平台

DataEase是一个开源的数据可视化和分析工具&#xff0c;旨在帮助用户轻松创建和共享数据仪表盘。它支持多种数据源&#xff0c;包括关系型数据库&#xff0c;文件数据源&#xff0c;NoSQL数据库等&#xff0c;提供强大的数据查询、处理和可视化功能。DataEase 不仅是一款数据可…...

网络安全相关竞赛比赛

赛事日历&#xff08;包含全国所有网络安全竞赛&#xff09; https://datacon.qianxin.com/competition/competitions https://www.ichunqiu.com/competition/all 全国网络安全竞赛 名称链接全国大学生信息安全竞赛http://www.ciscn.cn/信息安全与对抗技术竞赛&#xff08;In…...

Vscode——如何快速搜索项目工程中的某个文件的位置

第一步&#xff1a;按 shift ctrl p 第二步&#xff1a;然后把 > 删除 第三步&#xff1a;输入文件名称即可...

Kubernetes 正在弃用 Docker?Docker将何去何从?

一段时间以来&#xff0c;当人们想到容器时&#xff0c;似乎都会想到Docker和Kubernetes。在构建和运行容器方面&#xff0c;Docker 一直是大名鼎鼎的品牌&#xff0c;而在管理和编排容器方面&#xff0c;Kubernetes 一直是大名鼎鼎的品牌。听到 Kubernetes 从 1.20 版开始不再…...

编程语言「描述符」漫谈——以C++与Rust为例的行为声明与类型描述

编程语言中有三种描述符: 声明符: 表示一种动作, 比如创建变量, 定义函数等等;说明符: 也就是类型说明符, 表示一种数据类型;修饰符: 表示动作或类型的属性, 例如不可变…… swift语言就是严格遵循这些描述符的, 例如, objc是修饰符 , 表示编译成OC兼容函数, func 是声明符, …...

电脑屏幕录制软件哪个好?推荐3款,满足各种录制需求

大家好&#xff0c;今天和大家来聊一个既实用又有点神秘的话题——电脑屏幕录制软件哪个好&#xff1f;这是个让众多网友头疼的问题&#xff0c;毕竟谁不想拥有一款既好用又好玩的录制神器呢&#xff1f; 首先&#xff0c;我们得明确屏幕录制软件可不是简单地录屏而已&#xf…...

大模型学习应用 1:用 itrex 创新高效实现 LLM 的部署和微调

用 itrex 创新高效实现 LLM 的部署和微调 - 项目作业 目录 准备工作Task 1 完成在线环境的工具包安装&#xff0c;包含 基础环境包、Extension for Transformers 包、加速计算包Task 2 利用 Intel Extension for Transformers 部署通义千问 Qwen-7B Chat&#xff0c;并根据 pr…...

【Android】碎片—动态添加、创建Fragment生命周期、通信

简单用法 在一个活动中添加两个碎片&#xff0c;并让这两个碎片平分活动空间 先新建一个左侧碎片布局和一个右侧碎片布局 左侧碎片 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/…...

前端 SSE 长连接

使用 const options {withCredentials: true, // 默认 false}const eventSource new EventSource(/api, options);eventSource.addEventListener(open, () > {});eventSource.onmessage (event) > {}; // 或addEventListener(message,callback)eventSource.addEvent…...

.mp4格式的视频为何不能通过video标签在chrome浏览器中播放?

chrome浏览器目前只支持编解码格式为H264格式的视频&#xff0c;如果某个.mp4后缀的视频不能在chrome浏览器中播放&#xff0c;多半是这个视频的编码格式不是H264的&#xff01; 1、可以通过ffmpeg工具查看当前视频的编码格式&#xff1a; ffprobe -v error -select_streams v…...

Python酷库之旅-第三方库Pandas(051)

目录 一、用法精讲 186、pandas.Series.is_monotonic_increasing属性 186-1、语法 186-2、参数 186-3、功能 186-4、返回值 186-5、说明 186-6、用法 186-6-1、数据准备 186-6-2、代码示例 186-6-3、结果输出 187、pandas.Series.is_monotonic_decreasing属性 187…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...