Python Requests-HTML庫詳解:從入門到實戰

一、庫簡介

Requests-HTML是Python中集網絡請求與HTML解析于一體的全能型庫,由知名開發者Kenneth Reitz團隊維護。它完美結合了Requests的易用性和Parsel的選擇器功能,并內置JavaScript渲染引擎,特別適合現代動態網頁抓取。最新版本(v0.10.0)已全面兼容Python 3.6+環境。

二、核心功能詳解

1. 環境準備

# 終端安裝
pip install requests-html# 基礎導入
from requests_html import HTMLSession

2. 基礎網絡請求

# 創建會話對象(推薦方式)
session = HTMLSession()# GET請求示例
response = session.get('https://example.com')# POST請求示例
data = {'key': 'value'}
response = session.post('https://httpbin.org/post', data=data)

3. HTML解析三板斧

# 原始HTML查看
print(response.html.raw_html)# CSS選擇器(支持嵌套查詢)
articles = response.html.find('div.article', first=True)# XPath表達式
titles = response.html.xpath('//h2/text()')

4. 動態頁面處理

# 強制渲染JavaScript(自動執行JS)
response.html.render()  # 需安裝pyppeteer# 異步渲染(提升性能)
async def get_dynamic_content():r = await session.get('https://dynamic-site.com')await r.html.arender()

5. 表單與文件操作

# 文件上傳示例
with open('file.txt', 'rb') as f:files = {'upload_file': f}response = session.post('https://upload.com', files=files)# 表單提交(含驗證碼處理)
form = response.html.find('form#login', first=True)
form_data = {'username': 'admin','password': '123456','captcha': 'abcd'  # 需配合OCR處理
}
response = session.post(form.attrs['action'], data=form_data)

三、高級特性

1. 智能編碼檢測

# 自動識別網頁編碼
response.encoding = response.apparent_encoding# 手動設置編碼(日文頁面示例)
response.encoding = 'euc-jp'

2. 連接池優化

# 創建帶連接池的會話
from requests.adapters import HTTPAdapteradapter = HTTPAdapter(pool_connections=10, pool_maxsize=100)
session = HTMLSession()
session.mount('https://', adapter)

3. 異常處理機制

try:response = session.get('https://flaky-site.com', timeout=5)response.raise_for_status()
except requests.exceptions.HTTPError as err:print(f"HTTP錯誤: {err}")
except requests.exceptions.ConnectionError:print("連接失敗,正在重試...")

四、實戰案例:豆瓣電影數據抓取

from requests_html import HTMLSessionsession = HTMLSession()def scrape_douban(url):try:r = session.get(url)r.html.render()  # 執行JS渲染movies = []for item in r.html.find('.item'):title = item.find('.title', first=True).textrating = item.find('.rating_num', first=True).textmovies.append({'title': title,'rating': float(rating)})return moviesexcept Exception as e:print(f"抓取失敗: {str(e)}")return []# 執行抓取
data = scrape_douban('https://movie.douban.com/top250')
print(f"成功獲取{len(data)}條電影數據")

五、性能優化建議

  1. 持久化會話:復用Session對象減少TCP連接開銷
  2. 并發控制:使用asyncio實現異步請求(示例見附錄)
  3. 緩存策略:對靜態資源啟用本地緩存
  4. 代理旋轉:配合住宅IP代理應對反爬

六、常見問題解決

Q1: 渲染時出現pyppeteer錯誤
A: 確保已安裝瀏覽器依賴:

pip install pyppeteer
python -m pyppeteer_installer

Q2: 如何處理驗證碼?
A: 推薦方案:

  1. 使用OCR庫(如tesseract)識別簡單驗證碼
  2. 接入第三方打碼平臺(推薦超級鷹)
  3. 復雜場景建議使用Selenium模擬瀏覽器

Q3: 遇到TooManyRedirects錯誤
A: 修改請求參數:

response = session.get(url, allow_redirects=False)

七、版本更新亮點(v0.10.0)

  1. 新增WebAssembly支持
  2. 優化移動端UserAgent池
  3. 增強CSS選擇器性能(提升40%)
  4. 修復已知內存泄漏問題

八、學習資源推薦

  1. 官方文檔
  2. 動態網頁抓取實戰
  3. 反爬蟲對抗指南

通過本文的系統學習,您將掌握從基礎請求到動態頁面處理的完整技能鏈。實際開發中建議結合具體場景調整參數,并遵守目標網站的robots.txt協議。

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

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

相關文章

基于springboot的小區車位租售管理系統

博主介紹:java高級開發,從事互聯網行業六年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了六年的畢業設計程序開發,開發過上千套畢業設計程序,沒有什么華麗的語言&#xff0…

Kafka 如何優雅實現 Varint 和 ZigZag 編碼

ByteUtils 是 Kafka 中一個非常基礎且核心的工具類。從包名 common.utils 就可以看出,它被廣泛用于 Kafka 的各個模塊中。它的主要職責是提供一套高效、底層的靜態方法,用于在字節緩沖區 (ByteBuffer)、字節數組 (byte[]) 以及輸入/輸出流 (InputStream/…

局域網 IP地址

很多童鞋搞不清楚局域網ip是什么? 什么是局域網 IP 地址? 局域網 IP 地址,也稱為 私有 IP 地址(Private IP Address),是用于在局域網內部標識設備的地址。這些地址不能直接在互聯網上被訪問,通常由路由器自動分配,用于設備之間的內部通信。 局域網 IP 地址的分類 根…

k8s的service、deployment、探針詳解

1.k8s組成圖2.service和deployment的流量轉發圖# Deployment 定義容器端口 apiVersion: apps/v1 kind: Deployment metadata:name: myapp spec:template:spec:containers:- name: nginximage: nginxports:- containerPort: 80 # 容器監聽 80name: http # 端口命名&…

【PostgreSQL教程】PostgreSQL中json類型與jsonb類型的區別

博主介紹:?全網粉絲23W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

牛客刷題記錄01

除2! 目錄 除2! 題目描述: ?編輯 題目解析: 代碼實現: 數組中兩個字符串的最小距離__牛客網 題目描述: 題目解析: 代碼實現: 除2! 題目描述: 給一個…

Docker Compose UI遠程訪問教程:結合貝銳花生殼實現內網穿透

對于很多剛接觸Docker的用戶來說,命令行操作總帶著一絲“勸退感”。尤其是要在Windows上部署服務、開放端口、配置參數時,稍有不慎就容易出錯。有沒有辦法像網頁后臺一樣,用圖形界面來管理Docker項目呢?答案是:有&…

HF83311_VB1/HF83311Q_VB1:高性能USB HiFi音頻解碼器固件技術解析

引言隨著高品質音頻體驗需求的不斷增長,音頻解碼器固件的性能和功能成為決定音頻設備品質的關鍵因素。本文將介紹一款基于XMOS XU316技術的高性能USB HiFi音頻解碼器固件——HF83311_VB1/HF83311Q_VB1,這是一款專為USB HiFi音頻應用設計的軟件解決方案。…

[ComfyUI] -入門1-ComfyUI 是什么?比 Stable Diffusion WebUI 強在哪?

ComfyUI 是一個開源的、節點可視化界面,用于構建與執行 Stable Diffusion 圖像生成流程。它把復雜的生成過程拆解為許多“節點”(如提示編碼、采樣器、控制網絡等),用戶通過連接節點,就能自由編排工作流 。這種設計適合開發者與進階用戶,更便于微調、多分支與復用流程。 …

[python][flask]flask接受get或者post參數

在 Flask 中,可以通過 request 對象來獲取客戶端通過 GET 或 POST 方法發送的參數。以下是如何在 Flask 中接收 GET 和 POST 參數的詳細說明:1. 接收 GET 參數GET 請求的參數通常通過 URL 的查詢字符串傳遞。例如,對于 URL http://example.co…

Creo 模塊眾多,企業如何按需靈活分配許可證資源?

在數字化設計與智能制造深入發展的當下,企業 CAD/CAE 工具的精細化管理越來越重要。Creo,作為 PTC 旗下一體化 3D CAD 平臺,以其模塊化、可擴展的產品架構,廣泛應用于機械、裝備、汽車、航空航天等行業。其豐富的模塊庫覆蓋建模設…

【c++】提升用戶體驗:問答系統的交互優化實踐——關于我用AI編寫了一個聊天機器人……(12)

本期依舊使用豆包輔助完成代碼。從功能到體驗的轉變上個版本已經實現了問答系統的核心功能:基于 TF-IDF 算法的問題匹配和回答。它能夠讀取訓練數據,處理用戶輸入,并返回最相關的答案。但在用戶體驗方面還有很大提升空間。讓我們看看改進版做…

Android UI 控件詳解實踐

一、UI 開發基礎概念(初學者必看) 在學習具體控件前,先理解以下核心概念,能大幅降低后續學習難度: 1. View 與 ViewGroup 的關系 View:所有 UI 控件的基類(如 Button、TextView)&…

關于linux運維 出現高頻的模塊認知

一、Linux 基礎核心(必掌握)核心工具:Shell 腳本、Systemd、用戶權限管理、日志分析(journalctl、rsyslog)企業需求:中小型公司:需獨立完成系統部署、故障排查,對腳本開發&#xff0…

手語式映射:Kinova Gen3 力控機械臂自適應控制的研究與應用

近日,美國明尼蘇達大學研究團隊在《從人手到機械臂:遙操作中運動技能具身化研究》中,成功開發出基于??Kinova的7軸力控機械臂Gen3的智能控制系統。這項創新性技術通過人工智能算法,實現了人類手臂動作到機械臂運動的精準映射&am…

P5535 【XR-3】小道消息

題目描述 小 X 想探究小道消息傳播的速度有多快,于是他做了一個社會實驗。 有 n 個人,其中第 i 個人的衣服上有一個數 i1。小 X 發現了一個規律:當一個衣服上的數為 i 的人在某一天知道了一條信息,他會在第二天把這條信息告訴衣…

ChatGPT Agent架構深度解析:OpenAI如何構建統一智能體系統

引言:AI智能體的范式躍遷 2025年7月17日,OpenAI發布的ChatGPT Agent標志著對話式AI從“被動應答”向主動執行的歷史性轉變。這款融合Operator網頁操作與Deep Research信息分析能力的新型智能體,通過統一架構設計實現了復雜任務的端到端自主執…

計算機網絡(第八版)— 第2章課后習題參考答案

2-01 物理層要解決哪些問題?物理層的主要特點是什么?答:物理層要解決的主要問題:(1)物理層要盡可能地屏蔽掉物理設備和傳輸媒體,通信手段的不同,使數據鏈路層感覺不到這些差異&#…

Hive【Hive架構及工作原理】

?博客主頁: https://blog.csdn.net/m0_63815035?typeblog 💗《博客內容》:.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 📢博客專欄: https://blog.csdn.net/m0_63815035/cat…

數據管理能力成熟度評估模型(DCMM)詳解

數據管理能力成熟度評估模型(DCMM)詳解 1. DCMM概述 數據管理能力成熟度評估模型(Data Management Capability Maturity Assessment Model, DCMM)是我國首個數據管理領域的國家標準(GB/T 36073-2018),由國家工業信息安全發展研究中心牽頭制定。該模型為我國企業數據…