【发布时间】:2013-02-12 20:37:59
【问题描述】:
我需要提取美元对另一种货币(例如欧元)的汇率以获取一长串历史日期。
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命令的响应和cmets/answers后,我查看了网站的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 请求,服务器如何知道它是命令而不是浏览器请求?
【问题讨论】:
-
发布您尝试过的 wget 命令。 wget 和 curl 是两个常见的命令行实用程序,它们能够发送 HTTP 请求和检索响应(网页)。
-
这回答了您为什么 wget 无法检索网页的问题。可能有规避的方法,但 StackOverflow 不是讨论它的地方。
-
有一个字符串作为 HTTP 请求标头的一部分传递,称为“用户代理”,用于标识 HTTP 客户端。
-
@Tuxdude - 我明白了。谢谢。
标签: html linux extract html-content-extraction