数据解析之正则表达式

数据解析

数据解析分类

  • 正则表达式
  • bs4
  • xpath

数据解析原理

想要获取的局部的内容存储在标签之间或这标签对应的属性中:1、进行标签定位;2、对标签之间或标签属性中存储的数据值进行提取

正则解析

正则表达式概念

在线测试工具:regex101.com / regexr-cn.com
正则练习:codejiaomang.com

1、限定符
前面的字符出现0次或1次
* ≥0次
+ ≥1次
{m} 出现m次
{m,} ≥m次
{m,n} 出现次数在m-n之间
如果希望匹配多个字符的重复,则将想要匹配的字符用()括起来,再添加限定符

2、“或”运算符
竖线|

3、字符类
[a-w] 取的字符必须在方括号中;也可在[]中指定字符范围,如[a-z]表示所有小写英文字符,[a-zA-Z]表示所有小写大写英文字符,[a-zA-Z0-9]代表所有大小写英文字符和数字。如果在方括号前面加一个尖号^,表示匹配除尖号后面列出的字符以外的字符,如[^0-9]表示匹配非数字字符(包含换行符)

4、元字符
\d:数字字符
\D:非数组字符
\w:单词字符(英文、数字、下划线)
\W:非单词字符
\s:空白符,包括空格、Tab制表符、换行符和换页符
\S:非空白字符
. :任意字符,不包含换行符
^ :匹配行首
$ :匹配行尾

5、贪婪与懒惰匹配
在这里插入图片描述

实战练习

需求:爬取糗事百科中糗图板块下所有的糗图图片

  • 先利用通用爬虫爬取整张页面
  • 再使用聚焦爬虫对页面进行解析爬取图片信息
# 如何爬取图片数据:请求图片网址,获取二进制形式信息并存储
import requests
url='https://pic.qiushibaike.com/system/pictures/12400/124000744/medium/YXSKUPE9PDTGAIBR.jpg'
image_data=requests.get(url).content #content返回二进制形式的图片信息
with open('./qiutu.jpg','wb')as f:
    f.write(image_data)
#爬取整张页面
url='https://www.qiushibaike.com/imgrank/'
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
}
page_data = requests.get(url,headers=headers).text

#使用聚焦爬虫将页面中所有图片进行解析
import re
import os
# 创建文件夹
if not os.path.exists('./qiutuLibs'):
    os.mkdir('./qiutuLibs')
# 分析网页源代码发现,图片都存储在以下标签中
# <div class="thumb">

# <a href="/article/124006643" target="_blank">
# <img src="//pic.qiushibaike.com/system/pictures/12400/124006643/medium/56L2IYBOD6NX3C5I.jpg" alt="糗事#124006643" class="illustration" width="100%" height="auto">
# </a>
# </div>
# 我们需要匹配得到img标签的src属性。
ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
src_list=re.findall(ex,page_data,re.S) #re.S表示单行匹配
for src in src_list:
    src_url = 'https:'+src
    image_data=requests.get(src_url,headers=headers).content
    image_name=src.split('/')[-1] # 将图片网址按'/'分割,取最后一个作为图片名字
    image_path = './qiutuLibs/'+image_name
    with open (image_path,'wb') as f:
        f.write(image_data)
    print(image_name,'下载成功!!!')
    
UMGLRXN7H9JN4VW7.jpg 下载成功!!!
CY8FPHTTP3ON8KXW.jpg 下载成功!!!
FXFOECZ815H40MXU.jpg 下载成功!!!
LUAAHDS1HN5NJX7I.jpg 下载成功!!!
3ARCFO98TBBPG041.jpg 下载成功!!!
YQU84TKS1PB92K0X.jpg 下载成功!!!
HDWVFLBY1GMY8KUT.jpg 下载成功!!!
ZZCAMROL3C9B2V5T.jpg 下载成功!!!
5CZEOST7IHENQ4X0.jpg 下载成功!!!
KF3YONE4M7AGT75H.jpg 下载成功!!!
S0K586O7GGTJOJH1.jpg 下载成功!!!
FG323Q6VQ2YSHGRG.jpg 下载成功!!!
0C6WT6X5H2XQQLMC.jpg 下载成功!!!
O8UTSE9NFXJDMWK6.jpg 下载成功!!!
71Z99KW2R1KL4VHC.jpg 下载成功!!!
Z8KYL6LVL5MH8LKY.jpg 下载成功!!!
BH9OSWL1LF44SD0L.jpg 下载成功!!!
8R2D8EH3KR5P3C42.jpg 下载成功!!!
FW2W6UUV64QZWF14.jpg 下载成功!!!
2L5W0ZRQH8SXYTNZ.jpg 下载成功!!!
6Z9S7D0DY1VRXFZ0.jpg 下载成功!!!
CHIRXUNQ1KDJCFWM.jpg 下载成功!!!
Q217Z7Y5B58M6LGR.jpg 下载成功!!!
MVCM6T7O44L44FP3.jpg 下载成功!!!
78E9X9UCY1X9JMQH.jpg 下载成功!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值