我需要为一长串历史日期提取美元对另一种货币(例如欧元)的汇率。
www.xe.com
网站提供了历史查找工具,使用详细的URL,可以获得特定日期的费率表,无需填充Date:
和From:
框。例如,URL 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请求,服务器如何知道它是命令而不是浏览器请求?
您需要使用-O
来编写STDOUT
wget -O- http://www.xe.com/currencytables/?from=USD&date=2012-10-15
但是看起来xe.com不希望你做自动下载。我建议不要在xe.com上自动下载
这是因为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
您是否访问了回复中的链接?
从http://www.xe.com/errors/noautoextract.htm:
我们确实提供了一些许可选项,允许您将XE.com货币功能整合到您的软件中,网站和服务。如需更多信息,请联系我们:
你会感激我们所投入的时间、精力和金钱创建和维护我们的网站是相当可观的。我们的服务及数据是专有的,是多年辛勤工作的结果。未经授权使用我们的服务,即使是由于一个简单的错误或未阅读使用条款,是不可接受的。XE.com Licensing +1 416 214-5606 licensing@xe.com
这听起来像有一个API,你可以使用,但你将不得不支付它。不用说,您应该尊重这些条款,而不是试图绕过它们。