我需要在很长的历史日期列表中提取美元兑换另一种货币(比如欧元)的汇率。
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
命令和评论/答案的回复后,我检查了网站的ToS并找到了这个条款:
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 :(得分:3)
您需要使用-O
来编写STDOUT
wget -O- http://www.xe.com/currencytables/?from=USD&date=2012-10-15
但看起来xe.com不希望您进行自动下载。我建议不要在xe.com上进行自动下载
答案 1 :(得分: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
答案 2 :(得分:1)
您是否访问了回复中的链接?
来自http://www.xe.com/errors/noautoextract.htm:
我们提供了许多允许您使用的许可选项 将XE.com货币功能整合到您的软件中, 网站和服务。有关更多信息,请通过以下方式联系我们:
XE.com Licensing +1 416 214-5606 licensing@xe.com
您会感激我们投入的时间,精力和费用 创建和维护我们的网站是相当可观的我们的服务和 数据是专有的,是多年努力的结果。 未经授权使用我们的服务,即使是由于一个简单的错误 或者未能阅读使用条款是不可接受的。
这听起来像你可以使用的API,但你必须付钱。不用说,你应该尊重这些条款,而不是试图绕过它们。