前提
因为最近使用了webbrowse爬取页面数据需要把页面的图片下载下来。
正文
显示通过webbrowse的Navigate()方法加载数据
webbrowse中有3种方式获取相关需要的特定数据。
获取的数据通过正则表达式进行匹配对应的img的src路径,进行相关的判断,然后下载下来,存放到指定路径。项目是代码的相关实现
MatchCollection matches;
List<string> imglist = new List<string>();//获取这个内容中所以的img的src标签
matches = Regex.Matches(item["PartContent2"].ToString(), @"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);
foreach (Match match in matches)
{
imglist.Add(match.Value.ToString());
}
foreach(var img in imglist)
{
string content = img; //获取图片url
Regex reg = new Regex(@"<img.*?src=""(?<src>[^""]*)""[^>]*>", RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(content); //设定要查找的字符串
foreach (Match m in mc)
{
string url = m.Groups["src"].Value;
//判断图片中有没有下载路径
if (!url.Contains("http"))
{
url = "http://当前页url" + m.Groups["src"].Value;
}
try
{
WebRequest request = WebRequest.Create(url);//图片src内容
WebResponse response = request.GetResponse();
//文件流获取图片操作
Stream reader = response.GetResponseStream();
string imgsrc = url.Split('/')[url.Split('/').Length - 1];//截取图片的最后一个字的名称
string sPath = "D://Pictuers/" ;//图片存储位置
if (!Directory.Exists(sPath))
{
Directory.CreateDirectory(sPath);
}
sPath += "/"+ imgsrc; //图片路径命名
FileStream writer = new FileStream(sPath, FileMode.OpenOrCreate, FileAccess.Write);
byte[] buff = new byte[512];
int c = 0; //实际读取的字节数
while ((c = reader.Read(buff, 0, buff.Length)) > 0)
{
writer.Write(buff, 0, c);
}
//释放资源
writer.Close();
writer.Dispose();
reader.Close();
reader.Dispose();
response.Close();
}
标签:src,sPath,url,Webbrowse,获取,2C,页面,下载,图片
From: https://www.cnblogs.com/stupidparsley/p/16715781.html