提供一個我抓取銀行匯率的作法供您參考
我是撰寫 VB.Net 的 AP,在上頭放一個 Web Browser Control
首先讓 Browser 去連覽網頁
<pre class="c" name="code">WebBrowser1.Navigate(My.Settings.RateURL)
然後在 WebBrowser1 的 DocumentCompleted 事件撰寫 Parsing 程式
主要是判斷您要得資訊是存在哪一個儲存格(TD Cell)然後透過 .innerText 的方式,將值取出
這是一般網頁沒有提供 XML data 時的作法,缺點是當網頁格式變動程式也要跟著修改,而且這樣做其實是有點偷懶,沒有真正利用 DOM 的結構(程式還可以更精進一些)
另外要如何去抓取到正確的 cell?可以透過 IE 的 Web Developer Toolbar 或 Firefox 的 Firebug 來解析 DOM 的結構
<pre class="c" name="code">
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Try
Dim objDocument As HtmlDocument
Dim allTDs As Object
objDocument = WebBrowser1.Document
allTDs = objDocument.GetElementsByTagName("td")
If Not allTDs Is Nothing Then
oRate.usd_in = CDbl(allTDs.Item(My.Settings.usd_in).innerText)
oRate.usd_out = CDbl(allTDs.Item(My.Settings.usd_out).innerText)
oRate.hkd_in = CDbl(allTDs.Item(My.Settings.hkd_in).innerText)
oRate.hkd_out = CDbl(allTDs.Item(My.Settings.hkd_out).innerText)
oRate.jpd_in = CDbl(allTDs.Item(My.Settings.jpd_in).innerText)
oRate.jpd_out = CDbl(allTDs.Item(My.Settings.jpd_out).innerText)
oRate.eur_in = CDbl(allTDs.Item(My.Settings.eur_in).innerText)
oRate.eur_out = CDbl(allTDs.Item(My.Settings.eur_out).innerText)
oRate.rmb_in = CDbl(allTDs.Item(My.Settings.rmb_in).innerText)
oRate.rmb_out = CDbl(allTDs.Item(My.Settings.rmb_out).innerText)
oRate.rate_date = Format(Now().AddDays(1), "yy/MM/dd")
oRate.Update_Rate() ' 更新 ERP 匯率資料
End If
WebBrowser1.Dispose()
Catch ex As Exception
ExceptionHandler(ex, Application.ProductName & ":" & Me.Name & ":WebBrowser1_DocumentCompleted")
Finally
oRate = Nothing
End
End Try
End Sub
可以透過排程的方式,每天固定時間去讀取運彩網站的資料,將讀取到的資料儲存在您的 Database 中,網頁直接將 Database 中的資料 Show 出即可
另外不透過這種方式,您可能要在網頁的程式中寫一個 Parser 去 Parsing 運彩網站的網頁資料,然後透過 CSS 將資料整合在你的網頁中,這樣資料是同步的,但 Sorry 我沒有這樣做過
http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=75455
不曉得你是用那種語言開發,可以參考一下天使大大的作品~~挺經典的