WebRequest несколько страниц и загрузить в StreamReader - PullRequest
0 голосов
/ 11 октября 2011

Я хочу перейти на несколько страниц с помощью 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 Ответ

2 голосов
/ 11 октября 2011

Вместо того, чтобы делать все это вручную, вы, вероятно, должны использовать 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");
}
...