逆向爬虫07 requests进阶(反爬)

2023-11-13

逆向爬虫07 requests进阶(反爬)

1. 有些网站会在被访问时,检查客户端是否为浏览器,如果不是浏览器则拒绝访问。该问题可以通过在requests请求中,添加浏览器header参数,装成浏览器。

import requests

url = "http://www.baidu.com"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
}

resp = requests.get(url, headers=headers)
resp.encoding = "utf-8"
print(resp.text)

2. 有些网站需要用户保持登录状态才能使用网站提供的服务,浏览器中登录状态是通过cookie来保存的,此时需要使用requests中的session来保存cookie信息。

import requests

# 这个url是通过17k小说网登陆时抓包获取的
url = "https://passport.17k.com/ck/user/login"

data = {
    "loginName": "xxxxxxxxxx",
    "password": "xxxxxxxxxx"
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
}

session = requests.session()	# 使用session可以保存cookie信息
resp = session.post(url, data=data, headers=headers)
resp.encoding = "utf-8"
# print(resp.text)
print(resp.cookies)

# 这个url是通过17k小说网登陆后点击书架抓包获取的
url = "https://user.17k.com/ck/user/mine/readList?page=1&appKey=2406394919"
resp = session.get(url, headers=headers)
resp.encoding = "utf-8"
print(resp.json())

3. 有些网站的一些页面会进行溯源,它们会要求用户必须先访问页面A,再访问页面B,此时如果直接访问页面B的url,服务器会进行反爬,需要在requests中加入referer参数,来解决该问题。

"""
梨视频爬取完全是通过浏览器抓包,观察规律实现的。
	1. 先通过查看浏览器F12页面元素,找到视频的url链接。
	2. 在页面源代码中并没有发现视频url链接,因此确定url是动态二次加载获得的。
	3. 通过抓包发现梨视频对视频url进行了简单的字符串替换处理。
	4. 当所有的url都正确处理后,发现仍然访问不了页面,原因是增加了防盗链反爬措施,在requests中增加referer参数即可。
"""
import requests

url = "https://www.pearvideo.com/video_1749125"
contId = url.split("_")[1]
videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}&mrd=0.4386572049063646"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
    # 防盗链:溯源,当前本次请求的上一级是谁,通过浏览器F12看请求头找到的
    "Referer": f"https://www.pearvideo.com/video_{contId}"
}

# 简单的字符串替换,得到最终的视频url链接
resp = requests.get(videoStatusUrl, headers=headers)
dic = resp.json()
srcUrl = dic["videoInfo"]["videos"]["srcUrl"]
systemTime = dic["systemTime"]
srcUrl = srcUrl.replace(systemTime, f"cont-{contId}")

with open(f"{contId}.mp4", mode="wb") as f:
    f.write(requests.get(srcUrl).content)

4. 有些网站还会根据IP访问的频率来鉴别是否是爬虫,如果短时间内同一个IP访问的次数过多,会将该IP加入黑名单一段时间,禁止其访问。该反爬可以通过代理IP来解决,在requests中添加proxies参数。

import requests

url = "https://www.baidu.com"

# 从快代理上找来的,"https://www.kuaidaili.com/free/intr/"
proxy = {
    "http": "http://211.136.128.154:53281",
    "https": "https://211.136.128.154:53281"
}

resp = requests.get(url, proxies=proxy)
resp.encoding = "utf-8"
print(resp.text)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逆向爬虫07 requests进阶(反爬) 的相关文章

  • Python 中的字节数组

    如何在 Python 中表示字节数组 如 Java 中的 byte 我需要用 gevent 通过网络发送它 byte key 0x13 0x00 0x00 0x00 0x08 0x00 在Python 3中 我们使用bytes对象 也称为s
  • 切片稀疏(scipy)矩阵

    我将不胜感激任何帮助 以理解从 scipy sparse 包中切片 lil matrix A 时的以下行为 实际上 我想根据行和列的任意索引列表提取子矩阵 当我使用这两行代码时 x1 A list 1 x2 x1 list 2 一切都很好
  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • Python有条件求解时滞微分方程

    我在用dde23 of pydelay包来求解延迟微分方程 我的问题 如何有条件地编写方程 例如目标方程有两个选项 when x gt 1 dx dt 0 25 x t tau 1 0 pow x t tau 10 0 0 1 x othe
  • Python 2.7 将比特币私钥转换为 WIF 私钥

    作为一名编码新手 我刚刚完成了教程 教程是这样的 https www youtube com watch v tX XokHf nI https www youtube com watch v tX XokHf nI 我想用 1 个易于阅读
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • 使用 Django Rest 保存 Base64ImageField 类型会将其保存为原始图像。如何将其转换为普通图像

    我的模型中有 5 个图像字段 imageS imageS imageS imageS 和 imageE 我正在尝试按以下方式保存图像 图像的类型Base64ImageField images imageA imageB imageC ima
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • 为什么我无法在 Mac OS X Terminal.app 上的 Python 解释器中显示 unicode 字符?

    如果我尝试粘贴 unicode 字符 例如中间的点 在我的 python 解释器中它什么也不做 我在 Mac OS X 上使用 Terminal app 当我只是在 bash 中时 我没有遇到任何问题 但在解释器中 python Pytho
  • `list()` 被认为是一个函数吗?

    list显然是内置类型 https docs python org 3 library stdtypes html list在Python中 我看到底下有一条评论this https stackoverflow com a 53645813
  • 与 while 循环一样,如何跳过 for 循环中的步骤?

    我尝试像 while 循环一样跳过 for 循环中的几个步骤 在 while 循环中 步骤根据特定条件进行调整 如下面的代码所示 i 0 while i lt 10 if i 3 i 5 else print i i i 1 result
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 解析根元素内元素之间的 XML 文本

    我正在尝试用 Python 解析 XML 以下是 XML 结构的示例 a aaaa1 b bbbb b aaaa2 a
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 如何用sql语句创建一个表(简单基础)

    使用CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表 SQL CREATE TABLE 语法 CREATE TABLE 表名称 列名称1 数据类型 列名称2 数据类型 列名称3 数据类型 例题 创建一个ac
  • SPDK详解

    一 SPDK简介及基本使用 随着硬盘 闪存技术的高速发展 NVME ssd已逐渐进入分布式存储的核心领域 伴随着NVME ssd的出现 涌现出一批新型的存储名词 包括分层存储 分级存储 冷热存储 混合存储等 而这些名词的出现 也意味着ssd
  • sql 求分位数

    1 oracle求分位数 SELECT RES3 ORG NO 5 RES3 YM X1的上四分位数 PERCENTILE CONT 0 75 WITHIN GROUP ORDER BY RES3 X1 ASC AS X1 75 X1的上中
  • IntelliJ IDEA 常用快捷键,maven依赖图,个性化设置,禁用Search Everywhere

    查看idea 中jar关系图 快捷键 Ctrl 用于注释 取消注释 Ctrl Shift F 全文搜索 Ctrl F 单页面查找 Ctrl Alt Shift L 格式化代码 CTRL N 查找类CTRL SHIFT N 查找文件CTRL
  • 理解 spring 事务传播行为与数据隔离级别

    本文是为了个人学习使用 原文章链接 https www jianshu com p 760399781b78 https blog csdn net m0 37524661 article details 84935117 注 1 事务的隔
  • vite和webpack的区别

    vite和webpack的区别 1 前言 2 Webpack 2 1 Webpack简述 2 2 Webpack常用插件 3 Vite 3 1 Vite简述 3 2 Vite插件推荐 4 区别 4 1 开发模式不同 4 2 打包效率不同 4
  • 管理中计算机系统的应用论文,浅谈计算机数据库的管理与应用论文

    浅谈计算机数据库的管理与应用论文 摘要 随着社会经济的快速发展 信息化网络技术手段不断进步 信息技术在人们日常生活 工作及学习中的广泛渗透 不仅给人们生活带来了极大便利 还极大的提升了人们工作与学习效率 为社会各领域的发展起到了巨大的推动作
  • 类属性和实例属性名字冲突怎么办

    修改类属性会导致所有实例访问到的类属性全部都受影响 但是 如果在实例变量上修改类属性会发生什么问题呢 class Person object address Earth def init self name self name name p
  • 数据仓库工程师面经(未完)

    HIVE Hive row number dense rank rank三个函数的区别 Hive 窗口函数如何设置窗口大小 Hive order by sort by distribute by cluster by 区别 Hive map
  • 《Java Web开发框架——MyEclipse的安装、配置》

    Java Web程序设计 MyEclipse的安装 配置 具体安装 配置过程请参考下面的博客 MyEclipse安装 配置 测试 博客园 原博客中所需文件均存放于百度网盘中 如下载速度较慢 可使用下面的云盘进行下载 天翼云盘 不限速 访问码
  • HR:“最喜欢阿里出来的程序员了,技术又好又耐艹!” 我:???

    面试造火箭 进厂拧螺丝 真的是这样吗 缘起 估计不少同学都是被标题吸引进来的 事先声明 这句话不是我虚构的 而是我实实在在从同事的口中听到的 而且还不止一次 当时的场景就是很正常的交谈 别人也并没有故意尖酸刻薄的成分 完全就是正常的谈天的口
  • 三种常见的文件共享服务--ftp,nfs,samba

    FTP File Transfer Protocol 文件传输协议 是一种应用层协议 可以实现很好的实现跨平台 但是无法实现一些其他的功能 像如文件系统挂载等功能 NFS Network File System 网路文件系统 是工作在内核模
  • codisQ&A

    Codis 是什么 Codis 是 Wandoujia Infrastructure Team 开发的一个分布式 Redis 服务 用户可以看成是一个无限内存的 Redis 服务 有动态扩 缩容的能力 对偏存储型的业务更实用 如果你需要 S
  • git中将某一分支代码完全覆盖另一分支

    如果需要将分支1的代码覆盖到分支2上 只需要如下操作 1 切换到分支2 git checkout 分支2 2 设置代码给远程的分支1 git reset hard origin 分支1 3 本地已覆盖 推送到远程分支上 git push f
  • 【Github】查看项目时可以清晰明了的看到项目的结构以及具体代码

    效果如下 Octotree通过左侧面板中的目录轻松浏览仓库的源代码 如下图 Octotree安装步骤 1 下载octotree 路径 https dl pconline com cn download 2561546 html 如果下载不成
  • 7-11 计算天数 (15 分)

    本题要求编写程序计算某年某月某日是该年中的第几天 输入格式 输入在一行中按照格式 yyyy mm dd 即 年 月 日 给出日期 注意 闰年的判别条件是该年年份能被4整除但不能被100整除 或者能被400整除 闰年的2月有29天 输出格式
  • 解决brew卡在Updating Homebrew...的正确姿势

    Updating的终端不要关 新开一个标签页 直接输入后续命令即可
  • Android 页面倒计时跳转 微博启动页为例

    首先创建项目 然后在右键再创一个empty avtivity xml布局中的图片自己去找然后复制进去 可复制进drawable中
  • 00 数组基础知识

    1 数组的存储方式 数组是存放在连续内存空间上的相同类型数据的集合 数组可以方便的通过下表索引的方式获取到下表下对应的数据 注意 数组的下标都是从0开始的 数组内存空间的地址是连续的 数组中存放的数据类型相同 正是因为数组的在内存空间的地址
  • 逆向爬虫07 requests进阶(反爬)

    逆向爬虫07 requests进阶 反爬 1 有些网站会在被访问时 检查客户端是否为浏览器 如果不是浏览器则拒绝访问 该问题可以通过在requests请求中 添加浏览器header参数 装成浏览器 import requests url h