05数据解析—正则
回顾
1、爬虫
2、爬虫的分类:
- 
通用爬虫 
- 
聚焦爬虫 
- 
增量式爬虫:监测 
3、反爬机制
	  反反爬策略
4、robots,UA监测:UA伪装
5、http和https概念:服务器和客户端进行数据交互的某种形式。
6、常用的头信息:
- User-Agent:请求载体的身份标识
- Connection:close
- content-type
7、https的加密方式:证书秘钥加密
- 证书:是被应用在https的加密操作中的。
- 该证书是有证书认证机构颁布的,证书中包含了公钥(加密方式)。
8、request → get/post:
- 
url 
- 
data/params:对请求参数的封装 
- 
headers:UA伪装 
9、什么是动态加载的数据:由另一个额外的请求请求到的数据。
- ajax
- js
10、如何鉴定页面中是否有动态加载的数据?
- 局部搜索
- 全局搜索
11、对一个陌生网站进行爬取前的第一步
- 确定你要爬取的数据是否为动态加载的!!
数据解析
1、解析:根据指定的规则对数据进行提取。
 作用:实现聚焦爬虫。
2、聚焦爬虫的编码流程:
- 
指定url 
- 
发起请求 
- 
获取响应数据 
- 
数据解析 
- 
持久化存储数 
3、据解析的方式:
- 正则
- bs4
- xpath
- pyquery(拓展)
4、数据解析的通用原理是什么?
- 
数据解析需要作用在页面源码中(一组html标签组成的) 
- 
html的核心作用:展示数据 
- 
html是如何展示数据:数据被放置在html标签之中,或者是在属性中 
5、通用原理:
- 
标签定位 
- 
取文本or取属性 
正则实现的数据解析
需求:爬取糗事百科中糗图数据
我去打开网页的时候,发现糗事百科的网页版本已经没有了,麻了麻了。
所以找了另一个网页,天堂图片网:https://www.ivsky.com/bizhi/
实现过程
1、导入包和反爬机制
import requests
# 反爬
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55'
}
2、爬取图片数据
先爬一张图片试试,这里有两个方法
方式1:
url = 'https://img.ivsky.com/img/bizhi/li/202110/02/secrets_of_the_jungle-006.jpg'
img_data = requests.get(url=url,headers=headers).content  # content返回的是byte类型的数据
with open('./1.jpg','wb') as fp:
    fp.write(img_data)
方式2:
from urllib import request
url = 'https://img.ivsky.com/img/bizhi/li/202110/02/secrets_of_the_jungle-006.jpg'
request.urlretrieve(url,'./2.jpg')
方式1和方式2对于图片数据爬取的操作最大的不同之处:方式2不可以使用UA伪装的机制
urllib就是一个比较老的网络请求的模块,在requests模块没有出现之前,请求发送的操作使用的都是urllib
完整代码
import  requests
import  re
import  os
if __name__=="__main__":
    #创建一个文件夹
    if not os.path.exists('./qiutuLibs'):
        os.mkdir('./qiutuLibs')
    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/92.0.4515.159 Safari/537.36'
    }
    #使用通用爬虫对url对应的一整张页面进行爬取
    page_text = requests.get(url=url,headers=headers).text
#需要使用聚焦爬虫将页面中所有图片进行解析
# < div class ="thumb" >
# < a href = "/article/125003930" target = "_blank" >
# < img src = "//pic.qiushibaike.com/system/pictures/12500/125003930/medium/14Z46S72MMC2P4ZC.jpg"   alt = "糗事#125003930"
# class ="illustration" width="100%" height="auto" >
# < / a >
# < / div >
ex= '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
img_src_list = re.findall(ex,page_text,re.S)
print(img_src_list)
for src in img_src_list:
    #拼接出一个完整的图片url
    src ='https:'+src
    #请求到了图片的二进制数据
    img_data = requests.get(url=src,headers=headers).content
    #生成图片名称
    img_name=src.split('/')[-1]
    #图片最终存储的路径
    img_Path='./qiutuLibs/'+img_name
    with open(img_Path,'wb') as fp:
        fp.write(img_data)
        print(img_name,'下载成功!!!')
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号