iT邦幫忙

2

請教使用C#用htmlagilitypack 抓取銀行匯率問題

c#

大大們好~ 小弟近日因工作關係,需要C# 用htmlagilitypack抓取銀行匯率資料,
銀行網址:https://wwwfile.megabank.com.tw/other/bulletin02_02.asp
例如:抓美金[USD] 即期買匯,查出Copy XPath是 //*[@id="contentTbody"]/tr[1]/td[2]

我C# Code如下:
WebClient url = new WebClient();
MemoryStream ms = new MemoryStream(url.DownloadData("https://wwwfile.megabank.com.tw/other/bulletin02_02.asp"));
..
..
//下面這行會出錯:並未將物件參考設定為物件的執行個體。
string txt0 = doc.DocumentNode.SelectSingleNode("//*[@id='contentTbody']/tr[1]/td[2]").InnerText
..
..
請問大大我該如何正確設定SelectSingleNode的XPath ?抓取匯率資料一直失敗,懇請大大們解惑,謝謝

1 個回答

6
fysh711426
iT邦研究生 4 級 ‧ 2018-07-28 16:39:13

錯誤原因:

  • 網站的匯率 Table 是用 AJAX 取得資料後動態產生的,因此 WebClient 抓到的網站原始碼並不會有匯率 Table。

解法:

  • 可以搜尋看看 HttpWebRequestCookieContainer
看更多先前的回應...收起先前的回應...
暐翰 iT邦大師 1 級 ‧ 2018-07-28 16:44:08 檢舉

推大大有心回答 /images/emoticon/emoticon12.gif

fysh711426 iT邦研究生 4 級 ‧ 2018-07-28 16:53:15 檢舉

哈哈哈,感謝,小弟知道爬蟲可以保存 Cookie,不過沒有親自實作過,利用這次機會研究一下。
/images/emoticon/emoticon25.gif

cnews iT邦新手 5 級 ‧ 2018-07-29 09:19:17 檢舉

fysh711426 大大~ 非常感謝您的幫忙及協助,讓我瞭解爬蟲可以保存 Cookie,您真是一級棒 ^_^b

我馬上來試看看此方法,感謝您 ~

攻城屍 iT邦新手 5 級 ‧ 2018-07-30 09:15:04 檢舉

random 應該是為了避免拿到快取

恩恩 iT邦新手 5 級 ‧ 2018-07-30 16:37:44 檢舉

fysh711426 大大~真的很用心回答,厲害!

fysh711426 iT邦研究生 4 級 ‧ 2018-07-30 18:30:12 檢舉

攻城屍 對齁,因為 api 使用 GET 方式呼叫,瀏覽器會使用快取,感謝大大提點。
/images/emoticon/emoticon41.gif

fysh711426 iT邦研究生 4 級 ‧ 2018-07-30 18:30:59 檢舉

恩恩 感謝大大。 /images/emoticon/emoticon25.gif

fysh711426 iT邦研究生 4 級 ‧ 2018-07-30 18:34:58 檢舉

@cnews
感謝您,一起學習!!! /images/emoticon/emoticon37.gif

cnews iT邦新手 5 級 ‧ 2018-07-30 21:07:05 檢舉

感謝攻城屍,及大家熱心的說明,3Q~

Noah iT邦新手 5 級 ‧ 2018-07-31 22:22:56 檢舉

fysh711426 好強丫

我要發表回答

立即登入回答