日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

05-xpath爬虫数据解析

發布時間:2024/9/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 05-xpath爬虫数据解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Xpaht數據解析
XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。
XPath 是 W3C XSLT 標準的主要元素,并且 XQuery 和 XPointer 都構建于 XPath 表達之上。
因此,對 XPath 的理解是很多高級 XML 應用的基礎。
xpath學習網址:https://www.w3school.com.cn/xpath/index.asp
XPath 開發工具
Chrome插件 XPath Helper

  • 環境安裝
    • pip install lxml
  • 解析原理:html標簽是以樹狀的形式進行展示
    • 1.實例化一個etree對象,且將待解析的頁面源碼數據加載到該對象中。
    • 2.調用etree對象的xpath方法結合著不同的xpath表達式實現標簽的定位和數據提取
  • 實例化etree對象
    • etree.parse(‘filename’):將本地html文檔加載到該對象中
    • etree.HTML(‘page_text’):網站獲取的頁面數據加載到該對象中
  • 標簽定位:
    • xpath 語法中,整個HTML文檔根節點用’/‘表示,如果我們想選擇的是根節點下面的html節點,則可以在搜索框輸入
/html

如果輸入下面的表達式

/html/body/div

這個表達式表示選擇html下面的body下面的div元素。

注意/有點像 CSS中的>, 表示直接子節點關系。

絕對路徑選擇
從根節點開始的,到某個節點,每層都依次寫下來,每層之間用 / 分隔的表達式,就是某元素的 絕對路徑

上面的xpath表達式/html/body/div,就是一個絕對路徑的xpath表達式, 等價于 css表達式 html>body>div

相對路徑選擇
有的時候,我們需要選擇網頁中某個元素, 不管它在什么位置 。

比如,選擇示例頁面的所有標簽名為 div的元素,如果使用css表達式,直接寫一個 div就行了。

那xpath怎么實現同樣的功能呢? xpath需要前面加// , 表示從當前節點往下尋找所有的后代元素,不管它在什么位置。

所以xpath表達式,應該這樣寫://div

//符號也可以繼續加在后面,比如,要選擇 所有的 div 元素里面的 所有的 p 元素 ,不管div 在什么位置,也不管p元素在div下面的什么位置,則可以這樣寫//div//p

如果,要選擇 所有的 div 元素里面的 直接子節點 p , xpath,就應該這樣寫了//div/p
如果使用CSS選擇器,則為 div > p

通配符
如果要選擇所有div節點的所有直接子節點,可以使用表達式 //div/*

星號*是一個通配符,對應任意節點名的元素,等價于CSS選擇器 div > *

根據屬性選擇

Xpath 可以根據屬性來選擇元素。

根據屬性來選擇元素 是通過 這種格式來的 [@屬性名=‘屬性值’]

注意:

屬性名注意前面有個@

屬性值一定要用引號, 可以是單引號,也可以是雙引號

根據id屬性選擇

選擇 id 為 west 的元素,可以這樣 //*[@id='west']

根據class屬性選擇

選擇所有 select 元素中 class為 single_choice 的元素,可以這樣 //select[@class='single_choice']

如果一個元素class 有多個,比如

<p id="beijing" class='capital huge-city'>北京 </p>

如果要選 它, 對應的 xpath 就應該是//p[@class="capital huge-city"]

不能只寫一個屬性,像這樣//p[@class="capital"]則不行

根據其他屬性

同樣的道理,我們也可以利用其它的屬性選擇

比如選擇 具有multiple屬性的所有頁面元素 ,可以這樣//*[@multiple]

屬性值包含字符串

要選擇 style屬性值 包含 color 字符串的 頁面元素 ,可以這樣//*[contains(@style,'color')]

要選擇 style屬性值 以 color 字符串 開頭 的 頁面元素 ,可以這樣 //*[starts-with(@style,'color')]

要選擇 style屬性值 以 某個 字符串 結尾 的 頁面元素 ,大家可以推測是//*[ends-with(@style,'color')], 但是,很遺憾,這是xpath 2.0 的語法 ,目前瀏覽器都不支持

按次序選擇
xpath也可以根據次序選擇元素。 語法比css更簡潔,直接在方括號中使用數字表示次序

比如
某類型 第幾個 子元素

比如

要選擇 p類型第2個的子元素,就是//p[2]
注意,選擇的是 p類型第2個的子元素 , 不是 第2個子元素,并且是p類型 。
注意體會區別
再比如,要選取父元素為div 中的 p類型 第2個 子元素//div/p[2]

第幾個子元素

也可以選擇第2個子元素,不管是什么類型,采用通配符

比如 選擇父元素為div的第2個子元素,不管是什么類型//div/*[2]
某類型 倒數第幾個 子元素

當然也可以選取倒數第幾個子元素

比如:

選取p類型倒數第1個子元素//p[last()]
選取p類型倒數第2個子元素//p[last()-1]
選擇父元素為div中p類型倒數第3個子元素//div/p[last()-2]

范圍選擇

xpath還可以選擇子元素的次序范圍。

比如,

選取option類型第1到2個子元素//option[position()<=2]

或者

//option[position() < 3]

選擇class屬性為multi_choice的前3個子元素

//*[@class='multi_choice']/*[position()<=3]

選擇class屬性為multi_choice的后3個子元素

//*[@class='multi_choice']/*[position()>=last()-2]

為什么不是 last()-3 呢? 因為

last() 本身代表最后一個元素

last()-1 本身代表倒數第2個元素

last()-2 本身代表倒數第3個元素

組選擇、父節點、兄弟節點

組選擇

css有組選擇,可以同時使用多個表達式,多個表達式選擇的結果都是要選擇的元素

css 組選擇,表達式之間用 逗號 隔開

xpath也有組選擇, 是用 豎線 隔開多個表達式

比如,要選所有的option元素 和所有的 h4 元素,可以使用

//option | //h4

等同于CSS選擇器option , h4

再比如,要選所有的 class 為 single_choice 和 class 為 multi_choice 的元素,可以使用

//*[@class='single_choice'] | //*[@class='multi_choice']

等同于CSS選擇器.single_choice , .multi_choice

選擇父節點

xpath可以選擇父節點, 這是css做不到的。

某個元素的父節點用/.. 表示

比如,要選擇 id 為 china 的節點的父節點,可以這樣寫 //*[@id='china']/..

當某個元素沒有特征可以直接選擇,但是它有子節點有特征, 就可以采用這種方法,先選擇子節點,再指定父節點。

還可以繼續找上層父節點,比如 //*[@id='china']/../../..

兄弟節點選擇

前面學過 css選擇器,要選擇某個節點的后續兄弟節點,用 波浪線

xpath也可以選擇 后續 兄弟節點,用這樣的語法 following-sibling::

比如,要選擇 class 為 single_choice 的元素的所有后續兄弟節點 //*[@class='single_choice']/following-sibling::*
等同于CSS選擇器 .single_choice ~ *

如果,要選擇后續節點中的div節點, 就應該這樣寫//*[@class='single_choice']/following-sibling::div

xpath還可以選擇 前面的 兄弟節點,用這樣的語法preceding-sibling::

比如,要選擇 class 為 single_choice 的元素的所有前面的兄弟節點//*[@class='single_choice']/preceding-sibling::*

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的05-xpath爬虫数据解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。