首页 > 解决方案 > 将抓取页面的内容写入文本文件以在客户端浏览器上下载

问题描述

我试图弄清楚如何将抓取网页的内容打印到 Asp.Net 网页上的可下载 .txt 文件中。我目前能够将此页面的内容打印到网页上的标签,但无法弄清楚如何将新行上的每个值正确打印到 .txt 文件中并将其直接下载到客户端的浏览器。目前我的代码如下用于打印到标签:

//Read HTML of Webpage inserted into urlTextbox
HtmlWeb hw = new HtmlWeb();
        HtmlDocument doc = hw.Load(urlTextbox.Text);

        //Selecting body text
        var bodySec = doc.DocumentNode.SelectNodes("//body[@class]");

        foreach (var node in bodySec)
        {
            //Selecting ONLY links from body section
            var linkSec = doc.DocumentNode.SelectNodes(".//a[@href]");
            foreach (HtmlNode node2 in linkSec)
            {
                string attributeValue = node2.GetAttributeValue("href", "");
                var baseUrl = new Uri("url.com");
                var url = new Uri(baseUrl, attributeValue);

                string links = url.AbsoluteUri;
                scriptLbl.Text += links;
                var linkLines = Regex.Split(links, @"\-\-\-");

                ////Printing Links line by line
                foreach(string link in linkLines)
                {
                    var prt1 = link + "<br>";
                    scriptLbl.Text += prt1;
                }


            }
        }

目前它可以很好地抓取页面并以所需的格式打印链接。最理想的情况是,我想以相同的格式写入文件并在同一个按钮单击时下载它。我曾尝试使用 StreamWriter 来完成此操作,但它只打印了抓取内容的第一行。以下是我对 StreamWriter 的尝试:

Response.ContentType = "text/plain";
Response.AddHeader("content-disposition", "attachment;filename=Urllist.txt");
Response.Clear();
using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.UTF8))
      {
           writer.Write(links);
      }

Response.End();

对此问题的任何帮助将不胜感激。我曾尝试使用其他类似的问题答案,但似乎没有一个可以为我提供字符串中的完整链接列表。

标签: c#asp.nethtml-agility-packstreamwriter

解决方案


我通过创建从标签读取的项目列表并单独遍历它们来解决这个问题。

string conv = label.Text;
var result = con.Split(' ');
using(StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.UTF8))
{
    foreach(var s in result.Distinct()) 
    {
        //using distinct to ensure no repeated items (scraping multiple pages w/ same links possible)
        sw.WriteLine(s);
    }
}

推荐阅读