c# - 在下载的 txt 文件中提取 url 链接

标签 c# html regex url

目前正在为工作开发一个 url 提取器。我正在尝试从下载的 html 文件中提取所有 http 链接/href 链接,并在单独的 txt 文件中打印链接。到目前为止,我已经设法下载了页面的整个 html,只是提取了链接从它并使用 Regex 打印它们是一个问题。想知道是否有人可以帮助我解决这个问题?

     private void button2_Click(object sender, EventArgs e)
    {
        Uri fileURI = new Uri(URLbox2.Text);

        WebRequest request = WebRequest.Create(fileURI);
        request.Credentials = CredentialCache.DefaultCredentials;
        WebResponse response = request.GetResponse();
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();

        SW = File.CreateText("C:\\Users\\Conal_Curran\\OneDrive\\C#\\MyProjects\\Web Crawler\\URLTester\\response1.htm");
        SW.WriteLine(responseFromServer);

        SW.Close();

        string text = System.IO.File.ReadAllText(@"C:\\Users\\Conal_Curran\\OneDrive\\C#\\MyProjects\\Web Crawler\\URLTester\\response1.htm");
        string[] links = System.IO.File.ReadAllLines(@"C:\\Users\\Conal_Curran\\OneDrive\\C#\\MyProjects\\Web Crawler\\URLTester\\response1.htm");



        Regex regx = new Regex(links, @"http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase);

        MatchCollection mactches = regx.Matches(text);

        foreach (Match match in mactches)
        {
            text = text.Replace(match.Value, "<a href='" + match.Value + "'>" + match.Value + "</a>");
        }

        SW = File.CreateText("C:\\Users\\Conal_Curran\\OneDrive\\C#\\MyProjects\\Web Crawler\\URLTester\\Links.htm");
        SW.WriteLine(links);
    }

最佳答案

如果您不知道,这可以使用可用的 html 解析器 nuget 包之一(非常容易)实现。

我个人使用 HtmlAgilityPack(还有 ScrapySharp,另一个包)和 AngleSharp

仅使用上面的 3 行,您就可以使用 HtmlAgilityPack 通过 http get 请求加载文档中的所有 href:

/*
  do not forget to include the usings:
  using HtmlAgilityPack;
  using ScrapySharp.Extensions;
*/

HtmlWeb w = new HtmlWeb();
//since you have your html locally stored, you do the following:

//P.S: By prefixing file path strings with @, you are rid of having to escape slashes and other fluffs.
var doc = HtmlDocument.LoadHtml(@"C:\Users\Conal_Curran\OneDrive\C#\MyProjects\Web Crawler\URLTester\response1.htm");

//for an http get request
//var doc = w.Load("yourAddressHere");
var hrefs = doc.DocumentNode.CssSelect("a").Select(a => a.GetAttributeValue("href"));

关于c# - 在下载的 txt 文件中提取 url 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34514488/

相关文章:

TreeViewItem 元素中的 C# 选项卡索引

html - Bootstrap 4 行中的居中复选框按钮

javascript - 悬停切换问题

将浏览器大小调整为 960px 后 HTML/CSS div 消失

c# - XAML 中图标格式的最佳实践(SVG、路径数据点、几何/XAML 或字体)

c# - SQL语句耗时长线程冲突如何解决?

c# - 使用带有 C# 的 XAML 为 Windows Phone 8 应用程序设置计时器

python - 在 Python 中获取两条相同行之间的文本

javascript - 字母数字值的正则表达式,而不是两个连续的下划线下划线

javascript - 在 jQuery 中使用正则表达式检查模式