爬虫在使用场景中的分类:
- 通用爬虫
抓取系统重要组成部分。抓取的是一整张页面的数据。
- 聚焦爬虫
是建立在通用爬虫的基础之上。抓取的是页面中特定的局部内容。
- 增量式爬虫
检测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。
爬虫的矛与盾:
- 反爬机制
门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
- 反反爬策略
爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而获取门户网站中的相关数据。
http协议:
- 概念:服务器与客户端进行数据交互的一种形式。
- 常用请求头信息:
(1)User-Agent:请求载体的身份标识。
(2)Connection:请求完毕后,是断开连接还是保持连接。
- 常见响应头信息:
(1)Content-Type:服务器响应回客户端的数据类型
https协议:
- 概念:安全的超文本传输协议
- 加密方式
(1)对称密钥加密
(2)非对称密钥加密
(3)证书密钥加密
requests模块:python中原生的一款基于网络请求的模块,功能强大,简单便捷,效率极高。
- 作用:模拟浏览器发请求
- 如何使用
(1)指定url
(2)发起请求(Get or Post)
(3)获取响应数据
(4)持久化存储
动态加载数据:
网页信息可能是动态加载的,ajax动态请求,可以在XHR中查看真正url
数据解析:
- 正则
- bs4
- xpath(***)
数据解析原理:
大部分文本内容都存在标签中或者标签对应的属性中
进行指定标签定位
标签或标签对应的属性中存储的数据值进行提取(解析)
聚焦爬虫编码流程:
- 指定url
- 发起请求
- 获取响应数据
- 数据解析
- 持久化存储
正则表达式:(import re)
- 单字符:
. : 除换行以外的所有字符
[] : [aoe] [a-w] 匹配集合任意一个字符
\d : 数字 [0-9]
\D : 非数字
\w : 数字,字谜,下划线,中文
\W : 非\w
\s : 所有的空白字符,包括空格,制表符,换页符等等。等价于 [\f\n\r\t\v]
\S : 非空白
- 数量修饰:
* : 任意多次 >=0
+ : 至少依次 >=1
? : 可有可无,0次或1次
{m} : 固定m次 hello{3, }
{m,} : 至少m次
{m,n} : m-n次
- 边界:
$ : 以某某结尾
^ : 以某某开头
- 分组:
(ab)
- 贪婪模式: .*
- 非贪婪模式: .*?
- re.I: 忽略大小写
- re.M: 多行匹配
- re.S: 单行匹配
- re.sub(正则表达式,替换内容, 字符串)
<div class="pic">
<a href="https://www.douban.com/photos/album/1727324287/">
<img src="https://img1.doubanio.com/view/photo/albumcover/public/p2578730628.webp"
data-origin="https://img1.doubanio.com/view/photo/albumcover/public/p2578730628.webp" alt="">
</a>
</div>
ex = '<div class="pic">.*?<img src=.*? data-origin="(.*?)" alt=.*?</div>'
bs4进行数据解析:
- 数据解析原理:
标签定位
提取标签、标签属性的数据值
- bs4数据解析原理:
1.实例化一个BeautifulSoup对象,并将页面源码数据加载到该对象中
2.通过调用BeautifulSoup对象中相关属性或者方法进行标签定位和数据提取
- 进行环境的安装:
pip install bs4
pip install lxml
- 如何实例化BeautifulSoup对象:
1.from bs4 import BeautifulSoup
2.对象的实例化
- 将本地的html文档中的数据加载到该对象中
fp =