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

爬虫系列之【数据解析之正则】《二》

目录

前言

一、正则基本使用

1.1 导包

1.2 接口方法

1.3 换行匹配问题

二、实战案例

完整代码


前言

在爬虫工作中,我们主要会遇到两种类型的文本数据:

  1. JSON格式数据

  2. HTML文档数据

对于JSON字符串数据,通常使用Python的字典操作进行键值对提取或者使用正则语法;
对于HTML文档,则主要采用XPath表达式和CSS选择器(bs4)进行数据解析和提取。

一、正则基本使用

1.1 导包

import re

1.2 接口方法

re.findall(参数1,参数2)

参数1:写正则语法,匹配规则

参数2: 字符串数据

例1:匹配 id 的内容

import re
# 1,字符串数据
str = ' <meta id="my name is zhouhuan" http-equiv="Content-Type" content="text/html;charset=utf-8">中国<共??产yes党'
# 2,匹配语法
result = re.findall('id="(.*?)" http',str)
# 3,打印结果
print(result)

.*?:要匹配的内容换成 .*?
() :只会返回括号内的内容

 例2:匹配所有中文

import re
# 1,字符串数据
str = ' <meta id="my name is zhouhuan" http-equiv="Content-Type" content="text/html;charset=utf-8">中国<共??产yes党'
# 2,匹配所有中文
result = re.findall('[\u4e00-\u9fa5]',str)
# 3,打印结果
print(result)


例3:过滤和替换非法字符

import re
# 1,字符串数据
str = "abc?de|fg><hi:jk"
# 2,过滤非法字符
result1 = re.findall('[\\\\/:*?\"<>|]',str)
# 3,替换非法字符
result2 = re.sub('[\\\\/:*?\"<>|]',"_",str)
# 4,打印结果
print("过滤的非法字符有:",result1)
print("替换后的str字符串为:",result2)


1.3 换行匹配问题

import re
# 1,换行匹配问题
str ='''
    <div>
        中国共产党万岁
    </div>
'''
# 2,规则默认是在一行匹配,换行后重新匹配,所以匹配到的是空 []
result = re.findall('<div>(.*?)</div>',str)
# 打印结果
print(result)  # []

解决方案:待定...


二、实战案例

需求:爬取斗鱼直播星秀板块直播的主播《标题》和《网名》

链接(url):星秀直播_星秀视频_斗鱼直播

分析步骤:

1,先抓包找到需要的目标 url

2,先打印一下爬取到的所有数据

完整代码

import re
import requests
# 实战之爬取斗鱼星秀板块主播标题
# 1,目标url
url = 'https://www.douyu.com/wgapi/ordnc/live/web/room/mixList/2/1008/0/1?'
# 2,身份伪装
header={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
}
# 3,发起请求
response = requests.get(url=url,headers=header)
# 4,打印响应内容(确认是否获得响应)
# print(response.text)
# 5,使用正则解析:主播标题
title_list = re.findall('"rn":"(.*?)"',response.text)
print(title_list)
# 6,使用正则解析:主播名字
name_list = re.findall('"nn":"(.*?)"',response.text)
print(name_list)

# 7,展示数据:len(title_list) 打印列表的长度
print("主播网名    直播标题")
for i in range(len(title_list)):
    print(name_list[i],":",title_list[i])


 


http://www.kler.cn/a/569566.html

相关文章:

  • 【计网】计算机网络概述
  • STM32寄存器控制引脚高低电平
  • Redis数据结构详解
  • linux-docker及docker-compose相关命令
  • 基于Springboot高校社团管理系统【附源码+文档】
  • 鸿蒙5.0实战案例:基于WaterFlow的页面滑动加载
  • InterHand26M(handposeX-json 格式)数据集-release >> DataBall
  • 【算法】3302. 表达式求值
  • nginx+keepalived负载均衡及高可用
  • react原理面试题
  • 大语言模型学习
  • 科技赋能筑未来 中建海龙MiC建筑技术打造保障房建设新标杆
  • 【Maven】入门介绍 与 安装、配置
  • Spring 源码硬核解析系列专题(十二):Spring Integration 的消息驱动源码解析
  • nio使用
  • 在 ASP.NET Core 中压缩并减少图像的文件大小
  • SQL命令详解之数据的查询操作
  • SpringBoot Maven快速上手
  • 量子关联特性的多维度探索:五量子比特星型系统与两量子比特系统的对比分析
  • Nodejs-逐行读取文件【简易版】