摘要:[ASP.NET] 好用的HTML Paser - Html Agility Pack
之前朋友希望能幫他抓每日的一些股價,
就發現了這個好用的HTML Paser,主要是用XPath來抓取要的資料,
(如果不清楚XPath的,點連結可以參考)
它可以用XPath擷取網頁上的任何資料,就不用再用分割字串割來割去的,
網址: http://htmlagilitypack.codeplex.com/
下載完成解壓縮後可以把其中的HtmlAgilityPack.dll,放到所需要的專案中(bin資料夾),
雖然到他的下載區還有一個 HAP Explorer 的XPath解析器,讓你可以看到你想要的XPath,而不用自己在那邊慢慢算,
可是我覺得不是很好用,可能我用的不習慣,現在有很多XPath的解析器,
我比較習慣使用Firefox(FF)的XPath附加元件,
請用FF到 https://addons.mozilla.org/zh-TW/firefox/ 搜尋XPath,就可以找到一堆,
我是用https://addons.mozilla.org/zh-TW/firefox/addon/1192/ 這套,
直接示範如何使用比較快,找了小小郭的新聞來示範一下,
選你要的部分,按下滑鼠右鍵,選「Show In XPather」,就可以看到解析結果,
都準備好後,就可以來試試看Html Agility Pack ,
如果是VB請記得加上Imports HtmlAgilityPack,C#的話就是加上using HtmlAgilityPack;
拿剛剛小郭的新聞標題來示範,
01
Friend Sub HTMLPrint()
02
' 下載你要的網頁資料,這裡是用小小郭的新聞
03
Dim client As New WebClient()
04
Dim ms As New MemoryStream(client.DownloadData("http://tw.news.yahoo.com/article/url/d/a/100817/78/2b8i6.html"))
05
06
' 使用預設編碼讀入 HTML
07
Dim HtmlPage As New HtmlDocument()
08
'選擇編碼
09
HtmlPage.Load(ms, Encoding.UTF8)
10
11
Dim HtmlText As New HtmlDocument()
12
13
'帶入XPath
14
HtmlText.LoadHtml(HtmlPage.DocumentNode.SelectSingleNode("/html/body/div[@id='bdbg']/div[@id='bd']/div[@id='main']/div[@id='pri']/div[@id='ynwsart']/div[2]").InnerHtml)
15
16
Dim Str As String() = HtmlText.DocumentNode.SelectSingleNode("./h1").InnerText.Trim().Split(ControlChars.Lf)
17
18
My.Response.Write(Str(0).Trim())
19
20
HtmlPage = Nothing
21
HtmlText = Nothing
22
client = Nothing
23
ms.Close()
24
End Sub
25
26
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
27
HTMLPrint()
28
End Sub

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

這樣就可以秀出我們要的標題,還不錯用
END ...