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,'下载成功!!!')
posted @ 2022-01-19 21:15  奶酥  阅读(66)  评论(0编辑  收藏  举报