تصاویر بصری برای درک واضحتر، سریعتر و آسانتر مسائل مفید هستند. بنابراین، تصاویر معمولاً به دلایل زیادی در وب استفاده می شوند. گاهی اوقات ممکن است نیاز به دانلود تصاویر از صفحات وب مختلف داشته باشید. بر این اساس، این مقاله نحوه دانلود تصویر از URL در سی شارپ را پوشش می دهد. همچنین حاوی برخی منابع دانلود است تا بتوانید به سادگی بارگیری تصویر را با یک نوع پروژه plug-and-play آزمایش کنید.
C# Web Scraping API نصب برای دانلود تصویر
Aspose.HTML for .NET یک کتابخانه C# است که میتواند برای استخراج دادهها یا اطلاعات از صفحات وب یا فایلهای HTML استفاده شود. با دانلود فایل های DLL مرجع از بخش New Releases یا با استفاده از دستور نصب زیر NuGet می توانید API را به راحتی پیکربندی کنید:
PM> Install-Package Aspose.Html
دانلود تصویر از URL در سی شارپ
با فراخوانی های ساده API می توانید به راحتی تصویر را از URL در سی شارپ دانلود کنید. به همین ترتیب، می توانید HTML و سایر فرمت های صفحه وب را برای دانلود تصاویر پردازش کنید. میتوانید تمام تصاویر را از عناصر IMG یا OBJECT از سند ورودی جمعآوری کنید و آنها را با نامهای منحصربهفرد در پوشه مشخص شده بنویسید. علاوه بر این، از ذخیره تصاویر PNG، JPG و همچنین SVG پشتیبانی می کند. لطفا مراحل زیر را برای دانلود تصاویر از URL در سی شارپ دنبال کنید:
- یک کلاس Image برای کار با URL، MimeType و Content ایجاد کنید.
- تصویر را از عنصر IMG یا OBJECT واکشی کنید.
- با استفاده از کلاس ImageSaver تصویر را روی دیسک بنویسید.
نمونههای کد زیر کل فرآیند دانلود برنامهنویسی تصویر در سی شارپ را نشان میدهند:
namespace DownloadImage
{
class Program
{
static void Main(string[] args)
{
// می توانید مجوز ارزیابی رایگان را در https://purchase.aspose.com/temporary-license دریافت کنید
Aspose.Html.License license = new License();
license.SetLicense("License.lic");
// مسیر را برای خواندن یا نوشتن داده ها روی دیسک تنظیم کنید
string dataDir = @"D:\Image Web Scraping\";
// مسیر خواندن فایل ورودی از دیسک محلی را مشخص کنید
//با استفاده از var doc = new HTMLDocument(dataDir + "Sample.html");
// URL را برای دانلود تصویر از URL در سی شارپ مشخص کنید
using var doc = new HTMLDocument("YOUR URL GOES HERE");
var grabber = new ImageGrabber();
var saver = new ImageSaver(dataDir);
saver.Save(grabber.GrabFrom(doc));
}
}
}
namespace DownloadImage
{
public class Image
{
public Image(ResponseMessage response)
{
Content = response.Content.ReadAsByteArray();
Url = response.Request.RequestUri;
MimeType = response.Headers.ContentType.MediaType;
}
public Url Url { get; }
public MimeType MimeType { get; }
public byte[] Content { get; }
}
}
namespace DownloadImage
{
class ImageGrabber
{
private readonly IList<IElementGrabber> _elementGrabbers = new List<IElementGrabber>();
public ImageGrabber()
{
_elementGrabbers.Add(new ImgElementGrabber());
_elementGrabbers.Add(new ObjectElementGrabber());
}
public IEnumerable<Image> GrabFrom(Document document)
{
return _elementGrabbers.SelectMany(collector => collector.Collect(document));
}
private interface IElementGrabber
{
public IEnumerable<Image> Collect(Document document);
}
private class ImgElementGrabber : IElementGrabber
{
public IEnumerable<Image> Collect(Document document)
{
var images = document.QuerySelectorAll("img");
foreach (Element image in images)
{
if (!image.HasAttribute("src")) continue;
var src = image.GetAttribute("src");
using var response = document.Context.Network.Send(new RequestMessage(new Url(src, document.BaseURI)));
if (response.IsSuccess)
{
yield return new Image(response);
}
}
}
}
private class ObjectElementGrabber : IElementGrabber
{
public IEnumerable<Image> Collect(Document document)
{
var objects = document.QuerySelectorAll("object");
foreach (Element obj in objects)
{
if (!obj.HasAttribute("data")) continue;
var data = obj.GetAttribute("data");
using var response = document.Context.Network.Send(new RequestMessage(new Url(data, document.BaseURI)));
if (response.Headers.ContentType.MediaType.Type.StartsWith("image") && response.IsSuccess)
{
yield return new Image(response);
}
}
}
}
}
}
namespace DownloadImage
{
public class ImageSaver
{
private readonly string _folderPath;
public ImageSaver(string folderPath)
{
_folderPath = folderPath;
}
public void Save(IEnumerable<Image> images)
{
foreach (var image in images)
{
Save(image);
}
}
public void Save(Image image)
{
if (!Directory.Exists(_folderPath)) Directory.CreateDirectory(_folderPath);
var fileName = Path.GetFileNameWithoutExtension(image.Url.Pathname);
var extension = Path.GetExtension(image.Url.Pathname);
if (string.IsNullOrEmpty(extension))
{
extension = image.MimeType.Type switch
{
"image/jpeg" => ".jpeg",
"image/png" => ".png",
"image/svg+xml" => ".svg",
_ => ".png"
};
}
if (string.IsNullOrEmpty(fileName))
{
fileName = "image";
}
var i = 0;
var fileNameWithExtension = fileName + extension;
string savedImagePath;
while (File.Exists(savedImagePath = Path.Combine(_folderPath, fileNameWithExtension)))
{
fileNameWithExtension = $"{fileName} ({i++}){extension}";
}
File.WriteAllBytes(savedImagePath, image.Content);
}
}
}
دانلود یک پروژه نمونه کار
میتوانید با شبیهسازی پروژه نمونه کار از مخزن GitHub یک برنامه آزمایشی C# plug-and-play پیدا کنید یا به عنوان یک فایل ZIP از Google Drive به آن دسترسی پیدا کنید.
مجوز ارزیابی رایگان دریافت کنید
شما می توانید با درخواست [مجوز موقت رایگان] از محدودیت های ارزیابی اجتناب کنید.
نتیجه
در این مقاله یاد گرفتید که چگونه تصویر را از URL یا در سی شارپ دانلود کنید. به همین ترتیب، می توانید تصاویر را از یک صفحه HTML بر اساس نیاز خود دانلود کنید زیرا API می تواند مسیرهای مربوط به تصاویر را حل کند. این به شما امکان می دهد تا تصاویر با فرمت JPG، PNG یا SVG را با نام های منحصر به فرد ذخیره کنید. علاوه بر این، میتوانید با مراجعه به بخش اسناد سایر ویژگیهای خراش دادن وب را کاوش کنید. در صورت نیاز به بحث در مورد هرگونه سؤال یا نگرانی، لطفاً برای ما در [فروم 10 بنویسید.