2021-03-28

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模塊的使用

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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容