一文掌握Python爬蟲XPath語法
本文轉(zhuǎn)自微信公眾號:"算法與編程之美"
一、問題描述
1.什么是XPath?
xpath是一門在XML和HTML文檔中查找信息的語言,可用來在XML和HTML文檔中對元素和屬性進(jìn)行遍歷,XPath 通過使用路徑表達(dá)式來選取 XML 文檔中的節(jié)點或者節(jié)點集。這些路徑表達(dá)式和在常規(guī)的電腦文件系統(tǒng)中看到的表達(dá)式非常相似。
二、解決方案
1.XPath語法
想要學(xué)好xpath,首先要搞明白html文檔中的節(jié)點。
<div>
<ul>
<li class="item-0"><a href="link1.html" rel="external nofollow" >first item</a></li>
<li class="item-1"><a href="link2.html" rel="external nofollow" >second item</a></li>
<li class="item-inactive"><a href="link3.html" rel="external nofollow" >third item</a></li>
<li class="item-1"><a href="link4.html" rel="external nofollow" >fourth item</a></li>
<li class="item-0"><a href="link5.html" rel="external nofollow" >fifth item</a> # 注意,此處缺少一個 </li> 閉合標(biāo)簽
</ul>
</div>
以上是在網(wǎng)上隨便找的一段html的文本,可以觀察得到,div的標(biāo)簽下是ul標(biāo)簽,而ul標(biāo)簽下是li標(biāo)簽,于是發(fā)現(xiàn)html的標(biāo)簽是一級一級如樹狀的。Xpath正是通過這樣的方式去尋找。以生活中舉例,要確定一個人的位置,首先確定他在中國,然后確定他在某個省份,哪座城市,那個小區(qū),最后找到他。
|
表達(dá)式 |
描述 |
|
Nodename |
選取此節(jié)點的所有子節(jié)點 bookstore 選取bookstore下所有的子節(jié)點 |
|
/ |
如果是在最前面,代表從根節(jié)點選取。否則選擇某節(jié)點下的某個節(jié)點 /bookstore 選取根元素下所有的bookstore節(jié)點 |
|
// |
從全局節(jié)點中選擇節(jié)點,隨便在哪個位置 //book 從全局節(jié)點中找到所有的book節(jié)點 |
|
@ |
選取某個節(jié)點的屬性 //book[@price] 選擇所有擁有price屬性的book節(jié)點 |
|
. |
當(dāng)前節(jié)點 |
|
Text() |
獲取標(biāo)簽中的文本 |
同級標(biāo)簽可以用li[1] ,li[2] ,li[3]的方式獲取
2.lxml庫
簡單介紹一下lxml庫,接下來會用到它
lxml是一個HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML 數(shù)據(jù)。
lxml和正則一樣,也是用C實現(xiàn)的,是一款高性能的PythonHTML/XML解析器,可以利用之前學(xué)習(xí)的XPath語法,來快速的定位特定元素以及節(jié)點信息。
3.實際案例
隨便爬取一個網(wǎng)站,找到找到網(wǎng)站的html文本
如下圖:

要找到title和href,仔細(xì)觀察可以得到路徑分別是//div[@id="resultList"]/div[@class="el"]/p/span/a/@title
//div[@id="resultList"]/div[@class="el"]/p/span/a/@href
運(yùn)行如下:

三、結(jié)語
Xpath,是在爬蟲中常見的提取數(shù)據(jù)的方式之一,相比于正則,它更加簡單一些,便于操作,xpath的難點在于準(zhǔn)確的確定數(shù)據(jù)所在的位置。
到此這篇關(guān)于一文掌握Python爬蟲XPath語法的文章就介紹到這了,更多相關(guān)Python爬蟲XPath語法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python編程實現(xiàn)下載器自動爬取采集B站彈幕示例
這篇文章主要介紹了使用Python編程來實現(xiàn)一個下載器可以自動爬取采集B站彈幕的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-10-10
Python學(xué)習(xí)筆記_數(shù)據(jù)排序方法
Python對數(shù)據(jù)排序有兩種方法:下面我們來簡單分析下2014-05-05
Python利用PyQt6開發(fā)一個全能的任務(wù)管理器
在數(shù)字化辦公時代,我們每天都要重復(fù)執(zhí)行大量機(jī)械性操作,這些操作不僅浪費(fèi)時間,還容易因人為疏忽出錯,所以本文就來使用PyQt6開發(fā)一個升級的自動化任務(wù)管理器吧2025-04-04
如何使用matplotlib讓你的數(shù)據(jù)更加生動
數(shù)據(jù)可視化用于以更直接的表示方式顯示數(shù)據(jù),并且更易于理解,下面這篇文章主要給大家介紹了關(guān)于如何使用matplotlib讓你的數(shù)據(jù)更加生動的相關(guān)資料,需要的朋友可以參考下2021-11-11
pyecharts實現(xiàn)數(shù)據(jù)可視化
這篇文章主要介紹了pyecharts實現(xiàn)數(shù)據(jù)可視化,pyecharts 是百度開源的,適用于數(shù)據(jù)可視化的工具,配置靈活,展示圖表相對美觀,順滑,下面更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-03-03
詳解Django項目中模板標(biāo)簽及模板的繼承與引用(網(wǎng)站中快速布置廣告)
這篇文章主要介紹了詳解Django項目中模板標(biāo)簽及模板的繼承與引用【網(wǎng)站中快速布置廣告】,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03

