2014-01-07 88 views
1

此代碼工作正常...我沒有問題。從外部URL /網站獲取所有圖像

var urls = from lnks in document.DocumentNode.Descendants() 
    where (lnks.Name == "a" && lnks.Attributes["href"] != null && 
     (lnks.Attributes["href"].Value.ToString().Contains("jpg") 
     || lnks.Attributes["href"].Value.ToString().Contains("png") 
     || lnks.Attributes["href"].Value.ToString().Contains("bmp") 
     || lnks.Attributes["href"].Value.ToString().Contains("jpeg") 
     || lnks.Attributes["href"].Value.ToString().Contains("gif")) 
     ) 
     select new 
     { 
     Url = lnks.Attributes["href"].Value 
     }; 

但是這一個總是返回null:

var urls = from lnks in document.DocumentNode.Descendants() 
      where (lnks.Name == "a" || lnks.Name == "img") && 
       (lnks.Attributes["href"] != null || lnks.Attributes["src"] != null) && 
       (
       lnks.Attributes["href"].Value.ToString().Contains("jpg") 
       || lnks.Attributes["href"].Value.ToString().Contains("png") 
       || lnks.Attributes["href"].Value.ToString().Contains("bmp") 
       || lnks.Attributes["href"].Value.ToString().Contains("jpeg") 
       || lnks.Attributes["href"].Value.ToString().Contains("gif") 
       || lnks.Attributes["src"].Value.ToString().Contains("jpg") 
       || lnks.Attributes["src"].Value.ToString().Contains("png") 
       || lnks.Attributes["src"].Value.ToString().Contains("bmp") 
       || lnks.Attributes["src"].Value.ToString().Contains("jpeg") 
       || lnks.Attributes["src"].Value.ToString().Contains("gif") 
       ) 
      select new 
      { 
      Url = lnks.Attributes["src"] != null ? lnks.Attributes["src"].Value : lnks.Attributes["href"].Value 
      }; 

什麼是我的錯?這是拍攝圖像的正確方法嗎?

+1

你在做多的一個查詢。將你的代碼分解成幾部分,你會發現你自己的錯誤。 – jwillmer

+0

泰克斯英語課。我是新的網站,我的英語很糟糕。過去24小時我沒有睡覺,因此我找不到編輯按鈕,我無法花太多時間找到它。我感到緊張。我會盡力寫出正確的。其他人的代碼仍然無法正常工作! –

回答

4

這是圖像節點的代碼。做一個功能在它外面,你可以使用它的任何節點:

GetLinksFromDocument(文檔,節點名稱,linkAttributeName)

using HtmlAgilityPack; 

var urls = new List<string>(); 
var prefixList = new[] { "jpg", "jpeg", "png", "bmp", "gif" }; 
var document = new HtmlWeb().Load("http://jwillmer.de"); 

var imageNodes = document.DocumentNode.Descendants("img"); 
var imageLinks = imageNodes.Where(node => node.Attributes.Contains("src")) 
          .Select(node => node.Attributes["src"].Value); 

urls.AddRange(imageLinks.Where(link => prefixList.Any(link.EndsWith))); 
+0

感謝您的幫助。那一個在工作,但我的第一個代碼也在工作。其實我使用的代碼結構非常類似於一個。但我無法找到document.DocumnetNode.Descendants(「img」||「a)就像這樣。我需要採取」a「 - >」href「和」img「 - >」src「和前綴將會像你的......再次感謝 –

+0

@ user3151816請將我的答案標記爲已接受,如果它已經滿足你的問題;-) – jwillmer

+1

是的,我做了對不起,我試圖投票但沒有工作。 –