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

news2025/7/15 8:22:57

前言:这篇文章主要介绍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 requests

res1 = 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 requests

res1 = 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 requests

indata = 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 + y

def subtract(x,y):
    return x - y

def multiply(x,y):
    return x * y

def 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.coloradmin.cn/o/2371949.html

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

相关文章

LabVIEW燃气轮机测控系统

在能源需求不断增长以及生态环境保护备受重视的背景下,微型燃气轮机凭借其在经济性、可靠性、维护性及排放性等方面的显著优势,在航空航天、分布式发电等众多领域得到广泛应用。随着计算机技术的快速发展,虚拟仪器应运而生,LabVIE…

QT | 常用控件

前言 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 —…

LLM论文笔记 28: Universal length generalization with Turing Programs

Arxiv日期:2024.10.4机构:Harvard University 关键词 图灵机 CoT 长度泛化 核心结论 Turing Programs 的提出 提出 Turing Programs,一种基于图灵机计算步骤的通用 CoT 策略。通过将算法任务分解为逐步的“磁带更新”(类似图灵…

AI日报 · 2025年5月07日|谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力

1、谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力 谷歌于5月6日提前发布 Gemini 2.5 Pro 预览版 (I/O 版本),为开发者带来更强编码能力,尤其优化了前端与UI开发、代码转换及智能体工作流构建,并在WebDe…

指定Docker镜像源,使用阿里云加速异常解决

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo异常贴图 yum-config-manager:找不到命令 因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-util…

VITA STANDARDS LIST,VITA 标准清单下载

VITA STANDARDS LIST,VITA 标准清单下载 DesignationTitleAbstractStatusVMEbus Handbook, 4th EditionA users guide to the VME, VME64 and VME64x bus specifications - features over 70 product photos and over 160 circuit diagrams, tables and graphs. The…

Python从入门到高手8.3节-元组的常用操作方法

目录 11.3.1 元组的常用操作方法 11.3.2 元组的查找 11.3.3 祈祷明天不再打雷下雨 11.3.1 元组的常用操作方法 元组类型是一种抽象数据类型,抽象数据类型定义了数据类型的操作方法,在本节的内容中,着重介绍元组类型的操作方法。 ​ 元组是…

Linux系统安装PaddleDetection

一、安装cuda 1. 查看设备 先输入nvidia-smi,查看设备支持的最大cuda版本,选择官网中支持的cuda版本 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/conda/linux-conda.html 2. 下载CUDA并安装 使用快捷键…

【漫话机器学习系列】239.训练错误率(Training Error Rate)

机器学习基础概念 | 训练错误率(Training Error Rate)详解 在机器学习模型训练过程中,评估模型性能是至关重要的一个环节。其中,训练错误率(Training Error Rate) 是最基础也最重要的性能指标之一。 本文将…

OpenCV 图形API(80)图像与通道拼接函数-----仿射变换函数warpAffine()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对图像应用仿射变换。 函数 warpAffine 使用指定的矩阵对源图像进行变换: dst ( x , y ) src ( M 11 x M 12 y M 13 , M 21 x M…

数据结构与算法:图论——最短路径

最短路径 先给出一些leetcode算法题,以后遇见了相关题目再往上增加 最短路径的4个常用算法是Floyd、Bellman-Ford、SPFA、Dijkstra。不同应用场景下,应有选择地使用它们: 图的规模小,用Floyd。若边的权值有负数,需要…

提示词工程:通向AGI时代的人机交互艺术

‌引言:从基础到精通的提示词学习之旅‌ 欢迎来到 ‌"AGI时代核心技能"‌ 系列课程的第二模块——‌提示词工程‌。在这个模块中,我们将系统性地探索如何通过精心设计的提示词,释放大型语言模型的全部潜力,实现高效、精…

是更换Window资源管理器的时候了-> Files-community/Files

Files • 主页https://files.community/ 它已经做到了 云盘文件集成、标签页和多种布局、丰富的文件预览…… 您想要的一切现代文件管理器的强大功能, Files 都能做到。 概述 Files 是一个现代文件管理器,可帮助用户组织他们的文件和文件夹。Files 的…

基于windows安装MySQL8.0.40

基于windows安装MySQL8.0.40 基于windows 安装 MySQL8.0.40,解压文件到D:\mysql-8.0.40-winx64 在D:\mysql-8.0.40-winx64目录下创建my.ini文件,并更新一下内容 [client] #客户端设置,即客户端默认的连接参数 # 设置mysql客户端连接服务…

【Vue】组件自定义事件 TodoList 自定义事件数据传输

目录 一、绑定 二、解绑 组件自定义事件总结 TodoList案例对数据传输事件的修改 总结不易~ 本章节对我有很大收获, 希望对你也是!!! 本章节素材已上传Gitee:yihaohhh/我爱Vue - Gitee.com 前面我们学习的clikc、…

基于Centos7的DHCP服务器搭建

一、准备实验环境: 克隆两台虚拟机 一台作服务器:DHCP Server 一台作客户端:DHCP Clinet 二、部署服务器 在网络模式为NAT下使用yum下载DHCP 需要管理员用户权限才能下载,下载好后关闭客户端,改NAT模式为仅主机模式…

LabVIEW超声波液位计检定

在工业生产、运输和存储等环节,液位计的应用十分广泛,其中超声波液位计作为非接触式液位测量设备备受青睐。然而,传统立式水槽式液位计检定装置存在受建筑高度影响、量程范围受限、流程耗时长等问题,无法满足大量程超声波液位计的…

[STM32] 4-2 USART与串口通信(2)

文章目录 前言4-2 USART与串口通信(2)数据发送过程双缓冲与连续发送数据发送过程中的问题 数据接收过程TXE标志位(发送数据寄存器空)TC标志位(发送完成标志位)单个数据的发送数据的连续发送 接收过程中遇到的问题问题描述&#xf…

基于Python+MongoDB猫眼电影 Top100 数据爬取与存储

前言:从猫眼电影排行榜页面(TOP100榜 - 猫眼电影 - 一网打尽好电影 )爬取 Top100 电影的电影名称、图片地址、主演、上映时间和评分等关键信息,并将这些信息存储到本地 MongoDB 数据库中,🔗 相关链接Xpath&…

Ubuntu 单机多卡部署脚本: vLLM + DeepSeek 70B

# 部署脚本:Ubuntu vLLM DeepSeek 70B # 执行前请确保:1. 系统为 Ubuntu 20.04/22.04 2. 拥有NVIDIA显卡(显存≥24G) # 保存两个文件 1 init.sh 初始化 2、test.sh 测试 # init.sh #!/bin/bash # 系统更新与基础依赖sudo apt update && s…