【发布时间】:2011-11-18 23:14:18
【问题描述】:
我正在使用 html 敏捷包来解析我加载的几个文本文件。然后,我将解析出的数据保存到字符串列表中以供进一步处理。但是,当我使用这种方法时,它永远不会命中:
MessageBox.Show("test");
此外,如果我在此方法之后包含任何其他代码,则不会触发任何其他代码。
有人对我的错误有什么建议吗?
整个方法如下:
private void ParseOutput()
{
nodeDupList = new List<string>();
StreamWriter OurStream;
OurStream = File.CreateText(dir + @"\CombinedPages.txt");
OurStream.Close();
for (int crawl = 1; crawl <= crawlPages.Length; crawl++)
{
var web = new HtmlWeb();
var doc = web.Load(dir + @"\Pages" + crawl.ToString() + ".txt");
var nodeCount = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[td/@class=""style_23""]");
int nCount = nodeCount.Count;
for (int a = 3; a <= nCount; a++)
{
var specContent = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[" + a + @"]/td[3]/div[contains(@class,'style_24')]");
foreach (HtmlNode node in specContent)
{
nodeDupList.Add(node.InnerText + ".d");
}
}
}
MessageBox.Show("test");
}
我创建了一个爬虫来将多个 html 页面保存为文本并使用此方法分别解析它们。 我只是使用 MessageBox 来表明它不会继续遵循“for循环”。我在我的解决方案中调用了多个方法,它不会遍历它们。
该应用程序是针对 .Net Framework 4 的 Win Forms 应用程序。
编辑: 感谢您的帮助。
通过调试器重新运行它后,我意识到它有时会在循环中崩溃
for (int a = 3; a <= nCount; a++)
{
var specContent = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[" + a + @"]/td[3]/div[contains(@class,'style_24')]");
foreach (HtmlNode node in specContent)
{
nodeDupList.Add(node.InnerText + ".d");
}
}
当 var specContent 为空时。
没有产生异常;方法刚刚结束。
由于我正在抓取该网站是动态的,因此它很少返回 null,但在某些情况下它会出现这种情况。
【问题讨论】:
-
在
OurStream.Close()方法上放置一个断点 (F9),然后单步执行代码。看起来好像没有问题,所以它可能是你没有展示的东西,或者只是更微妙的东西。 -
你没有试过在调试器中单步调试吗?
-
调试了几次,最终发现specContent有时会为null,并且方法只是结束但没有返回异常。我正在抓取的网站的动态使得很难重复和确定它。关于为什么它没有返回异常的任何想法?我知道我还没有处理过这个。
标签: c# winforms for-loop html-agility-pack