昨日内容回顾
-
爬取商品数据并保存
selenium模块 bs4模块 openpyxl模块
-
爬取电影排行并保存
requests模块 bs4模块 openpyxl模块 # 针对电影详情数据有两种获取方式 1.直接处理简介内容 2.二次爬取更深层次的网页 '''豆瓣是有检测IP访问频率的机制''' ps:我们平时在编写代码的时候可以创建一个tests.py文件用于测试相当于我们写数学题目的草稿纸
-
爬取贴吧图片并保存
requests模块 lxml模块 文件操作 '''有检测IP访问频率的机制''' # 多次url抓取的操作思路 ps:图片数据的保存其实就是发送get请求获取数据即可
今日内容概要
- 验证码破解思路
- 知乎登录防爬措施
- b站视频数据爬取
- 红薯网小说数据爬取
- 爬虫框架之Scrapy(了解概念)
今日内容详细
验证码破解思路
1.图片验证码
方式1:图形识别
软件:Tesseract-ocr
模块:pytesseract
# 该方式需要书写一定量的代码 并且图片模糊的情况下不好用
方式2:第三方平台服务
先用代码识别处理
不行则改为人工处理
# 省时省力不省钱
方式3:自己人工智能
当程序启动起来之后自己肉眼观察验证码
2.滑动验证码
方式1:代码破解(一般不推荐)
难度较大 编写困难 selenium模块
方式2:第三方平台
方式2:人工智能滑动
自己滑动一下
'''通过代码破解的时候滑动的速度不能太快'''
ps:内部有检测速度的机制 太快了都会被判定为是程序
b站视频数据
"""
b站视频数据分为两种情况
第一种情况
视频和音频是分开存放的
第二种情况
音频视频一起存放
"""
1.地址栏输入视频地址
2.打开network研究数据来源的接口地址
3.请求接口地址获取json格式数据
4.解析json格式数据请求视频数据和音频数据
# 有很多网站关键性的数据需要我们不厌其烦的查找才可以获得
知乎登录防爬
知乎pc端需要登录之后才可以访问主页
https://www.zhihu.com/ # 重定向到登录界面
知乎用户名密码登录之前使用的是图片验证码最近才改为滑动验证码
我们研究图片验证码
"""稍微复杂一点的网站在爬取的时候都需要借助于浏览器的network检测"""
1.知乎登录验证码有三类
1.英文字母+数字
show_captcha = True
?lang=en
2.中文汉字
show_captcha = True
?lang=cn
3.直接没有跳过
show_captcha = false
2.朝登录接口发送的数据全部都是加密的
导致我们无法跳过代码构造数据发送 需要先破解加密的数据格式
# 前端三剑客之后js可以书写逻辑代码
3.查找加密相关的js代码
跟加密相关的关键字是encrypt
"client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password×tamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=%2B8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https%3A%2F%2Fwww.zhihu.com%2Fsignin%3Fnext%3D%252F"
client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password×tamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=+8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https://www.zhihu.com/signin?next=%2F
'''如何判断一个字符串是否是加密的密文 无规律的数字字母组合一般都是'''
4.查找相应的加密算法代码
sha1 hmac base64 加盐处理
红薯网小数数据
"""一段数据被加密说明对方不想让你看到内部真实数据 说明该数据肯定很关键"""
1.该网页禁用了鼠标右键
方式1:通过键盘的F12
方式2:浏览器设置禁用js代码运行(不推荐)
2.页面数据并不是在响应体中就有
该数据是通过js等代码动态渲染的
3.通过network查找相应的js文件
点击XHR筛选出用于交互的请求
method: getchpcontent
bid: 3052
jid: 3317
cid: 98805
other:加密字符串
content:加密字符串
4.服务端给浏览器返回了加密的数据 浏览器却能够展示出明文
说明浏览器内部肯定有解析加密数据的代码
解密一般关键字都是decrypt
文章主题内容解析代码
utf8to16(hs_decrypt(base64decode(data.content), key))
5.但是还缺少相应的文字
上述代码仅仅解析了content 还有一个other没有解析
utf8to16(hs_decrypt(base64decode(data.other), key))
解析出来之后是一段js代码 这段js代码应该就是解析剩余文字的关键
6.动态渲染的文字无法用鼠标选中 还需要js注入
分布式爬虫框架下载
Scrapy框架
下载
pip3 install scrapy
'''windows系统在下载该框架的时候可能会报错'''
# 如果报错需要按照以下策略解决
1.pip3 install wheel
2.下载.whl文件
https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
3.将上述文件存放到C:\Users\用户名 文件夹下
如果你不知道该地址 可以通过报错查看
pip3 install xxx.whl # 提示你
4.pip3 install pywin32
5.pip3 install scrapy
# 如何验证是否下载成功
cmd窗口内输入scrapy即可
基本使用
"""什么是框架?"""
框架类似于房屋的钢筋结构
使用框架就相当于往已经创建好的文件中填写代码即可
使用框架的好处就在于节省创建环境的时间
-新建项目
-scrapy startproject 项目名字
-新建爬虫
-scrapy genspider 爬虫名 爬取的域名
-项目目录介绍
-spiders
-所有的爬虫程序
-items.py
-类似于django的model类
-middlewares.py
-中间件
-pipelines.py
-持久化相关(数据存储)
-settings.py
-配置文件(关注:爬虫协议)
-scrapy.cfg
-部署相关
-运行爬虫
-scrapy crawl cnblogs --nolog
爬虫协议
网站的设计者在设计好网站之后会写一个协议robots.txt
该文件明确规定了网站哪些数据可以爬取哪些数据不能爬取
编写爬虫的工程师如果爬取了协议内规定不能爬的内容那么就触发了法律
网站的设计者可以起诉你!!!
我们的scrapy框架默认都是遵循该协议的
但是在编写爬虫的时候需要将配置注释掉 不能遵循该协议
优先级
深度优先
一路走到黑再考虑分拆
广度优先
先整体来一遍再慢慢深入
ps:还可以自定义优先级
作业
1.整理本周所有内容
2.针对所有的爬虫案例全部自己动手写一遍
并将爬取到的数据全部考虑存储到excel中
图片视频除外