我想从网站链接建立一个图像列表,然后再将图像保存/下载到硬盘。
这是我从网站/网址获取链接的方式:
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;
}
然后我在这个测试函数中使用来构建一个来自url的所有链接的列表:
private List<string> test(string url, int levels, DoWorkEventArgs eve)
{
HtmlWeb hw = new HtmlWeb();
List<string> webSites;
try
{
doc = hw.Load(url);
webSites = getLinks(doc);
//retriveImages();
所以webSites是一个List会有来自主网站url的所有链接例如,如果它的google.com然后在webSites我将有19个项目,每个是来自google.com的链接
而retrieveImages()是:
private void retrieveImages()
{
var nodes = doc.DocumentNode.SelectNodes("//img");
foreach (var node in nodes)
{
List<string> images = new List<string>();
images.Add(node.Name);
}
}
并且retrieveImages()肯定不是好代码,也不起作用。如果我使用它移动//并调用retrieveImages(),则没有任何事情发生webSites List为空。
我想做的是在函数retrieveImages()中立即从当前站点/链接构建图像列表,然后还将图像下载到硬盘中我建立的列表中的图像。 / p>
答案 0 :(得分:0)
private List<string> retrieveImages()
{
List<string> imgList = new List<string>();
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm"); //or whatever HTML file you have
HtmlNodeCollection imgs = doc.DocumentNode.SelectNodes("//img[@src]");
if (imgs == null) return new List<string>();
foreach (HtmlNode img in imgs)
{
if (img.Attributes["src"] == null)
continue;
HtmlAttribute src = img.Attributes["src"];
imgList.Add(src.Value);
//Do something with src.Value such as Get the image and save it locally
// Image img = GetImage(src.Value)
// img.Save(aLocalFilePath);
}
return imgList;
}
private Image GetImage(string url)
{
System.Net.WebRequest request = System.Net.WebRequest.Create(url);
System.Net.WebResponse response = request.GetResponse();
System.IO.Stream responseStream = response.GetResponseStream();
Bitmap bmp = new Bitmap(responseStream);
responseStream.Dispose();
return bmp;
}