【问题标题】:Parsing the useful content of web page in C# [duplicate]用C#解析网页的有用内容[重复]
【发布时间】:2012-12-30 18:21:17
【问题描述】:

可能重复:
Parsing web pages

我正在尝试用 C# 解析网页的内容。这是我使用的代码:

WebRequest request = WebRequest.Create("URL");
WebResponse response = request.GetResponse();
Stream data = response.GetResponseStream();
string html = String.Empty;
using (StreamReader sr = new StreamReader(data))
{
    html = sr.ReadToEnd();
}

但问题是我得到了 html 包含的所有数据。

对于如何以“干净”的方式获取有用的数据,或者我必须构建自己的解析器,您有什么建议吗?例如:包含标题和与之相关的文本的帖子,类似博客的格式。

【问题讨论】:

  • 什么是“有用信息”?您必须自己解析响应。
  • 有用的是页面包含的实际信息,没有隐藏标签或其他数据。
  • Html Agility Pack 非常适合这类东西。去读一读,然后玩,如果你有任何具体问题再回来
  • 您需要使用正则表达式类来忽略您不需要的部分。实际上,您需要自己构建它!
  • @Mohsenr1:正则表达式不适用于解析 html!

标签: c# html-parsing webpage


【解决方案1】:

如果您确实尝试从网页解析博客文章不要那样做,甚至不要考虑使用 HTML Agility Pack。

相反,您应该使用 SyndicationFeed 和已内置于 .Net 框架中的相关类(自 v3.5 起)。这些是为消费和拆分 RSS 提要量身定制的。

【讨论】:

  • 是的,但前提是网站支持以这种格式发布/分发它们(就像每个现代博客网站一样)
【解决方案2】:

只需使用Html Agility Pack。太强大了!

你可以在网上找到很多教程,比如http://runtingsproper.blogspot.fr/2009/09/htmlagilitypack-article-series.html

【讨论】:

  • +1... 有同样的答案
【解决方案3】:

使用Regex。要解析两个标签之间的数据(我假设您想要这样做),您可以执行以下操作:

string match = Regex.Match(data, string.Format("<a>(?<inbetween>.+?)</a>")).Groups["inbetween"].Value;

使用Regex,不像敏捷包不需要外部依赖,这对于可移植的独立应用程序来说非常有用。

【讨论】:

  • 您可能需要阅读此回复stackoverflow.com/questions/1732348/…
  • @llya lvanov 我知道这个意见,但我不明白为什么在这种情况下不能使用正则表达式。我知道这段代码并不健壮,因为它只考虑了一个不现实的匹配,但尽管如此,我仍然不明白为什么正则表达式会在适当的环境中失败。
  • proper environment 是这里的关键术语。网络不是合适的环境。无论如何,我不想侮辱,只有大量的好和简单的 html 工具,嗯,比正则表达式好一点。
猜你喜欢
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2021-11-28
  • 2017-08-01
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多