2012-11-17 8 views
5

Tôi mới sử dụng C# và tôi thực sự cần trợ giúp với vấn đề sau. Tôi muốn trích xuất các url ảnh từ một trang web có mẫu cụ thể. Ví dụ tôi muốn trích xuất tất cả các hình ảnh có mẫu name_412s.jpg sau. Tôi sử dụng đoạn mã sau để trích xuất hình ảnh từ html, nhưng tôi không kow làm thế nào để thích ứng với nó.Trích xuất các url hình ảnh từ html trong C# bằng cách sử dụng gói nhanh nhẹn html và viết chúng vào một tệp xml

public void Images() 
    { 
     WebClient x = new WebClient(); 
     string source = x.DownloadString(@"http://www.google.com"); 

     HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); 
     document.Load(source); 

     foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img") 
     { 
      images[] = link["src"]; 
     } 
} 

Tôi cũng cần ghi kết quả vào tệp xml. Bạn có thể giúp tôi với điều đó không?

Cảm ơn bạn!

Trả lời

3

Để giới hạn kết quả truy vấn, bạn cần thêm điều kiện vào XPath của mình. Ví dụ: //img[contains(@src, 'name_412s.jpg')] sẽ giới hạn kết quả chỉ với img các phần tử có thuộc tính src chứa tên tệp đó.

Theo như viết kết quả cho XML, bạn sẽ cần phải tạo một tài liệu XML mới và sau đó sao chép các phần tử phù hợp vào nó. Vì bạn sẽ không thể nhập trực tiếp nút HtmlAgilityPack vào XmlDocument, bạn sẽ phải sao chép tất cả các thuộc tính theo cách thủ công. Ví dụ:

using System.Net; 
using System.Xml; 

// ... 

public void Images() 
{ 
    WebClient x = new WebClient(); 
    string source = x.DownloadString(@"http://www.google.com"); 
    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); 
    document.Load(source); 
    XmlDocument output = new XmlDocument(); 
    XmlElement imgElements = output.CreateElement("ImgElements"); 
    output.AppendChild(imgElements); 
    foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img[contains(@src, '_412s.jpg')]") 
    { 
     XmlElement img = output.CreateElement(link.Name); 
     foreach(HtmlAttribute a in link.Attributes) 
     { 
      img.SetAttribute(a.Name, a.Value) 
     } 
     imgElements.AppendChild(img); 
    } 
    output.Save(@"C:\test.xml"); 
} 
+0

Tôi cũng cần phải xác định tất cả hình ảnh trên trang có tên _412s.jpg và tôi muốn thêm chúng vào xml, vì vậy, sau này, tôi có thể đọc danh sách xml và hiển thị các liên kết. Tôi muốn trích xuất tất cả các yếu tố, không chỉ một. Có hàng trăm hình ảnh với tên _412s.jpg. Làm thế nào tôi có thể làm điều đó? và đó là phương pháp tốt nhất để viết xml để tôi có thể hiển thị ảnh sau, khi đọc tệp xml? –

+1

@CristinaUrsu Xem câu trả lời cập nhật của tôi, hy vọng rằng câu trả lời cho câu hỏi của bạn. –

+0

bạn có biết cách điều chỉnh mã cho windows 8 không? Tôi đã đọc về gói nhanh nhẹn fizzler html nhưng tôi không thể tìm ra. Nó không nhận ra WebClient x = new WebClient(); hoặc XmlDocument output = new XmlDocument(); hoặc out.Save (@ "C: \ test.xml") ;. Bạn có thể giúp tôi được không? –