中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python爬蟲系列之xpath是什么

發布時間:2020-11-24 14:16:03 來源:億速云 閱讀:224 作者:小新 欄目:編程語言

小編給大家分享一下python爬蟲系列之xpath是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

、說到信息篩選我們立馬就會想到正則表達式,不過今天我們不講正則表達式。因為對于爬蟲來講,正則表達式太復雜對新手十分不友好,而且正則表達式的容錯率差,網頁有稍微的改動就得重新寫匹配表達式,另外正則表達式可讀性幾乎沒有。

當然,這并不是說正則不好,只是正則不適合爬蟲和新手。其實正則是十分強大的,在后面的數據清洗里我們會用到正則。

既然正則不能用,那該用什么呢?別擔心,python為我們提供了很多解析 html頁面的庫,其中常用的有:

bs4中的 BeautifulSoup

lxml中的 etree(一個 xpath解析庫)

BeautifulSoup類似 jQuery的選擇器,通過 id、css選擇器和標簽來查找元素,xpath主要通過 html節點的嵌套關系來查找元素,和文件的路徑有點像,比如:

#獲取 id為 tab的 table標簽下所有 tr標簽
path = '//table[@id="tab"]//tr'
#和文件路徑對比
path = 'D:\Github\hexo\source\_posts'

BeautifulSoup和 xpath沒有好壞優劣之分,講 xpath是因為個人覺得 xpath更好用一些,后面如果時間允許的話再講 BeautifulSoup。

現在,讓我們先從 xpath開始!

二、xpath的安裝和使用

安裝 lxml庫

pip install lxml

簡單的使用

在使用 xpath之前,先導入 etree類,對原始的 html頁面進行處理獲得一個_Element對象

我們可以通過_Element對象來使用 xpath

#導入 etree類
from lxml import etree
#作為示例的 html文本
html = '''<div class="container">
                <div class="row">
                    <div class="col">
                        <div class="card">
                            <div class="card-content">
                                <a href="#123333" class="box">
                                    點擊我
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>'''

#對 html文本進行處理 獲得一個_Element對象
dom = etree.HTML(html)

#獲取 a標簽下的文本
a_text = dom.xpath('//div/div/div/div/div/a/text()')

print(a_text)

打印結果

python爬蟲系列之xpath是什么

熟悉 html的朋友都知道在 html中所有的標簽都是節點。一個 html文檔是一個文檔節點,一個文檔節點包含一個節點樹,也叫做 dom樹。

節點樹中的節點彼此擁有層級關系。

父(parent)、子(child)和同胞(sibling)等術語用于描述這些關系。父節點擁有子節點。同級的子節點被稱為同胞(兄弟或姐妹)。

在節點樹中,頂端節點被稱為根(root)

每個節點都有父節點、除了根(它沒有父節點)

一個節點可擁有任意數量的子

同胞是擁有相同父節點的節點

另外,我們把距離某個節點最近的子節點叫做它的直接子節點,如下圖所示的 body和 head就是 html的直接子節點。

python爬蟲系列之xpath是什么

了解了 html結構之后我們再來看 xpath的使用。

首先,我們通過 etree.HTML( )來生成一個_Element對象,etree.HTML() 會將傳入的文本處理成一個 html文檔節點。這樣就能保證我們總是能獲得一個包含文檔節點的_Element對象。

xpath語法

a / b :‘/’在 xpath里表示層級關系,左邊的 a是父節點,右邊的 b是子節點,這里的 b是 a的直接子節點

a // b:兩個 / 表示選擇所有 a節點下的 b節點(可以是直接子節點,也可以不是),在上面的例子中我們要選擇 a標簽是這樣寫的

a_text = dom.xpath('//div/div/div/div/div/a/text()')
#用 //
a_text = dom.xpath('//div//a/text()')
#如果 div標簽下有兩個 a標簽,那么這兩個 a標簽都會被選擇(注意兩個 a標簽并不一定是兄弟節點)
#比如下面的例子中的兩個 a標簽都會被選擇 因為這兩個 a標簽都是 div的子節點
       '''<div class="container">
                <div class="row">
                    <div class="col">
                        <div class="card">
                           <a href="#123332" class="box">
                                    點擊我
                            </a>
                            <div class="card-content">
                                <a href="#123333" class="box">
                                    點擊我
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>'''

[@]:選擇具有某個屬性的節點

//div[@classs], //a[@x]:選擇具有 class屬性的 div節點、選擇具有 x屬性的 a節點

//div[@class="container"]:選擇具有 class屬性的值為 container的 div節點

//a[contains(text(), "點")]:選擇文本內容里含有 “點” 的 a標簽,比如上面例子中的兩個 a標簽

//a[contains(@id, "abc")]:選擇 id屬性里有 abc的 a標簽,如

//a[contains(@y, "x")]:選擇有 y屬性且 y屬性包含 x值的 a標簽

#這兩條 xpath規則都可以選取到例子中的兩個 a標簽
path = '//a[contains(@href, "#123")]'
path = '//a[contains(@href, "#1233")]'

總結

使用 xpath之前必須先對 html文檔進行處理

html dom樹中所有的對象都是節點,包括文本,所以 text()其實就是獲取某個標簽下的文本節點

通過_Element對象的 xpath方法來使用 xpath

注意!!!_Element.xpath( path) 總是返回一個列表

以上是“python爬蟲系列之xpath是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

游戏| 东城区| 济阳县| 襄垣县| 昭觉县| 鸡泽县| 万盛区| 温宿县| 临洮县| 彭州市| 吕梁市| 五峰| 惠水县| 霍山县| 寿宁县| 肥东县| 密云县| 通城县| 通州区| 黑河市| 新宾| 蛟河市| 株洲县| 同德县| 吉林省| 富裕县| 桂东县| 枣阳市| 北海市| 永宁县| 乌鲁木齐市| 五大连池市| 舞阳县| 福州市| 芜湖县| 西丰县| 辛集市| 大厂| 罗平县| 拉孜县| 三穗县|