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

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

目录

前言

一、正则基本使用

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


 

相关文章:

  • 神经网络之CNN文本识别
  • LeetCode 热题100 3. 无重复字符的最长子串
  • LabVIEW DataSocket 通信库详解
  • 基于DeepSeek 的图生文最新算法 VLM-R1
  • Go开发框架Sponge+AI助手协同配合重塑企业级开发范式
  • 论文阅读:CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION?
  • 【C语言显示Linux系统参数】
  • c++面试常见问题:虚表指针存在于内存哪个分区
  • LeetCodehot 力扣热题100 组合总和
  • 【C】初阶数据结构8 -- 链式二叉树
  • 计算机毕业设计SpringBoot+Vue.js人力资源管理系统(源码+文档+PPT+讲解)
  • MCP与RAG:增强大型语言模型的两种路径
  • 【算法】【并查集】acwing算法基础837. 连通块中点的数量
  • 每日一题——接雨水
  • 制作安装win10系统U盘详细步骤
  • 深入解析HDFS:定义、架构、原理、应用场景及常用命令
  • 【C++并发编程实战】第1章 你好,C++的并发世界!
  • Golang语言特性
  • C语言:51单片机 常用电子元器件讲解(带英文名称)
  • Java-servlet(一)Web应用与服务端技术概念知识讲解
  • 当文徵明“相遇”莫奈:苏博将展“从拙政园到莫奈花园”
  • 新质观察|低空货运是城市发展低空经济的第一引擎
  • 以色列称“将立即允许恢复”人道主义物资进入加沙
  • 慢品巴陵,看总编辑眼中的岳阳如何书写“山水人文答卷”
  • 中共中央、国务院印发《党政机关厉行节约反对浪费条例》
  • 特写|银耳种植“北移”到沧州盐山,村民入伙可年增收4万元