爬蟲---lxml簡單操作


  前幾篇寫了一些Beautiful Soup的一些簡單操作,也拿出來了一些實例進行實踐,今天引入一個新的python庫lxmt,lxmt也可以完成數據的爬取哦

 

什么是lxml

 lxml是python的一個解析庫,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。

lxml學習文檔:https://lxml.de/

 

什么是xpath

XPath相信大家都知道,在做自動化測試的時候有個定位方法就是xpath,對沒錯就是它;

XPath , 全稱XML Path Language ,即XML 路徑語言,它是一門在XML 文檔中查找信息的語言。它最初是用來搜尋XML 文檔的,但是它同樣適用於HTML 文檔的搜索。XPath的選擇功能十分強大,它提供了非常簡明的路徑選擇表達式,另外,它還提供了超過100個內建函數,用於字符串、數值、時間的匹配以及節點、序列的處理等,幾乎所有我們想要定位的節點,都可以用XPath來選擇;

XPath常用規則

表達式 描述
nodename 選取此節點的所有子節點
/ 從當前節點選取直接子節點
// 從當前節點選取子孫節點
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性
* 通配符,選擇所有元素節點與元素名
@* 選取所有屬性
[@屬性] 選取具有給定屬性的所有元素
[@屬性=‘value’] 選取給定屬性具有給定值的所有元素

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XPath學習文檔:https://www.w3.org/TR/xpath/all/

 

lxml安裝

windows安裝

# lxmt安裝
pip install lxml

#如果按照失敗,可能缺少libxml2庫信息,選擇wheel進行安裝
# https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下載對應python版本的lxml版本

pip install 下載內容(lxml版本)

 

Liunx安裝

# 通過pip安裝
pip install lxml

 

lxml簡單使用

<html>
<body>
<div>
<ul>
<li class="item-0"><a href="link1.html">今天天氣</a></li>
<li class="item-1"><a href="link2.html">明天天氣</a></li>
<li class="item-2"><a href="link3.html">后天天氣</a></li>
<li class="item-3"><a href="link4.html">周末天氣</a></li>
</ul>
</div>
</body>
</html>

通過上面簡單的HTML簡單了解下lxml.etree

使用lxml下的etree首先解析html內容,通過xpath進行找到對應的li標簽內容

1、獲取li所有節點

# 導入lxml
from lxml import etree
# 解析
html = etree.HTML(text)
result = html.xpath('//li')


代碼結果:
[<Element li at 0x3a0a8c8>, <Element li at 0x3a0a888>, <Element li at 0x3a0a988>, <Element li at 0x3a0a9c8>]

這里可以看到是一個列表形式,其中每個元素都是一個element對象,如果要取出其中一個對象,可以直接通過下標

2、獲取子節點

# 導入lxml
from lxml import etree
# 解析
html = etree.HTML(text)
# 查找li下的所有的a標簽
result = html.xpath('//li/a')


代碼結果:
[<Element li at 0x3a0a8c8>, <Element li at 0x3a0a888>, <Element li at 0x3a0a988>, <Element li at 0x3a0a9c8>]

3、獲取li標簽下的所有文字

# 導入lxml
from lxml import etree
# 解析
html = etree.HTML(text)
# 通過text()獲取全部文字
result = html.xpath('//li/a/text()')


代碼結果:
['今天天氣', '明天天氣', '后天天氣', '周末天氣']

4、屬性獲取

# 導入lxml
from lxml import etree
# 解析
html = etree.HTML(text)
# 通過@屬性值獲取對應屬性
result = html.xpath('//li/a/@href')

代碼結果:
['link1.html', 'link2.html', 'link3.html', 'link4.html']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM