爬蟲小知識(二)網頁進行交互

一、提交信息到網頁

1、模塊核心邏輯


“提交信息到網頁” 是網絡交互關鍵環節,借助 requests 庫的 post() 函數,能模擬瀏覽器向網頁發數據(如表單、文件 ),實現信息上傳,讓我們能與網頁背后的服務器 “溝通”,像改密碼、傳文件等操作,都可通過它完成 。

2、瀏覽器提交請求流程(以改密碼為例 )


操作觸發:登錄賬戶進改密碼頁面,填 “當前密碼”“新密碼” 等表單 。
抓包分析:網頁空白處右鍵 → 檢查 → Network 窗口,輸密碼點 “修改密碼”,Network 會捕獲交互信息,能看到請求方法是 POST,還能找到提交的密碼等數據 。
數據傳遞:瀏覽器把表單里的密碼等信息,通過 POST 請求發給服務器,服務器驗證、處理后返回結果 。


3、post() 函數詳解


基本形式:
?

requests.post(url, data=None, json=None, **kwargs)

參數說明:
url:必填,要提交信息的網頁地址(如改密碼的接口地址 ),告訴 post() 該把數據發哪 。
data:選填,要發送的數據,可是字典、元組、列表等(常用來傳表單數據,像 {'old_pwd':'123','new_pwd':'456'} )。
json:選填,專門傳 JSON 格式數據(當服務器要求接收 JSON 時用 ),傳參后 requests 會自動設請求頭 Content-Type 為 application/json 。
**kwargs:選填,額外配置(如設置請求頭 headers、超時時間 timeout 等 ),讓請求更靈活 。
返回值:
執行 post() 后,返回 Response 對象,和 get() 類似,可通過 r.text 看響應內容、r.status_code 查狀態碼等 。

示例理解:
?

import requests
# 表單數據,存字典里
data = {'OldPassword':'123456python','NewPassword':'123python','ConfirmPassword':'123python'}  
# 發 POST 請求,提交數據到指定 url
r = requests.post('https://account.ryjiaoyu.com/change-password', data=data)  
# 打印響應內容
print(r.text)  

這里 data 存改密碼的表單數據,post() 帶著數據發給服務器,雖然實際改密碼還得先登錄,但演示了 “傳數據” 的核心流程 。

4、上傳文件的方法(files 參數 )


想把文件(如圖片、文檔 )傳到網頁,用 files 參數,步驟:

打開文件:用 open() 函數以二進制模式(rb )打開文件,得到文件對象 。
構造參數:建字典,鍵是服務器接收文件的字段名(如 file ),值是文件對象 。
發起請求:post() 里傳 files 參數,把文件數據發出去 。
示例代碼:
?

import requests
# 打開文件,'rb' 是二進制讀模式
fp = {'file':open('bitbug.ico', 'rb')}  
# 發 POST 請求,上傳文件到指定 url
r = requests.post('可上傳圖片的網址', files=fp)  
# 打印響應內容
print(r.text)  

代碼里,open() 拿到文件對象,files 帶著它發請求,服務器接收后,就能把文件存到指定位置(實際要填正確的上傳網址 )。

?二、代理服務器

1、會話(Session)


核心邏輯
HTTP 本身無記憶,每次請求獨立。會話(Session) 就是為解決這問題,讓客戶端(瀏覽器)和服務器 “記住” 交互狀態(比如登錄態 ),常用 Cookie 實現:服務器發 Cookie 給客戶端存著,下次請求帶著,服務器就知道 “是同一用戶” 。

創建會話(requests 實現 )
用 requests 庫的 Session 類,自動維持會話、管理 Cookie,代碼形式:

import requests
# 創建會話對象,后續用 s 發請求,自動帶 Cookie
s = requests.Session()  

比如登錄操作,先用 s.post() 提交賬號密碼,登錄后的 Cookie 會存在 s 里,再用 s.get() 訪問需要登錄的頁面,就自動帶著登錄態,不用手動傳 Cookie 。

2、代理服務器


1是什么 & 作用


代理服務器是客戶端和目標服務器中間的 “中轉站” 。客戶端發請求給代理,代理再轉發給目標服務器,拿到響應后再回傳給客戶端。

作用超關鍵:

防封禁:頻繁爬取時,目標服務器會封客戶端 IP ,用代理換 IP ,讓服務器以為是不同用戶請求。
突破限制:有些資源限制訪問來源,代理可偽裝成允許的 IP 去請求。


2、工作流程(對應圖文 )


客戶端(你寫的爬蟲)→ 發 URL 請求給代理服務器 。
代理服務器 → 轉發請求給目標服務器 。
目標服務器 → 把響應給代理服務器 。
代理服務器 → 再把響應回傳給客戶端 。
相當于代理 “替你” 和目標服務器溝通,隱藏真實 IP 。


3、使用方法(requests 代碼 )


在 get()/post() 里加 proxies 參數,傳代理的 IP 等信息,代碼形式:
?

import requests
# 構造代理字典,http/https 按需選,值是代理地址(IP:端口 )
proxy = {'http': '代理服務器地址:端口'}  
# 請求時傳 proxies,走代理訪問目標網址
r = requests.get('https://www.xxx.com/', proxies=proxy)  
print(r.text)

比如代理地址是?115.29.199.168:1188?,就寫成?proxy = {'http': '115.29.199.168:1188'}?,請求時帶著它,數據就會走代理服務器轉發 。

注意:免費代理有時效性,可能用著用著就失效,實際項目常用付費、穩定的代理~

三、selenium庫驅動瀏覽器

1、Selenium 庫核心認知

Selenium 庫是 Web 應用程序測試與自動化操作的利器 ,能驅動瀏覽器(如 Edge、Firefox 等)執行點擊、輸入、打開、驗證等操作?。與 Requests 庫差異顯著:Requests 庫僅能獲取網頁原始代碼,而 Selenium 基于瀏覽器驅動程序工作,瀏覽器可渲染網頁源代碼,借此能輕松拿到渲染后的數據信息(如 JS 動態加載內容 ),完美解決 Requests 庫無法處理的動態頁面數據提取難題。

2、使用 Selenium 庫前的準備

安裝 WebDriver

瀏覽器依托內核(如 Edge 瀏覽器基于 Chromium 內核 )運行,Selenium 驅動瀏覽器需對應內核的 WebDriver 。以 Edge 瀏覽器為例:

  1. 確定瀏覽器內核版本:打開 Edge 瀏覽器,在設置 - 關于 Microsoft Edge 中查看版本。
  2. 下載匹配的 EdgeDriver:訪問微軟官方 EdgeDriver 下載頁(Microsoft Edge WebDriver | Microsoft Edge Developer?),選擇與瀏覽器版本適配的 EdgeDriver(版本盡量貼近 )。
  3. 配置驅動程序:解壓下載的 EdgeDriver,將?msedgedriver.exe(Windows 系統 )移動到 Python 安裝目錄的?Scripts?文件夾(通過?where python(Windows)或?which python3(macOS/Linux )命令查找 Python 路徑 ),完成環境關聯。
安裝 Selenium 庫

在命令提示符(Windows)或終端(macOS/Linux )執行:

pip install selenium 

安裝后,用?pip show selenium?查看庫信息,確認安裝成功。

3、驅動瀏覽器(以 Edge 為例 )

Selenium 支持多種瀏覽器,驅動 Edge 瀏覽器代碼如下:

from selenium import webdriver  
from selenium.webdriver.edge.options import Options  # 創建瀏覽器配置對象
edge_options = Options()  
# 綁定 Edge 瀏覽器可執行文件路徑(需替換為你電腦中 Edge 的實際安裝路徑)
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"  
# 初始化 Edge 瀏覽器驅動,通過配置對象關聯瀏覽器
driver = webdriver.Edge(options=edge_options)  

4、加載網頁

get()?方法加載單網頁

get(url)?可在當前瀏覽器會話打開指定網頁,示例:

from selenium import webdriver  
from selenium.webdriver.edge.options import Options  edge_options = Options()  
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"  
driver = webdriver.Edge(options=edge_options)  
# 加載人民郵電出版社官網期刊頁
driver.get('https://www.ptpress.com.cn/periodical')  

執行后,Edge 瀏覽器自動啟動并打開目標網頁,用于后續數據提取、交互操作。

execute_script()?方法打開多標簽頁

該方法通過執行 JavaScript 腳本,在同一瀏覽器打開多個標簽頁,格式:execute_script(script, *args)?,script?為 JavaScript 腳本字符串。示例:

from selenium import webdriver  
from selenium.webdriver.edge.options import Options  edge_options = Options()  
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"  
driver = webdriver.Edge(options=edge_options)  
# 先打開主頁面
driver.get('https://www.ptpress.com.cn/')  
# 打開新標簽頁(人民郵電出版社登錄頁)
driver.execute_script("window.open('https://www.ptpress.com.cn/login','_blank');")  
# 打開另一個新標簽頁(數藝社頁面 )
driver.execute_script("window.open('https://www.shuyishe.com/','_blank');")  

借助 JavaScript 的?window.open?方法,實現多標簽頁批量打開,滿足復雜網頁跳轉需求。

5、獲取渲染后的網頁代碼

瀏覽器加載網頁并渲染后,用?page_source?方法提取渲染后的完整代碼(含 JS 動態加載內容 ),示例:

from selenium import webdriver  
from selenium.webdriver.edge.options import Options  edge_options = Options()  
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"  
driver = webdriver.Edge(options=edge_options)  
driver.get('https://www.ptpress.com.cn/')  
# 獲取渲染后的網頁源代碼
rendered_html = driver.page_source  
print(rendered_html)  

page_source?獲取的代碼,可用于正則表達式、XPath 等方式提取目標數據(如商品價格、新聞內容 )。

5、獲取和操作網頁元素

獲取網頁中的指定元素

Selenium 提供多種元素定位方法(替代正則表達式篩選 ),常用如下:

  • find_element(By.ID, "id值"):通過元素?id?定位(頁面唯一 )。
  • find_element(By.NAME, "name值"):按?name?屬性定位。
  • find_element(By.XPATH, "XPath 表達式"):靈活的路徑定位,適配復雜頁面。

示例(定位搜索框并輸入內容 ):

from selenium import webdriver  
from selenium.webdriver.edge.options import Options  
from selenium.webdriver.common.by import By  edge_options = Options()  
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"  
driver = webdriver.Edge(options=edge_options)  
driver.get('https://www.ptpress.com.cn/')  # 用 XPath 定位搜索框(需替換為實際頁面 XPath )
search_box = driver.find_element(By.XPATH, '//input[@placeholder="搜索圖書、作者、ISBN"]')  
# 輸入搜索關鍵詞(這里通過 input 交互,模擬用戶輸入 )
a = input("請輸入搜索關鍵詞:")  
search_box.send_keys(a)  

通過?find_element?系列方法,精準定位元素后,可執行輸入、點擊等交互操作。

獲取多個元素與批量操作

find_elements()?方法(注意復數 )可獲取頁面中匹配條件的多個元素,示例(提取頁面中所有圖書封面圖片元素 ):

from selenium import webdriver  
from selenium.webdriver.edge.options import Options  
from selenium.webdriver.common.by import By  edge_options = Options()  
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"  
driver = webdriver.Edge(options=edge_options)  
driver.get('https://www.ptpress.com.cn/search?keyword=python')  # 定位所有圖書封面圖片元素(假設用 XPath 匹配 )
book_covers = driver.find_elements(By.XPATH, '//img[@class="book-cover"]')  
for cover in book_covers:  # 可獲取元素屬性(如 src )或執行點擊等操作print(cover.get_attribute('src'))  

遍歷獲取的元素列表,能批量提取信息(如圖片鏈接 )或執行交互,提升自動化效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89489.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF學習(五)

文章目錄一、FileStream和StreamWriter理解1.1、具體關系解析1.2、類比理解1.3、總結1.4、示例代碼1.5、 WriteLine()和 Write()的區別1.6、 StreamWriter.Close的作用二、一、FileStream和StreamWriter理解 在 C# 中,StreamWriter 和 FileS…

ctf.show-web習題-web2-最簡單的sql注入-flag獲取詳解、總結

解題思路打開靶場既然提示是最簡單的sql注入了,那么直接嘗試永真登錄1 or 11#這里閉合就是簡單的單引號可以看到沒登錄成功,但是有回顯:歡迎你,ctfshowsql注入最喜歡的就是回顯了!這題的思路就是靠這個回顯&#xff0c…

upload-labs 靶場通關(1-20)

目錄 Pass-01(JS 繞過) Pass-02(文件類型驗證) Pass-03(黑名單驗證) Pass-04(黑名單驗證.htaccess) Pass-05(大小寫繞過) Pass-06(末尾空格) Pass-07(增加一個.) Pass-08(增加一個::$DATA) Pass-09(代碼不嚴謹) Pass-10(PPHPHP&am…

[附源碼+數據庫+畢業論文]基于Spring+MyBatis+MySQL+Maven+vue實現的酒店預訂管理系統,推薦!

摘 要 使用舊方法對酒店預訂信息進行系統化管理已經不再讓人們信賴了,把現在的網絡信息技術運用在酒店預訂信息的管理上面可以解決許多信息管理上面的難題,比如處理數據時間很長,數據存在錯誤不能及時糾正等問題。 這次開發的酒店預訂管理系…

LSTM入門案例(時間序列預測)| pytorch實現(可復現)

需求 假如我有一個時間序列,例如是前113天的價格數據(訓練集),然后我希望借此預測后30天的數據(測試集),實際上這143天的價格數據都已經有了。這里為了簡單,每一天的數據只有一個價…

Axure RP 10 預覽顯示“無標題文檔”的空白問題探索【護航版】

1. 安裝情況 官網 Axure RP 10:Download Axure RP 10 - Axure (PS:11都出了) 版本:10.0.0.3924 激活碼:49bb9513c40444b9bcc3ce49a7a022f9 (10/11都可以用,但只嘗試了10&#xff…

基于SpringBoot+Vue的汽車租賃系統(協同過濾算法、騰訊地圖API、支付寶沙盒支付、WebsSocket實時聊天、ECharts圖形化分析)

系統亮點:協同過濾算法、騰訊地圖API、支付寶沙盒支付、WebsSocket實時聊天、ECharts圖形化分析;01系統開發工具與環境搭建—前后端分離架構項目架構:B/S架構運行環境:win10/win11、jdk17前端:技術:框架Vue…

數據結構入門:像整理收納一樣簡單!

在我們生活中,經常會面對這樣的問題: “我要怎么整理我的衣柜?” “電腦里照片太多了,怎么歸類才方便查找?” 其實,程序員也有類似的煩惱。他們不整理衣柜,而是“整理數據”。而這門關于如何“收…

力扣每日一題--2025.7.15

📚 力扣每日一題–2025.7.15 3135. 有效單詞 (簡單) 大家好!今天我們要來聊聊一道有趣的編程題——有效單詞 📝 題目描述 題目分析 📚 題目要求我們判斷一個字符串是否為有效單詞。有效單詞需要滿足以下…

Mysql數據庫——增刪改查CRUD

文章目錄一、數據庫的基礎命令二、創建表三、增(create)四、查詢(retrieve)五、條件查詢(where)六、修改(update)七、刪除(delete)一、數據庫的基礎命令 1.使用客戶端連接服務器 mysql -u root…

關于pytorch虛擬環境及具體bug問題修改

本篇博客包含對于虛擬環境概念的講解和代碼實現過程中相關bug的解決關于虛擬環境我的pytorch虛擬環境在D盤,相應python解釋器也在D盤(一起),但是我的pycharm中的項目在C盤,使用的是pytorch的虛擬環境,這是為…

U盤量產工具與性能優化完全指南

本文還有配套的精品資源,點擊獲取 簡介:U盤量產工具是IT行業中的專業軟件,用于批量生產或修復U盤。安國和銀燦是兩個提供U盤量產工具的主控芯片制造商,提供初始化、格式化、分區管理、性能優化、故障修復、個性化定制、固件升級…

Golang http開發實戰:構建RESTful API保姆級教程

目錄 章節1:RESTful API的精髓與Go的Web開發哲學 RESTful API的設計原則 Go的http包核心組件 實戰:第一個RESTful API端點 章節2:設計優雅的RESTful路由 路由設計的注意事項 使用Gorilla Mux實現動態路由 章節3:請求與響應的藝術:解析與格式化 解析請求數據 統一…

UGUI 性能優化系列:第一篇——基礎優化與資源管理

UGUI 性能優化系列:第一篇——基礎優化與資源管理 UGUI 性能優化系列:第二篇——Canvas 與 UI 元素管理 在 Unity 游戲中,用戶界面(UI)是玩家與游戲交互的核心。然而,不當的 UGUI 使用常常成為游戲性能的…

多端協同的招聘系統源碼開發指南:小程序+APP一體化設計

當下,很多企業選擇搭建屬于自己的多端協同招聘平臺,尤其是中大型人力資源公司、連鎖品牌企業,以及同城服務平臺,更是將“小程序APP”一體化招聘系統視為提升效率、降低用工成本的利器。 今天,筆者將從源碼開發的角度&a…

Maven 配置文件核心配置:本地倉庫、鏡像與 JDK 版本

Maven 配置文件核心配置:本地倉庫、鏡像與 JDK 版本 在 Maven 項目開發中,合理配置 settings.xml 文件能顯著提升依賴管理效率。本文將聚焦本地倉庫、鏡像加速和 JDK 版本這三個核心配置,結合 IDEA 環境詳細講解配置方法與作用。 一、Maven 配…

【時時三省】(C語言基礎)通過指針引用字符串

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省如在printf函數中輸出一個字符串。這些字符串都是以直接形式(字面形式)給出的,在一對雙撇號中包含若干個合法的字符。使用字符串的更加靈活方便的方法——通…

【Linux驅動-快速回顧】一文快速理解GIC內部寄存器對中斷的控制

第一部分:GIC的功能和組成 1. GIC要解決的根本問題 在一個復雜的片上系統(SoC)中,有非常多的硬件模塊(如定時器、串口、按鍵、DMA等),它們都需要在完成任務或遇到特定事件時通知CPU。同時&#…

【IoTDB 線上小課 17】開源 ≠ 免費,3 分鐘總結開源商用指南

【IoTDB 視頻小課】第十七期,解答你最關心的開源商業使用問題!關于 IoTDB,關于物聯網,關于時序數據庫,關于開源...一個問題重點,3-5 分鐘,我們講給你聽:原來開源商業化有這么多規則開…

VUE項目學習筆記 v-for綁定數據,該數據異步獲取,同時需要對v-for的DOM節點進行js操作

問題描述:項目里有一個輪播圖,輪播圖的圖片數據從服務器獲取,用v-for生成DOM在頁面中顯示,輪播圖插件會通過new Swiper給DOM添加CSS、事件等,實現輪播效果。在這里存在操作順序問題:當服務器返回圖片數據后…