我正在寻找一种在ASP.NET/C#中提取给定web地址的文本的可靠方法。有人能给我指明正确的方向吗?
此外,网址可以说是一个新闻网站,可能有很多广告和菜单等。我需要一些智能的方式,只提取相关的内容。不知道如何做到这一点,因为我将如何定义什么是相关性?
我应该从RSS提要上读吗?对此有什么想法吗?
编辑我增加了一个赏金。我希望从一个URL中提取“相关”文本。从“相关”我的意思是,它应该排除文本从广告(和其他不相干的信息)。输入将类似于一个新闻网站。我只需要提取新闻信息,并去掉多余的文本。
发布于 2010-04-06 20:00:52
一旦下载了页面,并开始使用像HTML敏捷包这样的库来解析html,那么您的工作就开始了:)
筛刮分为两部分。
首先是网络爬虫(网上有很多关于这个的信息,还有一些其他答案在这里提供的简单代码)。爬虫必须遍历链接和下载页面。如果您正在下载大量的页面,并且有start url,您可以自己滚动,或者使用现有的页面。查看维基百科以获得开放源代码for爬虫/蜘蛛的列表。
第二部分是解析html,只提取您想要的文本,并省略任何噪声(标题、横幅、页脚等)。对于现有的库来说,仅仅遍历DOM是很容易的,找出如何处理解析的内容是很困难的。
我以前在另一个所以问题上写过一些关于它的文章,它可能会给你一些如何手动抓取你想要的内容的想法。根据我的经验,没有100%的方法可以找到页面的主要内容,而且通常您需要手动地给它一些指针。困难之处在于,如果页面的html布局发生变化,那么屏幕刮板就会开始失效。
您可以应用统计数据并比较几页的html,以推断广告、菜单等的位置,以消除这些。
由于您提到了新闻站点,与从原始html中解析文本相比,还有两种更容易应用于这些站点的方法。
还可以查看从任意HTML中提取有用文本的简单方法,了解如何创建更通用的解析器。代码是用Python编写的,但是您应该能够在没有太多麻烦的情况下转换它。
发布于 2010-02-14 13:57:55
我认为您需要像HTMLAgilityPack这样的html解析器,或者您可以使用新生婴儿。YQL,它是由Yahoo开发的一个新工具,它的语法类似SQL,您需要了解一些XPATH.
http://developer.yahoo.com/yql/
谢谢
发布于 2010-04-06 13:41:34
使用WebClient实例获取标记..。
Dim Markup As String
Using Client As New WebClient()
Markup = Client.DownloadString("http://www.google.com")
End Using然后使用HtmlAgilityPack用XPath解析响应..。
Dim Doc As New HtmlDocument()
Doc.LoadXML(Markup)
If Doc.ParseErrors.Count = 0 Then
Dim Node As HtmlNode = Doc.DocumentNode.SelectSingleNode("//body");
If Node IsNot Nothing Then
'Do something with Node
End If
End Ifhttps://stackoverflow.com/questions/2256290
复制相似问题