Python?文檔解析lxml庫的使用詳解
1.lxml庫簡介
lxml 是 Python 常用的文檔解析庫,能夠高效地解析 HTML/XML 文檔,常用于 Python 爬蟲。
lxml 為第三方庫,需要我們通過pip命令安裝:
pip install lxml
2.lxml庫方法介紹
lxml 庫提供了一個
etree模塊,該模塊專門用來解析 HTML/XML 文檔,讓我們先導入模塊:
from lxml import etree
使用
etree模塊的HTML()方法可以創(chuàng)建 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為字節(jié)類型
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()方法來提取我們需要的數(shù)據(jù)了:
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表達式作為參數(shù),上面那段程序提取出了頁面里的所有網址。
詳細的
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)
# 創(chuàng)建img文件夾
os.chdir(os.path.dirname(sys.argv[0]))
if not os.path.exists('img'):
os.mkdir('img')
print('創(chuàng)建文件夾成功')
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格式的圖片,快來自己嘗試一下吧!
到此這篇關于Python 文檔解析lxml庫的使用的文章就介紹到這了,更多相關Python lxml庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)解壓當天創(chuàng)建的ZIP文件到指定文件夾中
這篇文章主要為大家詳細介紹了Python如何實現(xiàn)解壓當天創(chuàng)建的ZIP文件到指定文件夾中,文中的示例代碼講解詳細,需要的小伙伴可以參考下2024-03-03
python實現(xiàn)數(shù)據(jù)庫跨服務器遷移
這篇文章主要為大家詳細介紹了Python實現(xiàn)數(shù)據(jù)庫之間的數(shù)據(jù)遷移,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04

