全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3244
推到 Plurk!
推到 Facebook!

如何在一網頁持續進行搜尋並取出想要之資料?

 
vbkiller
一般會員


發表:65
回覆:28
積分:18
註冊:2007-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-13 00:53:53 IP:220.131.xxx.xxx 訂閱
我是醫院藥師,每個月有一煩惱之工作那就是修改醫院藥品及特殊材料之健保價,我醫院藥品約有500項,特殊材料約有100項,而我目前作法是用ie到健保局之搜尋網頁,然後輸入我醫院每一項藥品之藥品代號(或特殊材料代號),等結果網頁出現我就先用小紙條記錄下來,之後到醫院藥品資料庫去修改健保價(如果健保價有變動),但600項藥品及特殊材料之查詢就要耗掉我兩天的時間,但有變動健保價通常不到100項,但又不得不要全部查詢,請教大家能透過寫程式來完成嗎?
ps: 搜尋結果網頁似乎是一個asp檔,
搜尋網頁網址:http://www.nhi.gov.tw/inquire/query1.asp?menu=1&menu_id=8
瞬間融化
一般會員


發表:0
回覆:1
積分:0
註冊:2007-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-13 01:17:50 IP:222.129.xxx.xxx 訂閱
您可以使用Delphi的IDHTTP組件來設計您的程式
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-13 09:50:02 IP:210.241.xxx.xxx 訂閱
程式提示
procedure TForm1.Button1Click(Sender: TObject);
var
data: TIdMultiPartFormDataStream;
begin
data := TIdMultiPartFormDataStream.Create;
try
data.AddFormField('Q1_ID', '27392739'); // 藥品代碼 Q1_ID
Memo1.Lines.Text := IdHTTP1.Post('http://www.nhi.gov.tw/inquire/query1_list.asp', data);
// 接下來要從 Memo1 中找出價格
finally
data.Free;
end;
end;

其實可以將要查詢的代碼全部放 Memo2, 用迴圈去查詢, 傳回網頁放 Memo1 進行分析, Memo3 放每一個查詢結果的價格
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-13 09:51:34 IP:220.228.xxx.xxx 訂閱
當然可以,只是要自己寫程式來拆解該網站的查詢內容。
一般,我都是用WebBrowser來做,透過它即有的物件架構來層層解析,此方式較方便,也較容易,只是前提是你要瞭解其物件架構,才不會不知要如何做。其物件架構可至MSDN查詢。

另一個做法,也就是用IdHTTP去取得原始的HTML檔案回來解析,此方式,我個人覺得較不方便使用。因為,要自己去解析HTML。
且個人覺得此只適用於較簡單的HTML網頁。

這二種方式,之前都有人POST過,所以,你可搜尋一下,會找到許多的文章。
如:第一種方式,可搜尋:WebBrowser、IHTMLDocument2、IHTMLDocument3、GetElementByID……等等。


另一種最好的做法,我是覺得,該網站如果能提供一個Web Service的話,那就不需要這麼麻煩了。
只是,對方可能都不會提供,因為,這沒在他們的功能需求之內。


------
GPS(全球衛星定位系統)
http://www.allgps.com
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-13 09:52:25 IP:210.241.xxx.xxx 訂閱
應該還好分析, 價格前面欄位內出現的不是 "單方", 就是 "複方"
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
vbkiller
一般會員


發表:65
回覆:28
積分:18
註冊:2007-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-15 23:56:54 IP:220.131.xxx.xxx 訂閱
謝謝 瞬間融化,pcboy,Clarinet的指教:
我還有幾點疑問想再次請教各位

1.查詢藥品代號所返回之結果頁原始碼,似乎有一定之結構且僅是一筆記錄,如先顯示各欄位名,接著依次序顯示欄位值,delphi中是否已有現成元件來解讀結果頁之內容並讓你容易存取各欄位名及各欄位值,而無須自己寫程式碼來存取各欄位值

2.用indy之idhttp或webrowser那個較容易完成我的目標

pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-03-16 10:04:54 IP:210.241.xxx.xxx 訂閱
1.沒有方便的元件, 而且你需要的不是只有價錢嗎 ?
2.見人見智吧 ~ 你自己去試看看你喜歡哪種
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
vbkiller
一般會員


發表:65
回覆:28
積分:18
註冊:2007-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-03-18 17:46:27 IP:218.164.xxx.xxx 訂閱
pcboy 你好:
依照你的程式碼去測試,結果不行.
vbkiller
一般會員


發表:65
回覆:28
積分:18
註冊:2007-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-03-18 17:55:53 IP:218.164.xxx.xxx 訂閱
Clarinet 你好:
我用webbrowser來做,連到http://www.nhi.gov.tw/inquire/query1.asp?menu=1&menu_id=8可以,但要在藥品代號欄位指定一藥品代號並送出頁,總是失敗,你可否用程式碼舉例,謝謝.
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-03-18 22:39:58 IP:220.143.xxx.xxx 訂閱
我正好有這需求,試用webbrpwser,並連上http://www.nhi.gov.tw/inquire/query1.asp?menu=1&menu_id=8,之後試著存取網頁中之輸入框,結果不行,當然也就無法在輸入框輸入一值,當然也無法呼叫開始查詢鈕之方法onclick,這要怎麼做呢?有無程式碼供參考?
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-03-19 09:34:16 IP:220.228.xxx.xxx 訂閱
請參考下面二個連結的作法
http://delphi.ktop.com.tw/board.php?cid=30&fid=67&tid=35576
http://delphi.ktop.com.tw/board.php?cid=30&fid=67&tid=35496


依此類推,其餘的,搜尋一下關鍵字,就會有許多。
------
GPS(全球衛星定位系統)
http://www.allgps.com
vbkiller
一般會員


發表:65
回覆:28
積分:18
註冊:2007-03-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-03-20 01:01:20 IP:220.131.xxx.xxx 訂閱
clarinet你好:
我甚至無法存取藥品代號欄位(Q1_ID),更不用說呼叫submit方法了,可否列出code以供參考,3Q
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-03-20 07:14:54 IP:203.204.xxx.xxx 訂閱
您有
uses
IdMultipartFormData;

您有放 IdHTTP , Button, Memo1 元件嗎 ?
您的程式碼寫什麼 ? (小弟給您的只是技術層面的做法, 並非幫您把程式寫出來)
錯誤訊息是什麼 ?
小弟測試一下可以正常傳回網頁內容啊

http://www.nhi.gov.tw/inquire/query1.asp 網頁剛剛測試 已經無法用 單一 藥品代號查詢了

===================引 用 文 章===================
pcboy 你好:
依照你的程式碼去測試,結果不行.
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-03-20 09:53:29 IP:220.228.xxx.xxx 訂閱
var
Doc, Edit :OleVariant;
begin
Doc :=WB.Document;
Edit :=Doc.GetElementsByName('Q1_ID');//藥品代碼
//取回來的為IHTMLElementCollection 介面,
//只有一個"Q1_ID",所以,直接取用第一個,即為"藥品代碼"的物件
Edit :=Edit.item(0);
Edit.Value :='123';//此為藥品代碼物件,所以,指定其值

.................
其餘的請自行測試

或搜尋一下論譠有各種用法。
------
GPS(全球衛星定位系統)
http://www.allgps.com
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-03-20 12:20:47 IP:210.241.xxx.xxx 訂閱
這兩個是抓網頁回來分析的程式, 有 Source Code, 您可以參考
[發表] WhatIsMyIP 顯示電腦的真實 IP ( WAN IP)
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=85382

[發表] GetRealIP 顯示電腦的真實 IP ( WAN IP)
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=85381

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-05-03 15:49:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!