【JS逆向基础】爬虫核心模块:request模块与包的概念

前言:这篇文章主要介绍JS逆向爬虫中最常用的request模块,然后引出一系列的模块的概念,当然Python中其他比较常用的还有很多模块,正是这些模块也可以称之为库的东西构成了Python强大的生态,使其几乎可以实现任何功能。下面就详细介绍一下这些内容。


1,requests模块

requests 作为一个专门为「人类」编写的 HTTP 请求库,其易用性很强,因此在推出之后就迅速成为 Python 中首选的 HTTP 请求库。requests 库的最大特点是提供了简单易用的 AP!,让编程人员可以轻松地提高效率。由于 requests 不是 Python 的标准

库,因此在使用之前需要进行安装:

pip install requests

python诵过 reauests 可以完成各种类型的 HTTP 请求,包括 HTTP、HTTPS、HTTP1.0、HTTP1.1 及各种请求方法

  • requests支持的方法

requests模块支持的请求:

import requests
requests.get("http://httpbin.org/get")
requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")requests.delete("http://httpbin.org/delete")requests.head("http://httpbin.org/get")
requests.options("http://httpbin.org/get")
  • "get--发送一个 GET 请求,用于请求页面信息。
  • "options--发送一个 OPTIONS 请求,用于检查服务器端相关信息,
  • head-一发送一个 HEAD 请求,类似于 GET 请求,但只请求页面的响应头信息。
  • post--发送一个 POST 请求,通过 body 向指定资源提交用户数据。
  • "put--发送一个 PUT 请求,向指定资源上传最新内容。
  • "patch-一发送一个 PATCH 请求,同 PUT 类似,可以用于部分内容更新。
import requests
res = requests.get("https://ww3.sinaimg.cn/mw690/7772612dgy1hsmrek7r0gj21z41z4k2h.jpg")
with open("风景.jpg","wb")as f:f.write(res.content)   #直接对内容进行爬取res1 = requests.get("https://video.pearvideo.com/mp4/short/20240917/cont-1796387-16037163-hd.mp4")
with open("视屏.mp4","wb")as f:f.write(res1.content)   #直接对内容进行爬取
  • requests的响应信息

print(respone.statuscodeprint(respone.headers)
print(respone.text)
print(response.json)2.编码
print(respone.content)
print(response.encoding)
  • UA反爬

请求头需要加上下面的标识

import requestsres1 = requests.get("https://www.baidu.com",headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
})with open("baidu.html","w",encoding='utf-8')as f:f.write(res1.text)
  • refererf反爬与requests请求参数

import requestsres1 = requests.get("https://m.douban.com/rexxar/api/v2/movie/recommend?",headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","Referer":"https://movie.douban.com/explore"
},params={"tags": "喜剧",
})# print(res1.text)
print(res1.json())
# print(type(res1.json()))items =res1.json()["recommend_categories"]
for i in items:print(i.get("data"))for j in i.get("data"):print(j.get("text"))
  • 请求体的数据

模拟有道翻译的小程序

import requestsindata = input("请输入:")
res1 = requests.post("https://aidemo.youdao.com/trans",headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","Referer":"https://ai.youdao.com/"
},params={},data={"q":indata,"from":"Auto","to":"Auto"
})
print(res1.text)
print(res1.json().get("translation"))
  • cookie反爬

cookie在用户登陆的时候生成一个,当用户再次用浏览器请求相同的信息数据的时候就会自带一个cookie值,cookie比对成功之后服务端会进行免登录,而爬虫程序就会需要带cookie才可以爬取数据成功

#(1)模拟登录,获取动态cookie
res1=requests.post("http://127.0.0.1:5000/auth", data={"yuan"user","pwd":"123"
}
#(2)响应cookie
print(dict(res1.cookies))#(3)再次登录发送cookie
res1 = requests.get("http://127.0.0.1:5000/auth",headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"},cookie=dict(res1.cookies))
print(res1.text)
  • session对象

#举例本地端口,此程序无法实际运行
import requests
session =requests.session()
session.post("http://127.0.0.1:5000/auth",data={"user": "yuan","pwd": "123",}
)
#(2)携带cookie爬取数据
res2 = session.get("http://127.0.0.1:5000/books")
  • 代理IP

代理IP:反反爬使用代理ip是非常必要的一种反反爬的方式,但是即使使用了代理ip,对方服务器任然会有很多的方式来检测我们是否是一个爬虫,比如:一段时间内,检测IP访问的频率,访问太多频繁会屏蔽;检查Cookie,User-Agent,Referer等header参数,若没有则屏蔽;服务方购买所有代理提供商,加入到反爬虫数据库里,若检测是代理则屏蔽等。所以更好的方式在使用代理ip的时候使用随机的方式进行选择使用,不要每次都用一个代理ip

2,模块与包

  • 模块初识

def add(x,y):return x + ydef subtract(x,y):return x - ydef multiply(x,y):return x * ydef divide(x,y):return x / y#==================================
#调用其他文件中的接口的方式1
import cal
import mul
x = 1
y = 120
z = cal.subtract(x,y)
q = mul.multiply(x,y)
print(z)# 方式2
from cal import subtract
from mul import multiply,divide  
from mul import *     #mul文件内的接口都可以用
x = 1
y = 120
z = subtract(x,y)
print(z)
  • 模块与包的导入本质

本质上面在一个启动文件中导入一个python程序包,需要在启动文件(一般名字是main)同级目录及其以下的文件夹目录下面的导入的包

如下程序所示:

from cal.cal import subtract
from cal.mul import multiply,divide
from cal.mul import *     #mul文件内的接口都可以用
x = 1
y = 120
z = subtract(x,y)
print(z)
  • 第三方包的导入与引用

1,注意之际命名的python文件包的名字不可以与已有标准库或者下载的第三方的包一样

2,通过from在启动文件中导入第三方包的时候,程序就已经将第三方文件中的程序加载执行了一遍了

import sys
# py程序文件导入报的路径都是通过下面加载的文件路径导入的
print("sys.path:::", sys.path)
  • 自定义的包文件的导入

import os
import sys
print("sys.path:::",sys.path)
path01 = os.path.dirname(__file__)
path02 = os.path.dirname(path01)
sys.path.insert(0,path02)
  • 常见OS模块的接口

import os
# 创建文件夹
# (1)
# os.mkdir("我的模块")
# 路径拼接
path = os.path.join("我的模块","my.txt")
print(path)
with open(path, "w", encoding="utf-8") as f:data = f.write("icwdgcbiwdbci")#(4)是否存在某文件或目录
print(os.path.exists("我的模块2"))#(5) 检查某一文件中的文件名与其路径名
path1 = ("/Users/yuan/PycharmProjects/my.txt")
print(os.path.basename(path1))
print(os.path.dirname(path1))
print(os.path.split(path1))

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

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

相关文章

极狐Gitlab 里程碑功能介绍

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 里程碑 (BASIC ALL) 极狐GitLab 中的里程碑是一种跟踪议题和合并请求的方法,这些请求是为了在特定时间段内实现更…

【日撸 Java 三百行】Day 10(综合任务 1)

目录 Day 10:综合任务 1 一、题目分析 1. 数据结构 2. 相关函数基本知识 二、模块介绍 1. 初始化与成绩矩阵的构建 2. 创建总成绩数组 3. 寻找成绩极值 三、代码与测试 小结 拓展:关于求极值的相关算法 Day 10:综合任务 1 Task&…

c++:库(Library)

目录 什么是库? C中库的两种形态:静态库 和 动态库 静态链接 vs 动态链接(链接 ≠ 库) 🔒 静态链接(Static Linking) 🔗 动态链接(Dynamic Linking) C标…

Java线程池深度解析:从使用到原理全面掌握

在高并发场景下,线程管理是提升系统性能的关键。本文将深入探讨Java线程池的核心机制,带你从基础使用到底层实现全面掌握这一重要技术。 一、线程池存在的意义 1.1 线程的隐形成本 尽管线程相比进程更轻量,但当QPS达到万级时: 频…

PostgreSQL 的 pg_advisory_lock_shared 函数

PostgreSQL 的 pg_advisory_lock_shared 函数详解 pg_advisory_lock_shared 是 PostgreSQL 提供的共享咨询锁函数,允许多个会话同时获取相同键值的共享锁,但排斥排他锁。 共享咨询锁 vs 排他咨询锁 锁类型共享锁 (pg_advisory_lock_shared)排他锁 (pg…

Halcon之计算抓取螺母的位姿

文章目录 1,项目说明。2,注意事项3,关联的主要算子3.1, gen_parallels_xld 3.2 ,convert_pose_type 4,程序流程。5,代码6,Demo链接。 1,项目说明。 Robot标定使用的模式…

互联网大厂Java求职面试:AI集成场景下的技术挑战与架构设计

标题:互联网大厂Java求职面试:AI集成场景下的技术挑战与架构设计 第一幕:向量数据库选型与性能调优 技术总监(严肃脸): 郑薪苦,我们最近在做一个基于大语言模型的企业级AI应用,需要…

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例 在现代工业自动化系统中,设备之间的互联互通至关重要。Profibus DP和Modbus TCP是两种常见的通信协议,分别应用于不同的场景。为了实现这两种协议的相互转换,Profibus …

智慧农业、智慧养殖平台—监控摄像头管理监控设计—仙盟创梦IDE

智慧养殖 监控摄像头是核心管理工具,主要通过以下方式提升养殖效率与管理水平: 环境实时监测:对养殖区域进行全天候可视化监控,及时捕捉温度、湿度、通风等环境要素变化,确保动物生存环境稳定 。例如在规模化猪场&…

YOLO 从入门到精通学习指南

一、引言 在计算机视觉领域,目标检测是一项至关重要的任务,其应用场景广泛,涵盖安防监控、自动驾驶、智能交通等众多领域。YOLO(You Only Look Once)作为目标检测领域的经典算法系列,以其高效、快速的特点受到了广泛的关注和应用。本学习指南将带领你从 YOLO 的基础概念…

Java 24新特性深度解析:从优化技巧到高手进阶指南

一、Java 24核心新特性详解 Java 24作为长期支持版本(LTS),带来了许多令人振奋的新特性,下面我们将深入探讨其中最值得关注的改进。 1. 字符串模板(String Templates)正式发布 字符串模板结束了Java字符串拼接的混乱时代&#…

《类和对象(中)》

引言: 上次我们主要学习了类的相关知识,今天我们就来学习类和对象(中),今天也会用到之前学习过的东西,可以说是前面知识的结合,较前面会难一点(打个预防针)。 一:类的默认成员函数…

为什么 AI 理解不了逻辑问题?

人类擅长“如果 A 则 B”,AI 擅长“这个像那个”。逻辑推理?对它来说是一场灾难性的认知挑战。 前言 在实际使用 AI(尤其是大型语言模型,比如 GPT、Claude、Gemini 等)时,我们常发现一个诡异的现象:它们文采斐然,甚至能讲出笑话,但一旦问点小学奥数或逻辑问题,就集体…

C# 使用SunnyUI控件 (VS 2019)

前言:建议下载源码,源码中包含了各种控件的用法案例。 下载 帮助文档: 文档预览 - Gitee.comGitee: SunnyUI: SunnyUI.NET 是基于.NET Framework 4.0、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。GitHub: h…

Spring Cloud: Nacos

Nacos Nacos是阿里巴巴开源的一个服务发现,配置管理和服务管理平台。只要用于分布式系统中的微服务注册,发现和配置管理,nacos是一个注册中心的组件 官方仓库:https://nacos.io/ Nacos的下载 Releases alibaba/nacos 在官网中…

Linux下的c/c++开发之操作mysql数据库

libmysqlclient-dev介绍(Linux 下的 Mysql C/C 开发包) libmysqlclient-dev 是一个开发包,在Linux环境下为使用 MySQL C API 进行开发的c/c程序员提供头文件(如 mysql.h)和静态库/动态库的链接信息(如 lib…

Java EE(Spring+Spring MVC+MyBatis)从入门到精通企业级应用开发教程——1初识MyBatis框架

1、MyBatis工作原理 MyBatis操作数据库流程分为8个步骤,具体介绍如下: (1)MyBatis读取核心配置文件mybatis-config.xml mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。 (2)加载映射…

【许可证】Open Source Licenses

长期更新 扩展:shield.io装饰 开源许可证(Open Source Licenses)有很多种,每种都有不同的授权和限制,适用于不同目的。 默认的ISC🟰MIT License是否可商用是否要求开源衍生项目是否必须署名是否有专利授权…

ZooKeeper工作机制与应用场景

目录 1.1、概述1.2、选举机制1.2.1、选举触发条件1.2.2、选举规则1.2.3、选举过程详解 1.3、数据同步机制1.3.1、正常同步1.3.2、宕机同步 1.4、客户端常用命令1.5、应用场景1.5.1、配置管理1.5.2、命令服务1.5.3、分布式锁服务1.5.4、集群管理1.5.5、分布式ID1.5.6、分布式协调…

前端面经-VUE3篇(四)--pinia篇-基本使用、store、state、getter、action、插件

一、基本使用 1、什么是 Pinia? Pinia 是 Vue.js 的官方状态管理库,是 Vuex 的“升级版”。它专为 Vue 3 和 Composition API 设计,用于管理多个组件之间共享的数据(也叫“全局状态”)。 2、为什么需要状态管理库&a…