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 requests

url = "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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值