前言
XPath是Python爬蟲最重要的過濾原始數據的手段之一,是爬蟲最核心的技術
是專業抓取HTML頁面而生的,基本上只用于抓取HTML頁面使用
目錄
安裝支持XPath三方庫lxml
XPath代碼入門示例
XPath表達式語法
在源代碼上面直接獲取XPath
安裝支持XPath三方庫lxml
pip install?lxml -i?https://pypi.tuna.tsinghua.edu.cn/simple
XPath代碼入門示例
from lxml import etreedata = "請求網頁返回的源代碼HTML數據"#使用 lxml 庫中的 etree 模塊使用XPath解析data數據
datas = etree.HTML(data)#返回的數據一般都是數據,即使是一個數據也是一個數組形式
res = datas.xpath('xpath表達式')#res這個數組里面的數據就是我們過濾好的目標數據
print(res)
XPath表達式語法
編寫好的XPath表達式一般我們填入xpath()這個方法的適合習慣單引號,因為我們里面準備填寫HTML里面的屬性的時候我們習慣給雙引號
XPath語法是按HTML頁面的層級標簽關系進行匹配的
?/? ? ? ? ? ? ? ? 從根節點開始的絕對路徑
//? ? ? ? ? ? ? ? 匹配任意層級的節點
./? ? ? ? ? ? ? ? 表示從當前節點開始的相對路徑
HTML標簽后面是可以跟坐標的,坐標是從1開始的
? ? ? ? 如 /html/body/p[1]/text()? ? ?
????????????????就是使用絕對路徑,從html標簽根路徑開始,html標簽下的body標簽下的第一個p標簽的內容text()
? ? ? ? 如//p[1]
? ? ? ? ? ? ? ? 就是使用模糊匹配,匹配到HTML文件中的所有第一個P標簽的內容text()
標簽[@屬性名="屬性值"]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可以精確匹配具體的標簽,確定好屬性名和屬性值的唯一性
標簽[contains(@屬性名,"屬性值")]? ? ? ? ? ? ? ? ? ? ? ?對屬性值進行模糊匹配,可以匹配多個標簽
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
/@屬性名? ? ? ? ? ? 取這個標簽該屬性值
/text()? ? ? ? ? ? ? ? ? 取這個標簽的內容
在源代碼上面直接獲取XPath
不推薦,不美觀而且使用起來不夠靈活
Python請求的HTML有可能是懶加載的,導致請求的HTML字符串與頁面源代碼不符,導致使用不了
所以還是盡量自己可以按照XPath表達式語法自己編寫,實際問題實際分析