爬虫案例与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.爬虫课程总结
posted @ 2021-01-25 12:01  KaiLun  阅读(163)  评论(0)    收藏  举报