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

相关文章

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro