python爬虫之JS逆向——requests模块

目录

一、编码与解码

 1 python的编码和解码

 2 文件操作

二、requests模块

 1 requests支持的方法

2 get请求

3 反爬

  UA反爬

  Referer反爬

  Cookie反爬 

  代理IP反爬

   雪球网数据抓取

4 session对象

5 图片和视频爬取

图片爬取

视频爬取


一、编码与解码

主要用于对视频的爬取,加载到本地的视频不需要解码

 1 python的编码和解码

编码:str.encode("编码方式")

解码:byte.decode("解码方式")

代码演示:

s = "i am 依彡"# 编码方法
ret1 = s.encode("utf-8")
ret2 = s.encode("GBK")
ret3 = s.encode()  # 不写规则,默认为utf-8# 解码方法,字节数据对象.decode("规则")
print(ret1.decode("utf-8"))
print(ret2.decode("GBK"))
print(ret3.decode())  # 不写规则,默认为utf-8

 2 文件操作

文件操作本质上也是编码与解码

with操作文件可以自动打开关闭文件

文件操作的四种方式:

读:r

写:w

读字节:rb

写字节:wb

代码演示:

# 写文件——编码
with open("第一阶段-爬虫\\JS逆向\\4-编码与requests模块\\编码\\my.txt",mode="w",encoding="utf8",
) as f:f.write("我爱兰州")# 读文件——解码
with open("第一阶段-爬虫\\JS逆向\\4-编码与requests模块\\编码\\my.txt",mode="r",encoding="utf8",
) as f:print(f.read())# 读字节
with open("第一阶段-爬虫\\JS逆向\\4-编码与requests模块\\编码\\my.txt", mode="rb") as f:print(f.read().decode())# 写字节
with open("第一阶段-爬虫\\JS逆向\\4-编码与requests模块\\编码\\my.txt", mode="wb") as f:f.write("我爱甘肃".encode())

二、requests模块

requests模块是Python中首选的HTTP请求库,易用性很强,可以完成各种类型的HTTP请求。

安装:pip install requests

 1 requests支持的方法

requests模块支持的请求

请求作用
get发送一个GET请求,用于请求页面信息
post发送一个POST请求,通过body向指定资源提交用户数据
put发送一个PUT请求,向指定资源上传最新内容
delete发送一个DELETE请求,向指定资源发送一个删除请求
head发送一个HEAD请求,类似GET请求,但只请求页面响应头信息
options发送一个OPTIONS请求,用于检查服务端相关信息

使用方法:requests.get("url",..请求) 获得一个Response对象,可以从里面提取需要的内容 response.status_code 状态码

response.headers 响应头

response.text 响应体

response.json response.encoding 推荐编码

response.content 字节数据 

2 get请求

requests的请求参数:

headers:模拟请求头的信息,字典{"User-Agent":"", "Referer":""}

params:查询参数,ajax请求等一些情况会使用,链接在'?'后携带参数就使用params
优点:更加规范,便于维护

data:用作post请求,里面存放请求体数据

3 反爬

UA、Referer和Cookie三者都是headers的参数

  UA反爬

UA反爬:看发送请求的客户端是否有User-Agent头

  Referer反爬

Referer反爬:模拟来源使其更像正常访问,比如直接输入链接进入和从搜索跳转进入不一样

  Cookie反爬 

Cookie反爬:模拟登录获取动态cookie,携带cookie爬取数据 cookie参数可以写在headers中,也可以直接写在请求(get/post)中。

res = requests.post(data={}):.post方法使用data参数传入用户名密码

res.cookie获取响应cookie,使用dict()强转为字典 再将cookie传入requests.get()的cookie爬取数据

  代理IP反爬

代理IP反爬:爬虫频率过高可能被服务器拉入黑名单,禁IP

.get中的proxies={"协议": "ip"}参数,可以购买ip池使用

可以对httpbin.org/(get)发送(get)请求查看自己的请求信息,也可以post、ip,可以用来测试代理ip

   雪球网数据抓取

import requestsurl = "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,SH000688,SH000016,SH000300,BJ899050,HKHSI,HKHSCEI,HKHSTECH,.DJI,.IXIC,.INX"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0","Referer": "https://xueqiu.com/","cookie": "xq_a_token=c2aefa380b9072a563e961143570e259329d659f; xqat=c2aefa380b9072a563e961143570e259329d659f; xq_r_token=2823a23fcab28b5723fbd7c5220a4ba4cc755a52; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcxODg0NDcxMiwiY3RtIjoxNzE3NTA5ODQ0NTMwLCJjaWQiOiJkOWQwbjRBWnVwIn0.RWM2X-UAH7S595-rOPPhmdLGMfTslJtHmFzs3MevL6IFmR99BEcG5aHNbC-X-XzKashbkRizAa51zNK4Eqva-EfsRr4KOx8dn-oKPS_VqEgqBlYYBDGbsjPNNz3uVIpPQH_QWXkz9Dsup8XaMloskNle6v2J6FS69Hhciq3QLZ58grLXOE4q2EH000bNRU7-0IJ7XQ9iAAe80-acUI-EAAThQXTZqupwz5gZ1SZCD2-WiqloH8Y2L6H1ACI8hZQpBOYVOqIp_097DKczrYXJfgm9Aq1Ktrs0gP3etvLYnKfgcxFfN_i1CtK6WjyfD10Ho108G1dfnZXkf9aiPDupsg; cookiesu=411717509851884; u=411717509851884; device_id=d5e0c443eea36ebfa394fe87f641040e; Hm_lvt_1db88642e346389874251b5a1eded6e3=1717509858; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1717509858"
}res = requests.get(url, headers=headers)
print(res.text)

4 session对象

session对应session方法,用于维护cookie,尤其是cookie是可变的

session = requests.session()

之后可以使用session对象替换requests对象

session.get()/session.post()

5 图片和视频爬取

图片和视频爬取不需要解码,使用wb直接保存

图片爬取

import requestsres = requests.get("https://tse3-mm.cn.bing.net/th/id/OIP-C.GC_ugX-TzPVR26SSxI1kZwHaE9?rs=1&pid=ImgDetMain")with open("第一阶段-爬虫/JS逆向/4-编码与requests模块/requests/图片.jpg", mode="wb") as f:f.write(res.content)

视频爬取

import requestsres = requests.get("https://v6.huanqiucdn.cn/4394989evodtranscq1500012236/f837acc11253642697943075111/v.f100830.mp4")with open("第一阶段-爬虫/JS逆向/4-编码与requests模块/requests/视频.mp4", mode="wb") as f:f.write(res.content)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cve_2022_0543-redis沙盒漏洞复现 vulfocus

1. 原理 该漏洞的存在是因为Debian/Ubuntu中的Lua库是作为动态库提供的。自动填充了一个package变量,该变量又允许访问任意 Lua 功能。 2.复现 我们可以尝试payload: eval local io_l package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so…

DeepSpeed MoE

MoE概念 模型参数增加很多;计算量没有增加(gating小FNN,比以前的大FNN计算量要小);收敛速度变快; 效果:PR-MoE > 普通MoE > DenseTransformer MoE模型,可视为Sparse Model&…

Qt之QAbstractSocketEngine

简介 QAbstractSocketEngine是网络中的基础,QTcpSocket和QTcpServer底层都依赖socket引擎 结构 #mermaid-svg-LrJAouZrtX0AxaPo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LrJAouZrtX0AxaPo .erro…

表的设计与查询

目录 一、表的设计 1.第一范式(一对一) 定义: 示例: 2.第二范式(一对多) 定义: 要求: 示例: 3.第三范式(多对多) 定义: 要求…

python类元编程示例-使用类型注解来检查转换属性值的类框架

用三种方式实现使用类型注解来检查转换属性值的类框架 1 __init_subclass__方式 1.1 代码实现 from collections.abc import Callable # <1> from typing import Any, NoReturn, get_type_hints from typing import Dict, Typeclass Field:def __init__(self, name: …

**《Linux/Unix系统编程手册》读书笔记24章**

D 24章 进程的创建 425 24.1 fork()、exit()、wait()以及execve()的简介 425 . 系统调用fork()允许父进程创建子进程 . 库函数exit(status)终止进程&#xff0c;将进程占用的所有资源归还内核&#xff0c;交其进行再次分配。库函数exit()位于系统调用_exit()之上。在调用fo…

ffmpeg常见命令

一、ffmpeg的安装 ffmpeg的安装 一、ffmpeg常用命令 二、ffprobe

排课系统1

参考:https://gitee.com/lequal/CourseArrange 软件技术栈 当然,我会逐一解释这些技术栈的含义:### 前端技术栈1. **Vue2.x**:- Vue.js 是一个流行的前端 JavaScript 框架,用于构建用户界面和单页应用程序(SPA)。- 2.x 表示 Vue.js 的第二个主要版本,它提供了一套响应…

浅解Reids持久化

Reids持久化 RDB redis的存储方式&#xff1a; rdb文件都是二进制&#xff0c;很小&#xff0c;里面存的是数据 实现方式 redis-cli链接到redis服务端 使用save命令 注&#xff1a;不推荐 因为save命令是直接写到磁盘里面&#xff0c;速度特别慢&#xff0c;一般都是redis…

遗传算法笔记:基本工作流程

1 介绍 遗传算法有5个主要任务&#xff0c;直到找到最终的解决方案 2 举例 2.1 问题描述 比如我们有 5 个变量和约束&#xff0c;其中 X1、X2、X3、X4 和 X5 是非负整数且小于 10&#xff08;0、1、2、4、5、6、7、8、9&#xff09;我们希望找到 X1、X2、X3、X4 和 X5 的最…

go语言后端开发学习(三)——基于validator包实现接口校验

前言 在我们开发模块的时候,有一个问题是我们必须要去考虑的&#xff0c;它就是如何进行入参校验&#xff0c;在gin框架的博客中我就介绍过一些常见的参数校验&#xff0c;大家可以参考gin框架学习笔记(四) ——参数绑定与参数验证&#xff0c;而这个其实也不是能够完全应对我…

Android JobService启动系统源码分析

以下就JobService的执行流程,系统层实现进行详解 入口点在JobScheduler.scheduler 系统层JobScheduler是个抽象类,它的实现类是JobScheduler mBinder,一看就知道这里面肯定是跨进程了。它的服务端在JobSchedulerService里面,具体 为什么请看系统服务器启动流程相关文章,…

Python算法于强化学习库之rlax使用详解

概要 在强化学习领域,开发和测试各种算法需要使用高效的工具和库。rlax 是 Google 开发的一个专注于强化学习的库,旨在提供一组用于构建和测试强化学习算法的基础构件。rlax 基于 JAX,利用 JAX 的自动微分和加速计算功能,使得强化学习算法的实现更加高效和简洁。本文将详细…

如何判断 是否 需要 CSS 中的媒体查询

以下是一些常见的使用媒体查询的场景&#xff1a; 响应式布局&#xff1a;当设备的屏幕尺寸变化时&#xff0c;我们可以使用媒体查询来调整布局&#xff0c;以适应不同的屏幕尺寸。 设备特性适配&#xff1a;我们可以使用媒体查询来检测设备的特性&#xff0c;如设备方向、分辨…

带你学习Mybatis之DataSource数据源

DataSource数据源 所有的数据源组件都实现了javax.sql.DataSource接口&#xff0c;Mybatis实现了两个接口实现&#xff0c;分别为PooledDataSource和UnpooledDataSource&#xff0c;使用不同的DataSourceFactory接口实现创建不同类型的DataSource UnpooledDataSource 每次通过U…

代码随想录——数组

给定一个n个元素有序&#xff08;升序&#xff09;的整型数组nums和一个目标值target&#xff0c;写一个函数搜索nums中的target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回-1. //这个题说实话从逻辑上来看实在是太简单了&#xff0c;但是为什么每一次我写起来都感…

堡垒机的自动化运维,快速安全提升运维效率

随着信息技术的突飞猛进&#xff0c;企业对于IT系统的依赖程度日益加深&#xff0c;不仅希望可以提高运维效率&#xff0c;也希望能保障IT系统的安全。因此堡垒机与自动化运维技术的结合应运而生&#xff0c;堡垒机的自动化运维&#xff0c;快速安全提升运维效率。今天我们就来…

CTE-6作文

第一段 现象 引出原因 第二段 感受 举例 意义 危害 第三段 建议 展望

程序员怎么样找用户需求

需求&#xff0c;商业成功的启航点 今天&#xff0c;我想与大家探讨一个话题&#xff1a;作为一个程序员&#xff0c;我们应如何探索并把握商机&#xff1f; 通过生财&#xff0c;我们已经见识了多种赚钱的方式&#xff0c;但深入分析&#xff0c;任何项目的核心都逃不过一个…

MySQL中的一行记录是怎么存储的

MySQL数据存储位置 数据存储在磁盘上的文件中&#xff0c;由存储引擎实现。InnoDB是默认存储引擎&#xff0c;数据存放在/var/lib/mysql/目录下&#xff0c;每个数据库对应一个目录。 表空间文件结构 表空间由段&#xff08;segment&#xff09;、区&#xff08;extent&…