使用 C# 抓取网页(html)

Posted

技术标签:

【中文标题】使用 C# 抓取网页(html)【英文标题】:Web page(html) scraping using C# 【发布时间】:2011-06-28 13:47:00 【问题描述】:

这只是一个一般性问题。目前我正在使用正则表达式进行网页抓取。但我认为有时很难弄清楚正则表达式,所以我在想 XSL/XPath 是 C# 中正则表达式的替代品吗?

另外,我想知道除了上面列出的两种之外,是否还有更高级的网页抓取技术。谢谢。

【问题讨论】:

xsl/xpath 要求页面是 Xhtml 1.0,并非所有 html 都符合 xml 解析器容易使用的内容 @rene:这是干净利落的吗?如果网页是XHTML1.0,那么Xpath可以用C#,如果不是XHTML1.0,那就另谋出路? 关于 xhtml 1.0 的声明(在文档类型中)与实际符合 xhtml 1.0 之间存在差异。不,对不起,没有干净利落。但看起来你已经有了很好的答案 令人惊讶的是,此类问题的最佳答案已发布在一个更老且更具体的问题中:***.com/questions/18065526/… 【参考方案1】:

您可以查看SgmlReader 或Html Agility Pack,它们是 .NET 的 HTML 解析库。

【讨论】:

从 NuGet 包管理器中,运行:Install-Package HtmlAgilityPack 就可以了 :) @Martinho,我个人更喜欢SgmlReader,但Html Agility Pack 也可以:-) 这是否意味着使用 将 html 转换为格式良好的 xml,然后在 C# 中对该 xml 文档执行 Xpath? @Robert,是的,您从 HTML 页面获得了一个 XmlDocument,它使您可以完全访问 DOM 树。 为了完整性:您还可以使用Fizzler 使用类似 jQuery 的 CSS 选择器进行查询。目前它适用于 HtmlAgilityPack,但我相信有计划支持其他解析库。【参考方案2】:

从网页收集数据的简单方法是WebsiteParser。它基于 Html Agility Pack,您可以使用属性和 CSS 选择器简单地描述您的属性。

Github here

【讨论】:

以上是关于使用 C# 抓取网页(html)的主要内容,如果未能解决你的问题,请参考以下文章

c#抓取动态网页中的数据

使用 C# 和 HTMLAgility 抓取网页

C# 抓取并导出网页里面所有超链接方法

用 C# 抓取 JavaScript 生成的网页

一个实用的C#网页抓取类代码分享

C# 使用 Abot 实现 爬虫 抓取网页信息 源码下载