2013-02-27 35 views
1

我需要將美元兌換爲另一種貨幣(比如歐元)的歷史日期列表。如何使用Linux命令行以編程方式從網頁中提取信息?

www.xe.com網站提供歷史查詢工具,並使用詳細的網址,可以獲取特定日期的費率表,無需填寫Date:From:框。例如,網址http://www.xe.com/currencytables/?from=USD&date=2012-10-15給出了2012年10月15日當天美元兌換其他貨幣的轉換率表。

現在,假設我有一個日期列表,我可以遍歷列表並更改日期部分的URL來獲取所需的頁面。如果我可以提取利率列表,那麼簡單的grep EUR會給我相關的匯率(我可以使用awk來明確提取利率)。

問題是,如何使用Linux命令行命令獲取頁面?我試過wget但它沒有完成這項工作。

如果不是CLI,是否有一種簡單而直接的方式來以編程方式執行此操作(即,將日期複製粘貼到瀏覽器的地址欄所需的時間比較短)?


更新1:

當運行:

$ wget 'http://www.xe.com/currencytables/?from=USD&date=2012-10-15' 

我得到它包含文件:

<HTML> 
<HEAD><TITLE>Autoextraction Prohibited</TITLE></HEAD> 
<BODY> 
Automated extraction of our content is prohibited. See <A HREF="http://www.xe.com/errors/noautoextract.htm">http://www.xe.com/errors/noautoextract.htm</A>. 
</BODY> 
</HTML> 

因此它似乎是服務器可識別的類型的查詢並阻止wget。任何方式在這個?


更新2:

讀取來自wget命令和評論/回答的響應後,我查了網站的服務條款,發現這個子句:

You agree that you shall not: 
... 
f. use any automatic or manual process to collect, harvest, gather, or extract 
    information about other visitors to or users of the Services, or otherwise 
    systematically extract data or data fields, including without limitation any 
    financial and/or currency data or e-mail addresses; 

這我想,總結這方面的努力。


現在,我的好奇心,如果wget生成一個HTTP請求,如何服務器知道,這是一個命令,而不是瀏覽器請求?

+0

發佈您嘗試的wget命令。 wget和curl是兩個常見的命令行實用程序,它們能夠發送HTTP請求並檢索響應(網頁)。 – Tuxdude 2013-02-27 06:07:48

+0

@Tuxdude - 已更新。 – ysap 2013-02-27 06:11:23

+0

那麼,回答你的問題,爲什麼wget無法檢索網頁。可能有辦法規避,但StackOverflow不是可以放棄它的地方。 – Tuxdude 2013-02-27 06:13:35

回答

3

這是因爲wget發送的某些類型的標題可以很容易檢測到。

# wget --debug cnet.com | less 
[...] 
---request begin--- 
GET/HTTP/1.1 
User-Agent: Wget/1.13.4 (linux-gnu) 
Accept: */* 
Host: www.cnet.com 
Connection: Keep-Alive 
[...] 

通知的

User-Agent: Wget/1.13.4 

我認爲,如果你改變了

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14 

它的工作。

# wget --header='User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14' 'http://www.xe.com/currencytables/?from=USD&date=2012-10-15' 

這似乎從這裏工作正常。 :D

+0

是的,這似乎是訣竅。因爲好奇心的考驗,但是,因爲ToS禁止這個。 – ysap 2014-05-10 04:34:43

3

您需要使用-O寫STDOUT

wget -O- http://www.xe.com/currencytables/?from=USD&date=2012-10-15

但它看起來像xe.com不希望你做的自動下載。我建議不要在xe.com上進行自動下載。

1

您是否訪問過響應中的鏈接?

http://www.xe.com/errors/noautoextract.htm

我們確實提供了一些許可選項,讓你可以 納入XE.com貨幣功能集成到軟件, 網站和服務。欲瞭解更多信息,請聯繫我們:

XE.com Licensing 
+1 416 214-5606 
[email protected] 

你會明白,時間,精力和費用,我們投入 創建和維護我們的網站是相當可觀的。我們的服務和 數據是專有的,並且是多年努力的結果。 即使由於簡單的錯誤 或未能閱讀使用條款而未經授權使用我們的服務是不可接受的。

這聽起來像是有一個API,你可以使用,但你將不得不支付。不用說,你應該尊重這些條款,而不是試圖繞過它們。

+0

謝謝。雖然,盡我所知,這一段本身並不禁止我的嘗試(但IANAL),但我確實在ToS中找到了相關條款,並相應地更新了問題。 – ysap 2013-02-27 06:32:45

相關問題