代码之家  ›  专栏  ›  技术社区  ›  Registered User

下载当前WSJ.com最优惠利率

  •  1
  • Registered User  · 技术社区  · 16 年前

    我需要自动下载当前的华尔街日报优惠利率和加载到我的数据库中的数据。自动下载这些数据的最佳方法是什么?

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

    1. 从《华尔街日报》抓取一个HTML网页。
    2. 解析来自《华尔街日报》的RSS新闻提要。

    关于解决方案1,虽然我不喜欢解决方案1,因为它很容易损坏,但它是我从头到尾唯一一个解决方案。看来我可以刮了 this page

    <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检查货币利率,那么请让我知道。

    3 回复  |  直到 10 年前
        1
  •  2
  •   Registered User    16 年前

    我实现了以下代码来清除HTML并处理结果:

    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))
    

        2
  •  2
  •   Paul in NJ    16 年前

    有一个网站服务可以做到这一点,但如果您只想要最优惠的价格,那么它可能不值得花费:

    http://www.armindexes.com/

        3
  •  2
  •   Damon    10 年前

    Quandl 有一个很好的API来获取这些信息。

    推荐文章