一、提交信息到網頁
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 瀏覽器為例:
- 確定瀏覽器內核版本:打開 Edge 瀏覽器,在設置 - 關于 Microsoft Edge 中查看版本。
- 下載匹配的 EdgeDriver:訪問微軟官方 EdgeDriver 下載頁(Microsoft Edge WebDriver | Microsoft Edge Developer?),選擇與瀏覽器版本適配的 EdgeDriver(版本盡量貼近 )。
- 配置驅動程序:解壓下載的 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'))
遍歷獲取的元素列表,能批量提取信息(如圖片鏈接 )或執行交互,提升自動化效率。