我正在编写一些小应用程序来解析几个网页的来源,提取一些数据,并将其保存为另一种格式。具体来说,我的一些银行不提供交易/报表的下载,但它们确实可以访问其网站上的这些报表。
我做了一次罚款,但另一次(汇丰银行英国)证明了屁股的痛苦,因为它的来源不是有效的XHTML。例如,在<?xml?>
标记之前有空格,并且在属性名称及其值(例如==
)之间存在使用=
而不是<li class=="lastItem">
的位置。< / p>
当然,当我将这些数据传递给我的XmlDocument
时,它会抛出一个摇摆不定的(更确切地说是异常)。
我的问题是:是否可以放宽C#中XML解析的要求?我知道在源头解决这些问题要好得多 - 这绝对是我的态度 - 但是汇丰银行改变他们的网站的机会几乎为零,而这些网站已经在大多数浏览器中运行,只是为了我的老朋友。
答案 0 :(得分:7)
看看HTML agility pack。它允许您通过XPath提取非XHTML兼容网页的元素,就好像它是一个格式良好的XHTML文档。
对于Kleene的爱,不要试图复制具有任何复杂性的HTML页面!
答案 1 :(得分:3)
我不相信你可以放松解析,但是你可以通过类似HTML Tidy之类的东西来运行它,让 处理这个混乱。
答案 2 :(得分:0)
如果它们不符合XHTML,则无论您如何努力,都无法将HTML推送到XMLDocument对象中。
如果这是低音量,您可以使用WebBrowserControl创建一个空的HtmlDocument对象,然后使用HtmlDocument的Write()方法将您检索到的字符串从中删除。
另一个选项是mshtml.HTMLDocument,这在.NET中有点麻烦,因为它是互操作的。
最常见的屏幕刮擦类型是使用正则表达式。一旦你确定了你正在寻找的模式,你就可以反复刮擦。