日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python?文檔解析lxml庫的使用詳解_python

作者:小嗷犬 ? 更新時間: 2022-11-03 編程語言

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

欄目分類
最近更新