none
關於 HTML Agility Pack 的問題 RRS feed

  • 問題

  • 查了網路資料之後,發現Xpath的用法的確很好用

    但是如果網頁結構變化了,該如何動作呢?

    2013年6月10日 下午 03:03

解答

  • 有些網站 像是一些人力銀行網頁,為了防止他人從遠端抓取網頁解析資料,將資料存入自己的資料庫,所以會定期或不定期變更網頁結構,若網頁結構變化了,當然是重新擷取和分析,因為對方網站也許根本不同意提供解析資料,若正常情形會提供Web Service、WCF讓他人呼叫或存取資料.

    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月10日 下午 03:58
  • 也可以從xpath去改變,這要看實際的狀況,因為看當時的階層結構的變化去測試和改變,對方會一直更新,就是有警覺性了,開發人員當然要跟著變. 因為抓錯節點,程式解析資料就會出錯,或擷取不到資料.
    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月10日 下午 04:18
  • 例如若原來的xpath: XmlNodeList nodes = xml.SelectNodes("/Names/Name[position() <= 5]");

    當結構改變當然要改變,例如 XmlNodeList nodes= xml.SelectNodes("/Names/Customers/Name[position() <= 5]");

    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月11日 上午 03:15
  • 沒有算座標的功能,他是類似XPath 和 XML DOM Parser 類似,就是要計算樹狀的架構節點,這有詳細的範例和完整的說明,自行測試 http://msdn.microsoft.com/zh-tw/ee787055.aspx

    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月11日 下午 12:57
  • 不同的網頁結構不一樣,不一定能套用在每個頁面,要去測試就知道結果

    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月12日 下午 01:02

所有回覆

  • 有些網站 像是一些人力銀行網頁,為了防止他人從遠端抓取網頁解析資料,將資料存入自己的資料庫,所以會定期或不定期變更網頁結構,若網頁結構變化了,當然是重新擷取和分析,因為對方網站也許根本不同意提供解析資料,若正常情形會提供Web Service、WCF讓他人呼叫或存取資料.

    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月10日 下午 03:58
  • 有些網站 像是一些人力銀行網頁,為了防止他人從遠端抓取網頁解析資料,將資料存入自己的資料庫,所以會定期或不定期變更網頁結構,若網頁結構變化了,當然是重新擷取和分析,因為對方網站也許根本不同意提供解析資料,若正常情形會提供Web Service、WCF讓他人呼叫或存取資料.

         Dear Mark Shu

          那就不能從xpath下手了...,還是得從產生DOM Tree開始下手呢...

          感謝您! 要是一直更新的話,開發人員不就要一直Debug了??

    2013年6月10日 下午 04:04
  • 也可以從xpath去改變,這要看實際的狀況,因為看當時的階層結構的變化去測試和改變,對方會一直更新,就是有警覺性了,開發人員當然要跟著變. 因為抓錯節點,程式解析資料就會出錯,或擷取不到資料.
    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月10日 下午 04:18
  •     Dear Mark Shu

        從xpath去改變??

    2013年6月11日 上午 02:33
  • 例如若原來的xpath: XmlNodeList nodes = xml.SelectNodes("/Names/Name[position() <= 5]");

    當結構改變當然要改變,例如 XmlNodeList nodes= xml.SelectNodes("/Names/Customers/Name[position() <= 5]");

    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月11日 上午 03:15
  • 例如若原來的xpath: XmlNodeList nodes = xml.SelectNodes("/Names/Name[position() <= 5]");

    當結構改變當然要改變,例如 XmlNodeList nodes= xml.SelectNodes("/Names/Customers/Name[position() <= 5]");

          Dear Mark Shu

           感謝您!我大概知道,那Html Agility Pack 他屬性有可以算出網頁上那些Element的物件座標嗎...?

           我查不到囧

    2013年6月11日 上午 11:45
  • 沒有算座標的功能,他是類似XPath 和 XML DOM Parser 類似,就是要計算樹狀的架構節點,這有詳細的範例和完整的說明,自行測試 http://msdn.microsoft.com/zh-tw/ee787055.aspx

    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月11日 下午 12:57
  • 沒有算座標的功能,他是類似XPath 和 XML DOM Parser 類似,就是要計算樹狀的架構節點,這有詳細的範例和完整的說明,自行測試 http://msdn.microsoft.com/zh-tw/ee787055.aspx

           感謝您!,那請問您一下,如果套用在每個新聞網頁都可以嗎?

           還是說去弄一個選擇性的函數?

           還說用 try.....catch   ??

    2013年6月12日 下午 12:40
  • 不同的網頁結構不一樣,不一定能套用在每個頁面,要去測試就知道結果

    • 已標示為解答 阿刃 2013年6月13日 下午 12:07
    2013年6月12日 下午 01:02
  • 謝謝您!

    您是我的救星!^o^

    2013年6月13日 下午 12:06