<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      學會XPath,輕松抓取網頁數據

      一、定義

      XPath(XML Path Language)是一種用于在 XML 文檔中定位和選擇節點的語言。XPath的選擇功能非常強大,可以通過簡單的路徑選擇語法,選取文檔中的任意節點或節點集。學會XPath,可以輕松抓取網頁數據,提高數據獲取效率。

      二、XPath基礎語法

      節點(Nodes): XML 文檔的基本構建塊,可以是元素、屬性、文本等。
      路徑表達式: 用于定位 XML 文檔中的節點。路徑表達式由一系列步驟組成,每個步驟用斜杠 / 分隔。

      XPath的節點是指在XML或HTML文檔中被選擇的元素或屬性。XPath中有7種類型的節點,包括元素節點、屬性節點、文本節點、命名空間節點、處理指令節點、注釋節點以及文檔節點(或稱為根節點)。

      - 元素節點:表示XML或HTML文檔中的元素。例如,在HTML文檔中,<body>、<div>、<p>等都是元素節點。在XPath中,可以使用元素名稱來選擇元素節點,例如://div表示選擇所有的<div>元素。
      
      - 屬性節點:表示XML或HTML文檔中元素的屬性。例如,在HTML文檔中,元素的class、id、src等屬性都是屬性節點。在XPath中,可以使用@符號來選擇屬性節點,例如://img/@src表示選擇所有<img>元素的src屬性。
      
      - 文本節點:表示XML或HTML文檔中的文本內容。例如,在HTML文檔中,<p>標簽中的文本內容就是文本節點。在XPath中,可以使用text()函數來選擇文本節點,例如://p/text()表示選擇所有<p>元素中的文本內容。
      
      - 命名空間節點:表示XML文檔中的命名空間。命名空間是一種避免元素命名沖突的方法。在XPath中,可以使用namespace軸來選擇命名空間節點,例如://namespace::*表示選擇所有的命名空間節點。
      
      - 處理指令節點:表示XML文檔中的處理指令。處理指令是一種用來給處理器傳遞指令的機制。在XPath中,可以使用processing-instruction()函數來選擇處理指令節點,例如://processing-instruction('xml-stylesheet')表示選擇所有的xml-stylesheet處理指令節點。
      
      - 注釋節點:表示XML或HTML文檔中的注釋。注釋是一種用來添加說明和備注的機制。在XPath中,可以使用comment()函數來選擇注釋節點,例如://comment()表示選擇所有的注釋節點。
      
      - 文檔節點:表示整個XML或HTML文檔。文檔節點也被稱為根節點。在XPath中,可以使用/符號來選擇文檔節點,例如:/表示選擇整個文檔節點。
      

      本文使用XML示例如下

      <bookstore>
          <book category='fiction'>
              <title>活著</title>
              <author>余華</author>
              <press>作家出版社</press>
              <date>2012-8-1</date>
              <page>191</page>
              <price>20.00</price>
              <staple>平裝</staple>
              <series>余華作品(2012版)</series>
              <isbn>9787506365437</isbn>
          </book>
          <book category='non-fiction'>
              <title>撒哈拉的故事</title>
              <author>三毛</author>
              <press>哈爾濱出版社</press>
              <date>2003-8</date>
              <page>217</page>
              <price>15.80</price>
              <staple>平裝</staple>
              <series>三毛全集(華文天下2003版)</series>
              <isbn>9787806398791</isbn>
          </book>
          <book category='non-fiction'>
              <title>明朝那些事兒(1-9)</title>
              <author>當年明月</author>
              <press>中國海關出版社</press>
              <date>2009-4</date>
              <page>2682</page>
              <price>358.20</price>
              <staple>精裝16開</staple>
              <series>明朝那些事兒(典藏本)</series>
              <isbn>9787801656087</isbn>
          </book>
      </bookstore>
      

      除了這些基本節點類型之外,XPath還支持使用通配符:

      通配符 描述 示例
      * 匹配任何元素節點 //book/* 選取<book>元素下的任意子元素節點
      @* 匹配任何屬性節點 //book/@* 選取<book>元素上的任意屬性節點,如<book category='fiction'>中的category屬性
      node() 匹配任何類型的節點 //book/node() 選取<book>元素下的所有類型的子節點,包括元素節點、文本節點、注釋節點等

      以及使用謂詞來進一步篩選選擇的節點集。謂詞是一種用來對節點進行過濾和排序的機制,可以包含比較運算符、邏輯運算符和函數等,部分示例如下:

      謂語 描述 示例
      [position()=n] 選取位于指定位置的節點。n 是節點的位置(從 1 開始計數) //book[position()=1] 選取第一個<book>元素
      [last()=n] 選取位于指定位置的最后一個節點。n 是節點的位置(從 1 開始計數) //book[last()=1] 選取最后一個<book>元素
      [contains(string, substring)] 選取包含指定子字符串的節點。string 是節點的文本內容,substring 是要查找的子字符串 //book[contains(title, 'XML')] 選取標題中包含子字符串'XML'<book>元素
      [starts-with(string, prefix)] 選取以指定前綴開始的節點。string 是節點的文本內容,prefix 是要匹配的前綴字符串 //book[starts-with(title, 'The')] 選取標題以'The'開始的<book>元素
      [text()=string] 選取文本內容完全匹配的節點。string 是要匹配的文本內容 //book[text()='Book Title'] 選取文本內容為'Book Title'<book>元素
      [@category='non-fiction'] 選取具有指定屬性值的節點。category 是屬性名稱,non-fiction 是要匹配的值 //book[@category='non-fiction'] 選取具有屬性category值為'non-fiction'<book>元素

      XPath使用路徑表達式來選取XML或HTML文檔中的節點或節點集。下面是一些常用的路徑表達式:

      表達式 描述 示例
      nodename 選取此節點的所有子節點 //bookstore/book 選取<bookstore>元素下所有<book>子元素
      / 從根節點選取直接子節點 /bookstore 從根節點選取<bookstore>元素
      // 從當前節點選取子孫節點 //book 選取所有<book>元素,無論它們在文檔中的位置
      . 選取當前節點 ./title 選取當前節點的<title>子元素
      .. 選取當前節點的父節點 ../price 選取當前節點的父節點的<price>子元素
      @ 選取屬性 //book/@id 選取所有<book>元素的id屬性

      三、XPath使用示例

      選擇所有名稱為title的節點://title
      選擇所有名稱為title,同時屬性lang的值為eng的節點://title[@lang='eng']
      選擇id為bookstore的節點的所有子節點:/bookstore/*
      選擇id為bookstore的節點的所有子孫節點:/bookstore//*
      選擇id為bookstore的節點的直接子節點中的第一個節點:/bookstore/*[1]
      選擇id為bookstore的節點的屬性為category的值:/bookstore/@category

      四、XPath的高級用法

      XPath語言提供了一些高級的功能,包括:

      軸(Axes):XPath提供了幾種軸,用于在文檔中導航。包括child(子元素)、ancestor(祖先元素)、descendant(后代元素)和following-sibling(后續同級元素)等。

      函數:XPath提供了一些內置的函數,如count(),concat(),string(),local-name(),contains(),not(),string-length()等,可以用于處理和操作節點和屬性3。

      條件語句:XPath提供了條件語句(如if-else語句),使得我們可以根據某些條件來選擇性地提取元素或屬性3。

      五、.NET中使用

      // XML 文檔內容
      string xmlContent = @"
                  <bookstore>
                      <book category='fiction'>
                          <title>活著</title>
                          <author>余華</author>
                          <press>作家出版社</press>
                          <date>2012-8-1</date>
                          <page>191</page>
                          <price>20.00</price>
                          <staple>平裝</staple>
                          <series>余華作品(2012版)</series>
                          <isbn>9787506365437</isbn>
                      </book>
                      <book category='non-fiction'>
                          <title>撒哈拉的故事</title>
                          <author>三毛</author>
                          <press>哈爾濱出版社</press>
                          <date>2003-8</date>
                          <page>217</page>
                          <price>15.80</price>
                          <staple>平裝</staple>
                          <series>三毛全集(華文天下2003版)</series>
                          <isbn>9787806398791</isbn>
                      </book>
                      <book category='non-fiction'>
                          <title>明朝那些事兒(1-9)</title>
                          <author>當年明月</author>
                          <press>中國海關出版社</press>
                          <date>2009-4</date>
                          <page>2682</page>
                          <price>358.20</price>
                          <staple>精裝16開</staple>
                          <series>明朝那些事兒(典藏本)</series>
                          <isbn>9787801656087</isbn>
                      </book>
                  </bookstore>";
      
      // 創建 XPath 文檔
      using (XmlReader reader = XmlReader.Create(new StringReader(xmlContent)))
      {
          XPathDocument xpathDoc = new XPathDocument(reader);
      
          // 創建 XPath 導航器
          XPathNavigator navigator = xpathDoc.CreateNavigator();
      
          // 使用 XPath 查詢(選擇所有位于bookstore下、其category屬性值為'fiction'的book元素中的title元素)
          string xpathExpression = "http://bookstore/book[@category='fiction']/title";
          XPathNodeIterator nodes = navigator.Select(xpathExpression);
      
          // 檢查是否有匹配的節點
          if (nodes != null)
          {
              // 遍歷結果
              while (nodes.MoveNext())
              {
                  // 檢查當前節點是否為空
                  if (nodes.Current != null)
                  {
                      Console.WriteLine(nodes.Current.Value);
                  }
              }
          }
      }
      

      運行結果

      六、XPath在自動化測試中的應用

      XPath最常用的場景之一就是在自動化測試中用來選擇HTML DOM節點。例如,在Selenium自動化測試中,可以使用XPath作為選擇web元素的主要方法之一。通過XPath選擇器,可以方便地定位頁面中的任意元素,進行自動化測試操作。

      七、XPath的優勢與不足

      XPath的優勢在于其強大的選擇功能,可以通過簡單的路徑選擇語法,選取文檔中的任意節點或節點集。此外,XPath還支持超過100個內建函數,可用于字符串處理、數值計算、日期和時間比較等等。這些函數可以大大提高數據處理的效率。

      然而,XPath也有其不足之處。首先,XPath對于復雜的文檔結構可能會變得非常復雜,導致選擇語句難以理解和維護。其次,XPath在處理大量數據時可能會出現性能問題,因為它需要遍歷整個文檔來查找匹配的節點。因此,在使用XPath時需要注意優化查詢語句,提高查詢效率。

      八、總結

      學會XPath,可以輕松抓取網頁數據,提高數據獲取效率。本文介紹了XPath的定義、基礎語法、使用示例、高級用法、.NET中使用舉例以及在自動化測試中的應用場景,同時也討論了XPath的優勢與不足。希望本文能夠幫助讀者更好地理解和掌握XPath的使用方法。

      希望以上內容能夠幫助你理解和學習XPath。歡迎點贊、關注、收藏,如果你還有其他問題,歡迎評論區交流。

      posted @ 2023-11-30 10:54  GoodTimeGGB  閱讀(1540)  評論(6)    收藏  舉報
      主站蜘蛛池模板: 久久这里都是精品二| 欧美亚洲另类自拍偷在线拍| 久久永久视频| 在线观看无码av免费不卡网站| 国产日韩综合av在线| 国产午夜大地久久| 久久精品免视看国产成人| 少妇高潮惨叫喷水在线观看| 久久精品熟妇丰满人妻久久| 一卡2卡三卡4卡免费网站| 峨眉山市| 97精品国产91久久久久久久| 少妇高潮喷潮久久久影院| 免费人成在线视频无码| 中文一区二区视频| 麻豆一区二区三区精品视频| 亚洲爆乳精品无码一区二区| 亚洲国产大片永久免费看| 日韩中文字幕高清有码| 18禁无遮挡啪啪无码网站破解版| 国产真人无遮挡免费视频 | 一区二区三区人妻无码 | 亚洲综合精品香蕉久久网| 国产精品日日摸夜夜添夜夜添无码 | 亚洲中文一区二区av| 日本做受高潮好舒服视频| 亚洲国产欧美日韩欧美特级| 伊人久久大香线蕉AV网| 国产中年熟女高潮大集合| 羞羞影院午夜男女爽爽免费视频| 在线播放国产精品一品道| A毛片终身免费观看网站| 亚洲男女内射在线播放| 亚洲人成绝网站色www| 又黄又爽又色的少妇毛片| 国产极品粉嫩馒头一线天| 中文字幕乱码一区二区免费| 国产午夜亚洲精品国产成人| 久热天堂在线视频精品伊人| 国产免费一区二区三区在线观看 | 国产麻豆一区二区精彩视频|