【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.pswp.cn/news/905012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905012.shtml
英文地址,請注明出處:http://en.pswp.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…