从HTML页面中提取csv数据

时间:2015-11-26 20:21:52

标签: c# html vb.net csv vbscript

我对编程很陌生。 我需要从此HTML页面中提取数据:http://www.bmreports.com/servlet/com.logica.neta.bwp_MarketIndexServlet?displayCsv=false

我需要每30分钟左右更新一次数据。 因为,这个页面已经有链接提取csv中的当前数据,我希望有可能使用C#,VB.Net或某些VB脚本在csv中捕获这些信息。

我能够在excel上提取数据,因此可以考虑VB脚本。

非常感谢有关如何使用任何3 C#,VB.NET,VB脚本以CSV格式提取此信息的任何指导。

感谢, Ĵ

2 个答案:

答案 0 :(得分:0)

此活动称为“网络抓取”。这是在C#中下载文件或将字符串内容保存在变量中的方法:

using System.Net;

using (WebClient client = new WebClient ())
{
    // save web page source directly to disk
    client.DownloadFile("http://example.com/page.html", @"C:\page.html");
    // or save only to memory
    string html = client.DownloadString("http://example.com/page.html");

    // do post-processing here
}

更难处理的部分是处理/解析各种各样的HTML开始和结束标记,在许多情况下这不是一件容易的事。但是,您可能很幸运,因为我看到您提供的查询字符串包含该选项 displayCsv=false。我会尝试将其设置为displayCsv=true。数据应以CSV格式显示,这将更容易解析。

如果您对HTML标记的情况太困难,请查看此answer以获取可能的C#库或用于Web抓取的开源项目 - 但您需要检查许可证是否存在任何限制。

答案 1 :(得分:0)

以下是VB中用于从html页面读取和解析表的示例:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim web As New WebBrowser
    AddHandler web.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf webtocsv)
    web.Navigate(New System.Uri("http://www.bmreports.com/servlet/com.logica.neta.bwp_MarketIndexServlet?displayCsv=false#"))

End Sub


Private Sub webtocsv(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)

    Dim webcsv As WebBrowser = CType(sender, WebBrowser)

    Dim tblrows As HtmlElementCollection
    Dim tblcols As HtmlElementCollection
    Dim column As String = ""
    Dim csv As String = ""

    tblrows = webcsv.Document.GetElementsByTagName("TABLE").Item(1).GetElementsByTagName("TR")

    For r As Integer = 0 To tblrows.Count - 1
        tblcols = tblrows.Item(r).GetElementsByTagName("TD")
        For x As Integer = 0 To 4
            column = tblcols.Item(x).InnerHtml
            csv = csv + column
            If (x < 4) Then csv = csv + ";"
        Next
        csv = csv + vbCrLf
    Next
    TextBox1.Text = csv     'show csv in textbox

End Sub


csv变量中,您格式化了由;分隔的数据列。如果您不想要标题,请将For r As Integer =设置为1