2014-01-07 92 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

是的,我做了对不起,我试图投票但没有工作。 –