2014-01-07 2 views
1

이 코드는 효과가 있습니다. 문제가 없습니다.외부 URL/웹 사이트에서 전체 이미지 가져 오기

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 
      }; 

내 실수는 무엇 :

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을 반환? 이것이 이미지를 찍는 올바른 방법입니까?

+1

당신은 하나 개의 질의에 훨씬에 일을합니다. 코드를 여러 조각으로 나누면 혼자서 오류를 찾을 수 있습니다. – jwillmer

+0

영어 수업을위한 탁아 나는 사이트에서 새롭고 영어도 끔찍합니다. 그리고 지난 24 시간 동안 나는 잠을 자지 않았으므로 편집 버튼을 찾을 수 없었고 그것을 찾는데 많은 시간을 할애 할 수 없었습니다. 나는 긴장을 느낀다. 나는 정확한 것을 쓰려고 노력할 것이다. Otherside 코드는 여전히 작동하지 않습니다 !! –

답변

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

도와 주셔서 감사합니다. 그 중 하나가 작동하지만 내 첫 코드 너무 일하고있다. 실제로 나는 코드 구조를 매우 similir 한 것을 사용하고있었습니다. 그러나 나는 document.DocumnetNode.Descendants ("img"|| "a")와 같은 것을 발견 할 수 없었다. "a"-> "href"와 "img"-> "src"를 취하면 접두사는 다음과 같이 될 것이다. 너의 것 ... 다시 감사한다 –

+0

@ user3151816 질문을 만족한다면 받아 들일 수 있도록 내 대답을 표시해주십시오 .-) – jwillmer

+1

예. 죄송합니다. 투표를 시도했지만 작동하지 않았습니다. –

관련 문제