我需要自动下载当前的《华尔街日报》的优势,并将数据加载到我的数据库中。自动下载此数据的最佳方法是什么?

我提出了三种可能的解决方案:

  1. 从WSJ刮下HTML网页。
  2. 解析WSJ的A RSS新闻提要。
  3. 使用一些我从WSJ中找到的API。

关于解决方案1,尽管我不喜欢解决方案1,因为它很容易破裂,但它是我唯一从头到尾锻炼的方法。看来我可以刮擦 这一页 使用WebRequest / Webresponse,并在此代码中读取文本:

<tr>
<td style="text-align:left" class="colhead">&nbsp;</td>
<td class="colhead">Latest</td>
<td class="colhead">Wk ago</td>
<td class="colhead">High</td>
<td class="colhead">Low</td>
</tr>
<tr>
<td class="text">U.S.</td>
<td style="font-weight:bold;" class="num">3.25</td>
<td class="num">3.25</td>
<td class="num">3.25</td>
<td class="num" style="border-right:0px">3.25</td>
</tr>

关于解决方案2,尽管我可以实现RSS读取器解决方案,但我看不到一种可靠地预期质量变化的方法。因此,我认为这不是将数据作为解决方案1的安全或可靠的方法。

关于解决方案3,我还没有发现任何已发布的API用于检查诸如最高利率之类的资金费率。如果有人知道用于检查汇率的网络服务或其他API,请告诉我。

有帮助吗?

解决方案

我实施了以下代码来刮擦HTML并处理结果:

SSIS软件包C#脚本任务

public void Main()
    {
        // Post the web page.
        try
        {
            // Set variables.
            bool fireAgain = true;
            Uri WebPageURI = new Uri("http://online.wsj.com/mdc/public/page/2_3020-moneyrate.html");

            // Post the web page.
            WebRequest request = WebRequest.Create(WebPageURI);
            request.Timeout = (1000 * 60 * 60);
            request.Method = "POST";
            WebResponse response = request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string Output = reader.ReadToEnd();

            Dts.Variables["wall_street_journal_str"].Value = Output;
            Dts.Events.FireInformation(0, "WebRequest:", WebPageURI.ToString(), "", 0, ref fireAgain);
            Dts.Events.FireInformation(0, "WebResponse:", Output, "", 0, ref fireAgain);
        }
        catch (WebException ex)
        {
            Dts.Events.FireError(0, "Error:", ex.Message, "", 0);
        }


        // Return success.
        Dts.TaskResult = (int)ScriptResults.Success;
    }

由执行SQL任务调用的存储过程

SET @WALL_STREET_JOURNAL_HTML = SUBSTRING(@WALL_STREET_JOURNAL_HTML, CHARINDEX('Prime rates', @WALL_STREET_JOURNAL_HTML, 1), CHARINDEX('Canada', @WALL_STREET_JOURNAL_HTML, CHARINDEX('Prime rates', @WALL_STREET_JOURNAL_HTML, 1)) - CHARINDEX('Prime rates', @WALL_STREET_JOURNAL_HTML, 1))
    SELECT @RATE_CHANGE_DATE = CONVERT(DATE, RTRIM(LTRIM(SUBSTRING(@WALL_STREET_JOURNAL_HTML, CHARINDEX('[', @WALL_STREET_JOURNAL_HTML, 1) + 23, CHARINDEX(']', @WALL_STREET_JOURNAL_HTML, 1) - CHARINDEX('[', @WALL_STREET_JOURNAL_HTML, 1) - 23))))
        , @RATE = CONVERT(NUMERIC(8, 2), SUBSTRING(@WALL_STREET_JOURNAL_HTML, CHARINDEX('class="num">', @WALL_STREET_JOURNAL_HTML, CHARINDEX('U.S.</td>', @WALL_STREET_JOURNAL_HTML, 1)) + 12, CHARINDEX('<', @WALL_STREET_JOURNAL_HTML, CHARINDEX('class="num">', @WALL_STREET_JOURNAL_HTML, CHARINDEX('U.S.</td>', @WALL_STREET_JOURNAL_HTML, 1))) - CHARINDEX('class="num">', @WALL_STREET_JOURNAL_HTML, CHARINDEX('U.S.</td>', @WALL_STREET_JOURNAL_HTML, 1)) -12))

丑陋的代码,但它有目的。还有几种验证规则可以验证数据正确,但这是我用来刮擦该值的核心。

其他提示

有一个网络服务,但是如果您想要的只是最高利率,则可能不值得成本:

http://www.armindexes.com/

我迟到了大约5年,但以为我会提起它。quandl 有一个很好的API来获取此信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top