WebRequest多个页面并加载到StreamReader中

时间:2011-10-11 02:07:33

标签: c# asp.net html string parsing

我想使用ASP.NET 4.0转到多个页面,复制所有HTML,然后最终将其粘贴到文本框中。从那里我想运行我的解析函数,处理这个问题的最佳方法是什么?

 protected void goButton_Click(object sender, EventArgs e)
    {
        if (datacenterCombo.Text == "BL2")
        {
            fwURL = "http://website1.com/index.html";
            l2URL = "http://website2.com/index.html";
            lbURL = "http://website3.com/index.html";
            l3URL = "http://website4.com/index.html";
            coreURL = "http://website5.com/index.html";

            WebRequest objRequest = HttpWebRequest.Create(fwURL);
            WebRequest layer2 = HttpWebRequest.Create(l2URL);

            objRequest.Credentials = CredentialCache.DefaultCredentials;
            using (StreamReader layer2 = new StreamReader(layer2.GetResponse().GetResponseStream()))


            using (StreamReader objReader = new StreamReader(objRequest.GetResponse().GetResponseStream()))
            {
                originalBox.Text = objReader.ReadToEnd();
            }
            objRequest = HttpWebRequest.Create(l2URL);

            //Read all lines of file
            String[] crString = { "<BR>&nbsp;" };
            String[] aLines = originalBox.Text.Split(crString, StringSplitOptions.RemoveEmptyEntries);
            String noHtml = String.Empty;

            for (int x = 0; x < aLines.Length; x++)
            {
                if (aLines[x].Contains(ipaddressBox.Text))
                {
                    noHtml += (RemoveHTML(aLines[x]) + "\r\n");
                }
            }

            //Print results to textbox
            resultsBox.Text = String.Join(Environment.NewLine, noHtml);

        }
    }
    public static string RemoveHTML(string text)
    {
        text = text.Replace("&nbsp;", " ").Replace("<br>", "\n");
        var oRegEx = new System.Text.RegularExpressions.Regex("<[^>]+>");
        return oRegEx.Replace(text, string.Empty);

    } 

1 个答案:

答案 0 :(得分:2)

而不是手动执行所有操作,您应该使用HtmlAgilityPack代替,然后您可以执行以下操作:

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://google.com");

var targetNodes = doc.DocumentNode
                     .Descendants()
                     .Where(x=> x.ChildNodes.Count == 0 
                            &&  x.InnerText.Contains(someIpAddress));

foreach (var node in targetNodes)
{
    //do something
}

如果HtmlAgilityPack不适合您,请至少简化代码的下载部分并使用WebClient

using (WebClient wc = new WebClient())
{
    string html = wc.DownloadString("http://google.com");
}