iT邦幫忙

0

運動彩賠率自動抓取

ydasam 2008-11-18 23:43:1211841 瀏覽

我想寫個網站討論運動彩券 ,但我不知道如何自動抓取北富銀運動彩券的賠率和比賽結果 ,我有問過北富銀 ,他們說沒有提供 xml檔案 ,只有在網頁上顯示 ,不曉得各位大大有沒有什麼建議??

北富銀運動彩券網站
http://www.i-win.com.tw/

2 個回答

24
jamesjan
iT邦高手 1 級 ‧ 2008-11-19 09:46:13
最佳解答

提供一個我抓取銀行匯率的作法供您參考
我是撰寫 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 我沒有這樣做過

12
wawaho
iT邦新手 4 級 ‧ 2008-11-19 15:42:54

http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=75455
不曉得你是用那種語言開發,可以參考一下天使大大的作品~~挺經典的

我要發表回答

立即登入回答