数据解析
数据解析分类
- 正则表达式
- 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 下载成功!!!