c# - 将抓取页面的内容写入文本文件以在客户端浏览器上下载
问题描述
我试图弄清楚如何将抓取网页的内容打印到 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();
对此问题的任何帮助将不胜感激。我曾尝试使用其他类似的问题答案,但似乎没有一个可以为我提供字符串中的完整链接列表。
解决方案
我通过创建从标签读取的项目列表并单独遍历它们来解决这个问题。
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);
}
}
推荐阅读
- visual-studio-code - 运行打印语句时看不到输出单元格
- time - powerbi 前期对比(dax issue)
- java - 如何从 JSP 文件连接到 oracle 数据库
- python - Mongodb pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection denied, Timeout: 30s,
- reactjs - Asp.net Core:跨域请求被阻止
- amazon-web-services - Terraform 无法使用具有完全访问权限的附加策略文档的用户进行初始化
- icloud - Xcode 13 Beta 和 CloudKit 问题
- terraform-provider-aws - 特定 ENI 的流日志
- ios - 在不知道类型的情况下初始化 swift 变量
- angular - Angular Storybook 函数和动画