pyhton爬蟲(9)——使用XPath提取網頁資訊
阿新 • • 發佈:2019-01-26
1. XPath基礎
1.1 什麼是XPath?
XPath 是一門在 XML 文件中查詢資訊(節點)的語言。XPath 可用來在 XML 文件中對元素和屬性進行遍歷。
1.2 節點
節點是XPath提取XML文件資訊的最小單位,一共有7種:
(1)元素節點(element)
(2)屬性節點(attribute)
(3)文字節點(text)
(4)名稱命名節點(namespace)
(5)處理命令節點(processing-instruction)
(6)註釋節點(comment)
(7)根節點(root)
1.3 節點關係
(1)父節點(parent):每個元素以及屬性都有一個父節點。
(2)子節點(child):元素節點可以有零個、一個或多個子節點。
(3)同胞節點(sibling): 擁有相同的父的節點。
(4)前輩節點(ancestor):某節點的父節點的父節點。
(5)後代(descendant):某節點的子節點的子節點。
1.4 XPath 基本用法
1.4.1 基本語法:
(1)//(雙斜槓):定位根節點,會對全文進行掃描,在文件中選取所有符合條件的內容,以列表的形式返回。
(2)/(單斜槓):尋找當前標籤路徑的下一層路徑標籤或者對當前路標籤內容進行操作 。
(3) /text():獲取當前路徑下的文字內容 。
(4)/@xxxx:提取當前路徑下標籤的屬性值
(5) | 可選符:使用|可選取若干個路徑 如//p | //div 即在當前路徑下選取所有符合條件的p標籤和div標籤。
(6). 點:用來選取當前節點 。
(7)..(雙點):選取當前節點的父節點 。
(8)“*”(萬用字元):表示匹配任何元素節點。
(9)“@*”(萬用字元):表示匹配任何屬性值。
(10)“node()”(萬用字元):表示匹配任何型別的節點。
1.4.2 XPath提取元素示例
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 18 10:23:19 2017
@author: Administrator
"""
from lxml import etree
text = '''<html>
<div class="large" id="content">
<span>A line of text</span><br/>
<span><a href="http://google.com">A link</a></span>
</div>
<div class="short" id="footer">
</div>
</html>
'''
html = etree.HTML(text)
#result1 = etree.tostring(html)
#print(result1)
#(1)提取class屬性值為large的div標籤中的id屬性值
print("id屬性值:",html.xpath('//div[@class="large"]/@id')[0])
#(2)提取第一個span標籤中的文字資訊
print("第一個span標籤中的文字資訊:",html.xpath('//span/text()')[0])
#(3)提取第二個span標籤中的連結
print("第二個span標籤中的連結:",html.xpath('//span/a/@href')[0])
執行結果如下圖所示: