4.1request进阶-初识反爬

文章介绍了如何使用Python的request模块的session功能来模拟浏览器登录并保持会话状态,从而解决cookie连续性问题。通过session对象,可以在多次请求间保存cookie,便于爬取需要登录后才能访问的内容,例如小说网站的个人书架。同时,示例还展示了如何抓取梨视频的视频内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.模拟浏览器登陆

  1. 登录
  2. 得到cookie 值
  3. 带着cookie 去请求目标的 url
  4. 获取所需的内容

上述操作必须连贯起来,即获取到的cookie 信息必须在本次请求中去使用

💎💎💎在使用request模块的中的 get 或者 post 请求时。每次请求都视为一个新的请求,所以并不能满足上述的连贯,而 cookie 值在每次请求时都会随机生成,所以在通过一次请求得到的 cookie 值,并不能作为下一次请求的 cookie 参数使用。 💎💎💎

session 会话对象

session = request.session()

为解决上述问题,可以使用 session 会话对象,通过该对象,可以使请求都在一次访问中,既可以达到上述的连贯要求。

作用

  1. 可以进行请求发送
  2. 如果请求过程中产生了cookie ,则该cookie 值会自动存储,并将值携带在该 session 对象中。

2.需求:对小说网站个人书架内容进行爬取

import requests

if __name__ == '__main__':

    session = requests.session()
    url = "https://passport.17k.com/ck/user/login"

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
    }
    data ={
        "loginName":"**********",
        "password":"**********"
    }
    session.post(url=url,data=data)
    resp = session.get("https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919")
    print(resp.json())

再对登录请求进行抓包时,请求包中并未出现目标的 url 通过分析,是没有打开 “保留日志”,可以通过打开这个开关,保留请求过程中的登录页面的 url 如下图所示:

image-20230128193843897

梨视频爬取

import requests
import os
if not os.path.exists("梨视频"):
    os.mkdir("梨视频")
contId = "https://pearvideo.com/video_1777816".split("_")[1]
url = "https://pearvideo.com/videoStatus.jsp?contId=1777816&mrd=0.6281112342338115"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
    "Referer": "https://pearvideo.com/video_1777816"
}
resp = requests.get(url=url,headers=headers)
systemtime = resp.json()['systemTime']
src_url= resp.json()['videoInfo']['videos']["srcUrl"]
src_url = src_url.replace(systemtime,f"cont-{contId}")
print(resp.json()['systemTime'])
print(resp.json()['videoInfo']['videos']["srcUrl"])
print(src_url)
resp2 = requests.get(url=src_url,headers=headers)
with open("梨视频/"+contId+".mp4","wb") as fp:
    fp.write(resp2.content)

resp.close()
resp2.close()



wb") as fp:
fp.write(resp2.content)

resp.close()
resp2.close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值