3--简单的几种反爬方式

2024-03-27 04:30
文章标签 简单 方式 几种 反爬

本文主要是介绍3--简单的几种反爬方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、user-Agent: 请求载体的身份标识
2、Referer: 防盗链(这次的请求是从哪个页面来的?)
3、Cookie: 本地字符串数据信息(用户登录信息,反爬的token)

一、处理cookie

# session可以认为是一连串的请求,在这个过程中cookie不会丢
# 会话
session = requests.session()

1、17k小说网模拟用户登录

数据没有在源代码中,需要js加载

爬取网站 https://user.17k.com/www/bookshelf/

  1. 登录 -> 得到cookie
  2. 带着cookie 去请求到书架url -> 书架上的内容
  3. 必须把上面的内容连接起来
  4. 我们可以使用session进行请求 -> session可以认为是一连串的请求,在这个过程中的cookie不会丢失

在我们登录自己的账户后看到的内容
在这里插入图片描述

在这里插入图片描述
登录之后我们找到书架的书籍内容
在这里插入图片描述
在这里插入图片描述

import requests
# session可以认为是一连串的请求,在这个过程中cookie不会丢
# 会话
session = requests.session()
data = {"loginName": "你的账户",  #你的账户"password": "你的密码"	#你的密码
}#1、登录
url = "https://passport.17k.com/ck/user/login"
# resp = session.post(url, data=data)
session.post(url, data=data)
# print(resp.text)
# print(resp.cookies)#2、拿书架上的数据
resp = session.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919')
# print(resp.text)
print(resp.json())

在这里插入图片描述

二、防盗链Referer的处理

1、梨视频网站视频的下载

爬取网站 https://www.pearvideo.com/

在这里插入图片描述
这里的视频地址是可以打开播放的,但是下面的地址是不可以的

提取的视频地址是可以播放的https://video.pearvideo.com/mp4/short/20220209/cont-1681528-15824270-hd.mp4
但是这里的视频地址确实不可以播放的https://video.pearvideo.com/mp4/short/20220209/1644561324854-15824270-hd.mp4

在这里插入图片描述
通过比较发现是cont-1681528和1644561324854不一致导致的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
获取地址

resp = requests.get(videoStatusURL, headers=headers)
print(resp.json())
结果为{'resultCode': '1', 'resultMsg': 'success', 'reqId': '6b3d219b-c84a-4c4b-90bb-708fa603cc65', 'systemTime': '1645193588353', 'videoInfo': {'playSta': '1', 'video_image': 'https://image.pearvideo.com/cont/20220209/cont-1681528-12647637.png', 'videos': {'hdUrl': '', 'hdflvUrl': '', 'sdUrl': '', 'sdflvUrl': '', 'srcUrl': 'https://video.pearvideo.com/mp4/short/20220209/1645193588353-15824270-hd.mp4'}}}srcUrl = dic['videoInfo']['videos']['srcUrl']  #拿取到videoInfo中的videos里面的地址srcUrl
print(srcUrl)
结果如下:https://video.pearvideo.com/mp4/short/20220209/1645193588353-15824270-hd.mp4

得到正确视频下载地址

systemTime = dic['systemTime']  #拿取到systemTime的值,值是1645192834127,要把这个值是1645192834127替换为cont-1681528
srcUrl = srcUrl.replace(systemTime, f"cont-{contID}")

全部代码

#1、拿到contID
#2、拿到videoStatus返回的json. -> srcURL
#3、srcURL 里面的内容进行修整
#4、下载视频import requests
url = "https://www.pearvideo.com/video_1681528"
contID = url.split("_")[1]
# print(contID)#要把这个地址里面的内容进行修改
videoStatusURL = f"https://www.pearvideo.com/videoStatus.jsp?contId={contID}&mrd=0.29587422804361174"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3878.400 QQBrowser/10.8.4518.400",# 防盗链"Referer": "https://www.pearvideo.com/video_1681528"
}
resp = requests.get(videoStatusURL, headers=headers)
# print(resp.json())
# resp.json()['videoInfo']['videos']['srcUrl']
dic = resp.json()
srcUrl = dic['videoInfo']['videos']['srcUrl']
# print(srcUrl)
systemTime = dic['systemTime']
srcUrl = srcUrl.replace(systemTime, f"cont-{contID}")
# print(srcUrl)#下载视频
with open("a.mp4", mode="wb") as f:f.write(requests.get(srcUrl).content)

三、IP代理

import requestsurl = "https://www.baidu.com"
#代理ip
proxies = {"https://": "https://211.136.128.154:53281"
}resp = requests.get(url, proxies=proxies)
resp.encoding = "utf-8"
print(resp.text)

这篇关于3--简单的几种反爬方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/850939

相关文章

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能