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()

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

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

相关文章

基于Python的房产数据分析系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录&#xff1a; 目录 详细视频演示 设计文档详细参考 技术开发的参考技术栈&#xff01; 2.1 Python语言 2.2 Django框架 2.3 MySQL 2.4 Hadoop介绍 2.5 Scrapy介绍 4.2 系统结构设计 4.3 数据库设计 界面设计与功能实现 5.1系统登录注册实现 5.2管理员模块…

【请求代理】springboot单机服务基于过滤器Filter实现第三方服务器接口请求代理功能

springboot单机服务基于过滤器Filter实现第三方服务器接口请求代理功能 一、前言二、解决思路三、基于gateway实现四、基于过滤器Filter实现五、问题总结 **注&#xff1a;本文源码获取或者更多资料&#xff0c;关注公众号&#xff1a;技术闲人**一、前言 在项目开发时会遇到w…

基于yolov8的口罩检测模型

项目介绍 本项目基于yolov8对图像进行训练&#xff0c;可以检测戴口罩的人与没有带口罩的人的图片和视频&#xff0c;除此之外&#xff0c;还提供了数据分析界面&#xff0c;支持检测过的信息转化为excel&#xff0c;信息可视化等功能 配置过程 软件开发环境:python3.9 系统…

前端开发:HTML与CSS

文章目录 前言1.1、CS架构和BS架构1.2、网页构成 HTML1.web开发1.1、最简单的web应用程序1.2、HTTP协议1.2.1 、简介1.2.2、 http协议特性1.3.3、http请求协议与响应协议 2.HTML概述3.HTML标准结构4.标签的语法5.基本标签6.超链接标签6.1、超链接基本使用6.2、锚点 7.img标签8.…

Apollo:实时通信架构CyberRT入门, my writer

1. 简介 1.1 从 ROS 系统说起 Apollo 最初用的中间件是 ROS(机器人操作系统),在 v3.0 之前用的都是基于 ROS 框架进行开发。概括来说,ROS 系统主要包含三方面: 第一是通信系统,ROS 是个分布式的松耦合系统,算法模块是以独立的进程形式存在的,也就是我们常说的 Node。R…

单击和一些案例

一、单击 1、单击概念 除了定位鼠标之外&#xff0c;processing鼠标还捕捉鼠标是否被单击。mousePressed在鼠标单击和不单击的情况下有不同的值。mousePressed变量是一种bool变量&#xff0c;也就是说它只有两个可能的值&#xff0c;真和假。当鼠标按下的时候mousePressed的值…

apache2和httpd web服务器

apache2和httpd web服务器 apache2和httpd web服务器是啥apache是软件基金会apache2是一个web服务httpd和apache2是同一个东西&#xff0c;但是不同linux发行版中叫法不一样。就是同一个东西&#xff0c;但是看上去有一些不一样。 apache2和httpd web服务器是啥 apache是软件基…

Scikit-learn内置的数据集

数据集是我们学习和研究机器学习不可或缺的基础&#xff0c;Scikit-learn库内置了丰富的数据集资源&#xff0c;非常适合初学者用来练习和验证机器学习算法的效果。 一、鸢尾花数据集 鸢尾花数据集&#xff08;Iris Dataset&#xff09;是机器学习领域中最著名的数据集之一&am…

【每日一篇】使用图神经网络进行交通速度预测的上下文感知知识图谱框架【为了自己方便读论文】

Context-aware knowledge graph framework for traffic speed forecasting using graph neural network 论文链接&#xff1a; https://arxiv.org/abs/2407.17703 翻译&#xff1a; 摘要 人类流动在空间和时间上受到城市环境的密切影响&#xff0c;构成了理解交通系统的重…

MarkTool之UDP

UDP客户端&#xff0c;主要作用是与UDP服务端连接进行数据通讯 1、连接参数有4个&#xff0c;绑定IP和Port&#xff0c;服务端IP和Port 2、接收数据和发送数据的参数设置&#xff0c;有16进制&#xff0c;有字符&#xff0c;有原始数据&#xff0c;都可进行选择 3、定时发送&a…

理解常见开源协议的区别

本文将介绍几种常见的开源许可证&#xff0c;包括GPL、LGPL、MIT、Apache、BSD 和 木兰协议&#xff08;Mulan PSL&#xff09;&#xff0c;并详细解释它们的区别。 1. GPL (GNU General Public License) GPL 是最著名和最常用的开源许可证之一&#xff0c;由自由软件基金会 …

泰安网站建设有几大特点

泰安网站建设的特点可以分为以下几个方面&#xff1a; 一、突出地域特色。泰安是山东省的一个地级市&#xff0c;具有悠久的历史和深厚的文化底蕴。在网站建设过程中&#xff0c;泰安的特色文化和旅游资源应得到充分的展示。可以通过优美的图片、详细的介绍和生动的文字&#x…

【Python 基础】字典和结构化数据 -1

字典和结构化数据 在本文中,我将介绍字典数据类型,它提供了一种灵活的访问和组织数据的方式。然后,结合字典与关于列表的知识,你将学习如何创建一个数据结构,对井字棋盘建模。 字典数据类型 像列表一样,“字典”是许多值的集合。但不像列表的下标,字典的索引可以使用…

【STM32】SysTick定时器

SysTick定时器 前言一、介绍最大计时时间 固件库函数体现用途 总结 前言 参考一下猫咪博主的文章&#xff0c;作为补充学习⇨【STM32】Systick滴答定时器 当然我主要还是跟着金善愚老师学的&#xff0c;我觉得他真的有种高中班主任的亲切感。那个1812的名号往那里一放&#x…

【vluhub】elasticsearch漏洞

Elasticsearch介绍 是Apache旗下的一个开源的、分布式、RESTful的搜索和分析引擎&#xff0c;适用于java语言项目 默认端口9200 kali中搭建ElasticHD, 即可未授权绕过ES可视化界面 直通车 https://github.com/360EntSecGroup-Skylar/ElasticHD/releases/download/1.4/elas…

Csrf复习(pikachu靶场和防御手段)

CSRF漏洞简介 CSRF又称跨站请求伪造&#xff0c;是指攻击者在用户登录的状态下&#xff08;浏览器保存了用户的cookie&#xff09;通过伪造恶意url诱导用户点击&#xff0c;借助用户的cookie网站权限&#xff08;冒充用户身份来进行非法操作&#xff0c;对于服务器来说是合法的…

视觉SLAM第二讲

SLAM分为定位和建图两个问题。 定位问题 定位问题是通过传感器观测数据直接或间接求解位置和姿态。 通常可以分为两类&#xff1a;基于已知地图的定位和基于未知地图的定位。 基于已知地图的定位 利用预先构建的地图&#xff0c;结合传感器数据进行全局定位。SLAM中的全局…

如何利用开源Bug管理系统提高团队效率

国内外主流的10款开源bug管理系统对比&#xff1a;PingCode、Worktile、Trac、WebIssues、MantisBT、Bugzilla 、Fossil、The Bug Genie、TestLink 、OpenProject。 在软件开发的复杂世界中&#xff0c;Bug管理可能是一个令人头疼的问题&#xff0c;尤其是当工具不足以捕捉和解…

这才是做项目的正确打开方式

基于大数据的推荐机制&#xff0c;对于没有接触到信息的人而言&#xff0c;会认为获取行业外的信息会很困难&#xff0c;对于已经接触到信息的人而言&#xff0c;又会出现选择困难症。当系统对你锁定标签后&#xff0c;就会频繁的给你推荐跟标签对应的信息&#xff0c;信息一多…

【传知代码】智慧医疗:纹理特征VS卷积特征(论文复现)

在这个无处不在的技术革新的时代&#xff0c;计算机视觉和机器学习成为了医疗领域中不可或缺的力量。在这篇文章中&#xff0c;我们将探讨两种突出的技术&#xff1a;纹理特征和卷积特征。它们如何在医学影像分析中竞争与协作&#xff0c;为医生提供更深入、更精确的诊断信息&a…