xpath入門
xpath介紹
- 說白了,xpath就是一種可以根據(jù)地址找人的技術(shù) 確定的路徑
一.基本概念
-
XPath:
XPath(XML Path Language)是一種XML的查詢語言,他能在XML樹狀結(jié)構(gòu)中尋找節(jié)點。XPath 用于在 XML 文檔中通過元素和屬性進行導(dǎo)航
-
xml:
xml是一種標記語法的文本格式,xpath可以方便的定位xml中的元素和其中的屬性值。
-
lxml:
lxml是一個Python第三方的庫 它可以把這個html文本轉(zhuǎn)換成xml對象(element對象) 使用xpath語法進行導(dǎo)航了
二.工具安裝
- chrome 插件 xpath-helper
1 chrome://extensions/ 擴展程序
2 之間拖拽文件安裝, 如果拖拽文件無法安裝,那么把文件的后綴 crx --> rar
3 雙擊解壓,解壓到文件夾
4 擴展程序里面 點擊第一個選項 (加載已解壓的擴展程序)
注意 開發(fā)者的選項是否打開 解壓的文件不要刪除 否則這個插件使用不了
工具使用快捷鍵:ctrl + shift + x
如果沖突則關(guān)掉其它的快捷鍵
三、xpath快速入門

image.png
/ 從根節(jié)點選取
如:https://www.baidu.com/,以下粟子都是百度網(wǎng)
-
/html/head/title --->百度一下,你就知道
*/html/head/title/text() --->百度一下,你就知道
image.png
/ / 不要考慮位置
@class="OFznuI WBEMXo"選取某個屬性
[] 謂語 用來查找某個特定的節(jié)點或者包含某個指定的值的節(jié)點 謂語被鑲嵌在方括號當中
- //div[@class="OFznuI WBEMXo"]/a --->BOSS直聘 2021-05 黑馬程序員 2021-05

image.png
.和 ..基本上和dos命令差不多

image.png

image.png

image.png

image.png

image.png
四. lxml模塊的使用
- 安裝: pip install lxml 或 pip install lxml -i https://pypi.douban.com/simple
lxml python 官方文檔:http://lxml.de/index.html
image.png
-
作用
- from lxml import etree
- 得到相應(yīng)結(jié)果 網(wǎng)頁源碼
- etree.HTML(網(wǎng)頁源碼) ---> 返回一個 element對象
- element對象 就可以使用xpath進行導(dǎo)航了
在Python中,我們安裝lxml庫來使用XPath 技術(shù)
lxml 是 一個HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML數(shù)據(jù)利用etree.HTML,將字符串轉(zhuǎn)化為Element對象
四.粟子
from lxml import etree
import csv
wb_data = """
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
"""
element = etree.HTML(wb_data)
# print(element) # <Element html at 0x2883dc8>
# 獲取li標簽下面的href屬性
links = element.xpath('//li/a/@href')
# print(links) #['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
# 獲取li標簽下a標簽的文本數(shù)據(jù)
result = element.xpath('//li/a/text()')
# print(result) #['first item', 'second item', 'third item', 'fourth item', 'fifth item']
# 將結(jié)果保存到CSV當中
# 準備工作
# 需求把結(jié)果組合到字典當中,如 {'href':'link1.html','title':'first item'} {'href':'link2.html','title':'second item'}... 將結(jié)果保存到csv文件當中
# 并將字典放入一個列表中
lst=[]
for link in links:
d = {}
d['href'] = link
# print(d)
# print(links.index(link))# 獲取下標索引值
# print(result[links.index(link)])
d['title'] = result[links.index(link)]
# print(d)
# 把爬取到的數(shù)據(jù)添加到列表中
lst.append(d)
print(lst)
titles = ('href','title') #標題行
with open('練習(xí).csv','w',encoding='utf-8',newline='') as file_obj:
writer = csv.DictWriter(file_obj,titles)
writer.writeheader()
writer.writerows(lst)

