網站首頁 編程語言 正文
1.lxml庫簡介
lxml 是 Python 常用的文檔解析庫,能夠高效地解析 HTML/XML 文檔,常用于 Python 爬蟲。
lxml 為第三方庫,需要我們通過pip命令安裝:
pip install lxml
2.lxml庫方法介紹
lxml 庫提供了一個
etree
模塊,該模塊專門用來解析 HTML/XML 文檔,讓我們先導入模塊:
from lxml import etree
使用
etree
模塊的HTML()
方法可以創建 HTML 解析對象:
from lxml import etree parse_html = etree.HTML(html)
HTML()
方法能夠將 HTML 標簽字符串解析為 HTML 文件,并且可以自動修正 HTML 文本:
from lxml import etree html_str = ''' <div> <ul> <li><a href="www.python.org">Python</a></li> <li><a href="www.java.com">Java</a> <li><a href="www.csdn.net">CSDN</a></li> </ul> </div> ''' html = etree.HTML(html_str) # tostring()將標簽元素轉換為字符串輸出,注意:result為字節類型 result = etree.tostring(html) print(result.decode('utf-8'))
上述代碼我故意在Java那一行少寫一個</li>,可以看到輸出會自動補全:
<html><body><div> <ul> <li><a href="www.python.org">Python</a></li> <li><a href="www.java.com">Java</a></li> <li><a href="www.csdn.net">CSDN</a></li> </ul> </div> </body></html>
解析為 HTML 文件后,我們可以使用
xpath()
方法來提取我們需要的數據了:
from lxml import etree html_str = ''' <div> <ul> <li><a href="www.python.org">Python</a></li> <li><a href="www.java.com">Java</a></li> <li><a href="www.csdn.net">CSDN</a></li> </ul> </div> ''' html=etree.HTML(html_str) xpath_bds='//@href' r_list = html.xpath(xpath_bds) print(r_list)
xpath()
方法使用一個XPath
表達式作為參數,上面那段程序提取出了頁面里的所有網址。
詳細的
XPath
表達式語法,請參見菜鳥教程:
https://www.runoob.com/xpath/xpath-syntax.html
3.代碼實例
lxml 庫在爬蟲中的使用大概就是這么多了,接下讓我們結合前一篇文章(Python 網頁請求:requests庫的使用),來寫一個普通的爬蟲程序吧:
import os import sys import requests from lxml import etree x = requests.get('https://www.csdn.net/') html = etree.HTML(x.text) xpath_bds = '//img/@src' img_list = html.xpath(xpath_bds) # 創建img文件夾 os.chdir(os.path.dirname(sys.argv[0])) if not os.path.exists('img'): os.mkdir('img') print('創建文件夾成功') else: print('文件夾已存在') # 下載圖片 for i in range(len(img_list)): img = requests.get(img_list[i]).content if img_list[i].endswith('.jpg'): with open(f'./img/{i}.jpg', 'wb') as f: f.write(img) elif img_list[i].endswith('.jpeg'): with open(f'./img/{i}.jpeg', 'wb') as f: f.write(img) elif img_list[i].endswith('.png'): with open(f'./img/{i}.png', 'wb') as f: f.write(img) else: print(f'第{i + 1}張圖片格式不正確') continue print(f'第{i + 1}張圖片下載成功')
這個爬蟲程序爬取了CSDN首頁的所有
.jpg
、.jpeg
、.png
格式的圖片,快來自己嘗試一下吧!
原文鏈接:https://blog.csdn.net/qq_63585949/article/details/126755821
相關推薦
- 2022-06-02 Python中函數的創建與調用你了解嗎_python
- 2022-04-25 C#使用NPOI實現Excel導入導出功能_C#教程
- 2022-05-05 docker中通過nginx+confd動態生成配置的解決方案_docker
- 2023-07-24 解碼方法decodedURIComponent
- 2022-01-26 maatwebsite/Excel 導入 iconv (): Detected an illegal
- 2022-04-10 小程序播放文件流音頻
- 2023-10-09 mobx中react的觀察者
- 2022-09-22 數據結構:順序表和鏈表學習小結
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支