文章目录
爬虫基础
一、 基本概念
1、 简介
1.1 概念
什么是爬虫?
- 爬虫就是通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程
爬虫的价值:
- 抓取互联网上面的大量的数据,可以将这些数据商业化和商品化
爬虫的合法性:
- 爬虫在法律上是不被禁止的
- 但是其具有违法风险
- 善意爬虫——百度······ / 恶意爬虫······
爬虫带来的风险具体体现:
- 爬虫干扰了被访问网站正常运营
- 时长优化自己的程序,避免干扰被访问网站的正常运行
- 爬虫抓取了受到法律保护的特点类型的数据或信息
- 在使用时,传播爬取到的数据时,审查抓取到的内容,如果发现了涉及到用户信息、商业机密等敏感信息需要及时停止爬取或传播
1.2 爬虫分类
爬虫在使用场景中的分类
- 通用爬虫:
- 搜索引擎抓取系统重要组成部分,抓取的是一整张页面的数据
- 聚焦爬虫:
- 其是建立在通用爬虫的基础之上,其抓取的是页面中特定的局部内容
- 增量式爬虫:
- 检测网站中数据更新情况,只会抓取网站中最新更新出来的数据
1.3 爬虫中的矛与盾
1.3.1 反爬机制
门户网站通过指定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取
1.3.2 反反爬策略
爬虫程序通过指定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站数据
1.3.3 robots 协议
君子协议,规定了网站中哪些数据可以被爬虫爬取,哪些数据不可以被爬取
1.4 网络协议
1.4.1 http 协议
概念:
- 就是服务器和客户端进行数据交互的一种形式
常用请求头信息:
- User-Agent:当前请求载体的身份标识
- Connection:请求完毕后,是断开连接还是保持连接
常用响应头信息:
- Content-Type:服务器响应会客户端的数据类型
1.4.2 https 协议
概念:
- 安全的超文本传输协议,传输过程中进行了数据的加密
加密方式:
- 对称密钥加密
- 非对称密钥加密
- 证书密钥加密
二、 requests 模块
1、 简介
发送网络请求的模块
- urllib 模块
- requests 模块
requests 模块:
- python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高
- 作用:
- 模拟浏览器发送请求
使用方法:
- 指定 url
- 发起请求
- post 请求(携带参数)
- 获取响应数据
- 持久化存储
环境安装:
pip insatll requests
2、 案例
需求保存百度首页页面源代码
import requests
# 1、 指定 url
url = "http://www.baidu.com"
headers = {
"Accept": "text/plain, */*; q=0.01",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
'User-Agent': "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 96.0.4664 .93 Safari / 537.36",
}
# 2、 发起请求,获取响应数据
resp = requests.get(url=url, headers=headers).text # text 返回字符串形式的响应数据
# 3、 持久化存储
whit open("./baidu.html", w, encoding="utf-8") as f:
f.write(resp)
print("爬取完成")
3、 UA 伪装
UA :User-Agent
门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为浏览器,则为正常用户;反之,如果请求的载体身份标识不是基于浏览器的,则为不正常请求(爬虫),服务器端很有可能会拒绝访问
3.1 随机生成 UA
使用 fake_useragent
库
安装:pip install fake_useragent
语法:
from fake_useragent import UserAgent as ua
headers = {
"User-Agent": ua().random,
}
3.2 headers 格式化
格式化headers 方法:
- pycharm 使用快捷键ctrl+R,调出替换框
- 将源表达式设置为
(.*?): (.*?)$
- 替换表达式设置为
"$1": "$2",
- 将源表达式设置为
三、 网页解析
数据解析原理:
解析的局部文本内容都会在标签之间或者标签对应的属性进行存储
- 进行指定标签的定位
- 标签或者标签对应的属性中存储的数据值进行提取(解析)
1、 正则解析
2、 bs 解析
3、 xpath 解析
4、 PyQuery 解析
四、 数据分析
将我们通过爬虫的到的数据进行数据的持久化存储以及数据的可视化分析