【发布时间】:2017-01-19 20:28:16
【问题描述】:
假设我有一个包含 10 个新闻来源的列表,我希望将它们导入本地数据库。我需要打开这些外部新闻页面中的每一个,提取主要内容并保存。所有这些页面中的 html 结构都不同。有的使用 div,有的使用文章标签。
我知道我可以使用 HttpWebRequest 对象打开页面,并使用 HtmlAgilityPack 加载 [HTML] 文档。
HttpWebRequest oReq = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)oReq.GetResponse();
var doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(resp.GetResponseStream());
但是,我不知道如何在不知道类型的情况下定位主要元素。
我正在尝试做的事情可能吗?
【问题讨论】:
-
您是否查看过新闻网站,看看他们是否提供 API 来获取您想要的数据?对于这样的网站,网页抓取通常不被接受(即不允许)。
-
一个选项可能是(以编程方式)查看其他页面,找到具有最多文本/或页面之间文本变化最多的元素,并定位该元素。它可能会让你更接近你想要的东西,但并不完美。如果您真的很热衷,您可以编写一个神经网络并使用许多网站对其进行训练,并根据主要内容对其进行验证,但无论如何,第一个选项更容易实现:)
-
因为像bing.com/news 或news.google.com/news 这样的新闻聚合以前从未做过,这显然是不可能的。此外,设计这样的“不可能”系统对于 SO 问题来说过于宽泛 - 如果您缩小页面上实际想要检测的范围,它可能会成为主题。
标签: c# html-agility-pack