這是函數:如果HtmlAgilityPack.HtmlDocument文檔爲空,我該怎麼辦?
private List<string> getLinks(HtmlAgilityPack.HtmlDocument document)
{
List<string> mainLinks = new List<string>();
var linkNodes = document.DocumentNode.SelectNodes("//a[@href]");
if (linkNodes != null)
{
foreach (HtmlNode link in linkNodes)
{
var href = link.Attributes["href"].Value;
if (href.StartsWith("http://") == true || href.StartsWith("https://") == true || href.StartsWith("www") == true) // filter for http
{
mainLinks.Add(href);
}
}
}
return mainLinks;
}
有時可變文檔的情況下,nuul網站有超時不responde或鏈接不正確的格式讓說的鏈接的例子:wdfsfdgfsdg
所以在功能測試Im做:
private List<string> test(string url, int levels,DoWorkEventArgs eve)
{
levels = levelsTo;
HtmlWeb hw = new HtmlWeb();
List<string> webSites;
try
{
this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, "Loading The Url: " + url + "..." , Color.Red); }));
HtmlAgilityPack.HtmlDocument doc = to.GetHtmlDoc(url, reqOptions, null);
if (timeOut == true)
{
this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, " There Was A TimeOut" + Environment.NewLine , Color.Red); }));
timeOut = false;
}
else
{
this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, " Done " + Environment.NewLine, Color.Red); }));
}
webSites = getLinks(doc);
因此,可以說該URL被wdfsfdgfsdg然後網站呼籲/使用getLinks但因爲URL是錯誤的變量文檔是空,因此無論是在這裏的測試功能或Ť他getLinks函數我需要處理這種情況。我想要做的是,它會告訴用戶有一個超時,但也要繼續下一個網址的過程。在測試函數中,我一次又一次地調用測試函數,如抓取和每次變量url包含不同的url。
這是該行即時通訊做爬行:
csFiles.AddRange(test(t, levels - 1, eve));
csFiles是本地列表
所以每次網址包含另一個鏈接,然後試圖讓這個網站的鏈接。 但由於文檔是null,且其去功能getLinks所以在上線getLinks:
var linkNodes = document.DocumentNode.SelectNodes("//a[@href]");
即時得到零異常,程序停止。 null是因爲文檔是空的。
那麼我該如何處理這種情況,並使程序繼續到下一個鏈接?不要停止,因爲它是空的,並且有一個例外。
如果我將更新問題並添加完整的測試功能。
薩姆我忘了提及,webSites可能包含網站鏈接列表內例如:http://www.google.com,dsfsgfsg,http://www.google.co.il所以我的意思是當它到達dsfsgfsg站點時將其作爲空值返回,然後繼續到本示例http://www.google.co.il中列表中的下一個鏈接,並且不會因爲dsfsgfsg爲空而停止所有操作。如果主站點列表中的第一個站點爲空,那麼我將不得不停止操作以中止。 –
但是,如果webSites包含一些鏈接,並在中間的某個地方有一個超時站點或空站點或損壞的站點,只需移動到列表中的下一個URL。 –
如果文檔不爲空,那麼做好這個工作。但是,如果它爲null我應該怎麼做才能返回並繼續到List webSites中的下一個鏈接?你寫處理空情況,但我如何處理它,所以它會繼續,而不是拋出異常。 –