爬虫案例与Scrapy
昨日内容回顾
-
openpyxl
rows columns value max_row max_column -
爬去豆瓣电影数据
requests,bs,time模块运用 openpyxl写入表格 分页处理 -
xpath选择器
对HTML进行选择 正则 bs4 css xpath -
爬取b站的思路
该网站视频与音频是分开的,运用了js动态加载 # 对该类型网站需把视频音频分开下载后再合成 -
图片验证码
3种方式 python模块和集成化工具 第三方人工智障 手动人工智能
今日内容概要
- 知乎登录案例
- 红薯网小说案例
- 爬虫框架之Scrapy
- mongodb数据库(非关系型数据库)
今日内容详细
爬取知乎
1.知乎在PC端必须登录之后才可以访问,访问会直接进入登录界面
2.爬取数据选择用户名密码登录
通过networkpost请求(sign.in标签内的内容)
https://www.zhihu.com/api/v3/oauth/sign_in
3.研究请求体数据格式,为爬取数据模仿登录操作
通过network查看post请求的请求体数据格式
a8H0c79qkLnm2LF0z_pKg9H92Ltxg6O1XGO12rN0cT2tJvS8XLp1DhHKEMVVoBH0sTYhxU9qkLk12LF0z0pMebw1shoYi9omEqYhggHMcvOOsBOB8BF0g6S0gLOfkComBvCmevgqkLnm2Lf8PqxGQJe8ST2tSLY0MLY0c490Xq2tHhomGqoMUDgqkLPx6XtyYHY0Qeuyr8FXPhYq8LP924_BJwx9kCSMsBF0g7rqrXSfnC200BxqkTUqcXSp6TOqK7YyHguy6TNYcLtqBRYyFr90UgFm2LfB8CpGU9eBDqppkLn8zG3ZchL1iDpuJvS8EqYhggHMcvOOSTYh1HYq26U0c_2prXFqm_e0giCmU9VOgcO1KBF0g6HM-GVO2wxMEqYhgDCKevgVEwNMqBF0giU0gutpr0YBmXNqgq982TNXNqtqfXY8SQr8o8SYFq28EqYhHqeVebSYDrS8:
# 发现请求体数据是被加密处理
# 问题:意味着我们无法直接获取到构造出请求体数据
"""
1.我们不知道加密的算法是什么 也不知道是否加盐处理(对密码任意位置插入特定的字符串让,普通的加密规则固定,容易被破解
加盐:随机值,加密方式
)
2.我们也不知道参与加密的数据格式和数据数量
"""
4.我们点击登录按钮查看请求体发现是加密的数据
也就意味着在发送给服务端之前数据就已经被加密了
说明肯定是在客户端浏览器做了该加密操作
# 而在前端能够编写出类似于编程的语言只有js可以
我们只需要在浏览器上查找到该js代码即可破解请求体加密数据套路
5.查找加密相关的js代码
# 找不到page标签 sources-page-top-search in all files-search'encrypt'-debug卡标签查看数据内容
设计到加密一般都会使用一个关键字'encrypt'
也就意味着我们需要从很多文件中筛选出含有上述关键字的代码
将多个含有'encrypt'的数据存下观察
然后自己判断到底是哪个,会有很多含有'encrypt'的数据,只能熟能生巧
6.分析文件查找相应代码
client_id 用户id(固定值)
grant_type 验证方式(固定值)
timestamp 时间戳*1000,去尾
source (固定值)
signature 签名(js加密,变动)
username 用户名
password 密码
captcha 验证码
lang 验证码方式(固定值)
utm_source (固定值)
ref_source (固定值)other_https://www.zhihu.com/signin?next=%2F
7.针对signature加密需要再次去js文件中筛选出相应的代码
爬取红薯
https://www.hongshu.com/content/3052/3317-98805.html
1.该页面鼠标左键右键都无法正常使用
目的就是不想让你用鼠标左键选中拷贝,右键调出终端
针对终端:F12即可
针对拷贝:让浏览器禁止所有的js加载(可能有用可能无用)
2.研究小说内容是否是直接加载到页面上的
小说内容通过查看HTML文档发现存在缺失
而展示到页面上之后却完整了
3.还是需要查找相应的js文件
{code: 119, msg: "获取章节内容成功", key: "36716822"}
content是加密内容 非常可疑
other也是加密的内容 非常可疑
由于上述内容是通过发送post请求获取 所以我们查找请求体
method: getchpcontent
bid: 3052
jid: 3317
cid: 98805
4.服务端给的是加密的数据但是展示出来之后却又是明文,说明解析过程肯定发生在浏览器上,而能够完成解析的语言前端只有js可以
查找解密相关的js代码
# 解密相关一般都会出现关键字decrypt
5.从sources中查找含有关键字decrypt的js代码
找到了data和other相关的js代码
6.将最为关键的解析数据的代码拷贝到浏览器console界面执行
data.content = utf8to16(hs_decrypt(base64decode(data.content), key))
发现结果就是文章内容的一部分
7.将代码执行之后的结果拷贝到一个新建的html文件内让浏览器展示
将展示之后的结果拷贝再次放入html文件内
再次展示发现还是缺少文章内容
8.将other相关的代码拷贝到浏览器console执行
data.other = utf8to16(hs_decrypt(base64decode(data.other), key))
结果是一串js代码
9.我们应该怀疑该js代码就是用来加载缺失数据的部分
将上述js代码拷贝到一个js文件中
然后在展示一部分内容的html页面上引入该js文件
10.通过研究页面发现所有缺失的文字内容都在css代码中
通过自己书写js代码获取css文字
动态插入到页面上完成数据的补全操作
爬虫框架之Scrapy
框架
类似于提前已经帮你搭建好了基础的架构
你只需要往框架固定的地方填写固定的内容就可以实现相应的功能
下载
pip3 install scrapy
# 上述下载命令针对不同的操作系统可能会出现不同的情况
windows
如果直接下载成功了 那么忽略下面的操作
如果下载失败需要你额外完成很多步操作
参考文档:https://www.cnblogs.com/Dominic-Ji/p/9550525.html
1.pip3 install wheel
2.http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
下载对应的文件
3.pip3 install 文件名
获取下载的文件的存放路径,将文件拷贝至该路径下
4.pip3 install pywin32
5.pip3 install scrapy
# 如何验证是否下载成功
在命令行里面输入scrapy如果有相应的返回结果表示下载成功了
(环境变量一定要提前配置好python)
mac
可以直接下载成功
"""
在使用pip3下载模块的时候可能会出现的报错
1.报错信息里面含有readtimeout等关键字
原因是你当前网速不稳定,重新下载几次或者换宽带
2.报错信息里面最后提示pip version关键字
原因是你当前的pip版本过低,更新版本即可
更新的语句在报错的提示里面直接就有
3.报错信息里面一堆你根本看不懂的信息
原因是该模块可能需要一定的系统环境
或者模块版本有问题,或者系统兼容性问题
出现这一类情况直接将报错信息拷贝到百度中搜索即可
"""
基本使用
robots.txt
协议
# scrapy框架使用
-新建项目
-scrapy startproject 项目名字
-新建爬虫
-scrapy genspider 爬虫名 爬取的域名
-项目目录介绍
-spiders
-所有的爬虫程序
-items.py
-类似于django的model类
-middlewares.py
-中间件
-pipelines.py
-持久化相关(数据存储)
-settings.py
-配置文件(关注:爬虫协议)
-scrapy.cfg
-部署相关
-运行爬虫
-scrapy crawl cnblogs --nolog
-爬取数据
//*[@id="post_list"]/div[1]
作业
1.课上操作
2.爬虫课程总结

浙公网安备 33010602011771号