2

对于一长串历史日期,我需要提取美元对另一种货币(例如欧元)的汇率。

www.xe.com网站提供了历史查询工具,使用详细的 URL,可以获取特定日期的费率表,无需填充Date:From:框。例如,URL http://www.xe.com/currencytables/?from=USD&date=2012-10-15给出了 2012 年 10 月 15 日当天从美元到其他货币的兑换率表。

现在,假设我有一个日期列表,我可以遍历该列表并更改该 URL 的日期部分以获取所需的页面。如果我可以提取汇率列表,那么 simplegrep 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 请求,服务器如何知道它是一个命令而不是浏览器请求?

4

3 回答 3

5

你需要使用-O来写STDOUT

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

但看起来 xe.com 不希望您进行自动下载。我建议不要在 xe.com 上进行自动下载

于 2013-02-27T06:13:13.627 回答
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

于 2014-05-10T04:06:50.110 回答
1

您是否访问了回复中的链接?

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

我们确实提供了许多许可选项,允许您将 XE.com 货币功能整合到您的软件、网站和服务中。如需更多信息,请通过以下方式联系我们:

XE.com Licensing
+1 416 214-5606
licensing@xe.com

您会意识到我们在创建和维护我们的网站上所花费的时间、精力和费用是相当可观的。我们的服务和数据是专有的,是多年努力的结果。未经授权使用我们的服务,即使是由于一个简单的错误或未能阅读使用条款,也是不可接受的。

这听起来像是您可以使用的 API,但您必须为此付费。不用说,您应该尊重这些条款,而不是试图绕过它们。

于 2013-02-27T06:27:40.723 回答