博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 抓取网页的img src带参数的图片链接,并下载
阅读量:6514 次
发布时间:2019-06-24

本文共 4493 字,大约阅读时间需要 14 分钟。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Text.RegularExpressions;using System.Threading;using System.Windows.Forms;namespace ImageCollection{    public partial class Form1 : Form    {        private static string Path = AppDomain.CurrentDomain.BaseDirectory + "img";        public Form1()        {            InitializeComponent();        }        private void btnshuaqu_Click(object sender, EventArgs e)        {            string url = txturl.Text.Trim();            if (string.IsNullOrEmpty(url))            {                MessageBox.Show("请输入URl");                return;            }            txtimg.AppendText("开始抓取中:\r\n");            Thread th = new Thread(() => ShuaQu(url)) { IsBackground = true };            th.Start();        }        private void ShuaQu(string url)        {            DirectoryInfo di = new DirectoryInfo(Path);            if (System.IO.Directory.Exists(Path))            {                di.Delete(true);            }            System.IO.Directory.CreateDirectory(Path);            string result = WebHttp.HttpGet(url, null, 3);            string[] str = GetHtmlImageUrlList(result);            txtimg.Invoke(new Action(() =>            {                txtimg.AppendText("已经获取到数据!"+str.Count() + "\r\n");            }));            //建立获取网页标题正则表达式              String regex = @".+";            //返回网页标题              String title = Regex.Match(result, regex).ToString();            txttitle.Invoke(new Action(() => {                txttitle.Text = Regex.Replace(title, @"[\""]+", "");             }));            foreach (string s in str)            {                Uri u = new Uri(s);                if (u.Host == "www.xxx.com")                {                    Thread downimg = new Thread(() => Get_img(s)) { IsBackground = true };                    downimg.Start();                    txtimg.Invoke(new Action(() => {                        txtimg.AppendText(s + "\r\n");                    }));                }             }            txtimg.Invoke(new Action(() =>            {                txtimg.AppendText("全部抓取完成!\r\n");            }));        }        public void Get_img(string imgpath)        {                        string[] file = imgpath.Split('?');            string name = System.IO.Path.GetFileName(file[0]);            WebClient mywebclient = new WebClient();            mywebclient.DownloadFile(imgpath, Path + @"\" + name);            //Bitmap img = null;            //HttpWebRequest req;            //HttpWebResponse res = null;            //try            //{            //    System.Uri httpUrl = new System.Uri(imgpath);            //    req = (HttpWebRequest)(WebRequest.Create(httpUrl));            //    req.Timeout = 180000; //设置超时值10秒            //    req.UserAgent = "XXXXX";            //    req.Accept = "XXXXXX";            //    req.Method = "GET";            //    res = (HttpWebResponse)(req.GetResponse());            //    img = new Bitmap(res.GetResponseStream());//获取图片流                            //    img.Save(Path + @"\"+name);//随机名            //}            //catch (Exception ex)            //{            //    string aa = ex.Message;            //}            //finally            //{            //    res.Close();            //}        }        ///          /// 取得HTML中所有图片的 URL。         ///          /// HTML代码         /// 
图片的URL列表
private string[] GetHtmlImageUrlList(string sHtmlText) { // 定义正则表达式用来匹配 img 标签 Regex regImg = new Regex(@"
<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?
[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase); // 搜索匹配的字符串 MatchCollection matches = regImg.Matches(sHtmlText); int i = 0; string[] sUrlList = new string[matches.Count]; // 取得匹配项列表 foreach (Match match in matches) sUrlList[i++] = match.Groups["imgUrl"].Value; return sUrlList; } }}

 

 

#region 下载图片到Imagepublic static Image UrlToImage(string url) {    WebClient mywebclient = new WebClient();    byte[] Bytes = mywebclient.DownloadData(url);    using (MemoryStream ms = new MemoryStream(Bytes)) {        Image outputImg = Image.FromStream(ms);        return outputImg;    }}#endregion

 

转载于:https://www.cnblogs.com/testsec/p/6095851.html

你可能感兴趣的文章
Tomcat指定(JDK路径)JAVA_HOME而不用环境变量
查看>>
Bluemix专属版本落地中国 开放物联网和认知计算能力
查看>>
汤姆大叔的6道javascript编程题题解
查看>>
【世界知名量子科学家加盟阿里】施尧耘出任阿里云量子技术首席科学家
查看>>
DataCore对外出售其虚拟化软件产品
查看>>
如何唤醒沉睡的医疗大数据?
查看>>
动态应用加固(DAR)技术破局登录信息泄露难题
查看>>
大数据助力 智慧环保“十三五”前景广阔
查看>>
智慧计算战略再推进 浪潮新一代服务器M5发布在即
查看>>
WiFi卡慢顿赖路由?这个锅得手机背
查看>>
说说云计算与移动管理
查看>>
T-Mobile美国使用28GHz频段测试5G
查看>>
如何缓解影子云服务安全风险?
查看>>
补天白帽大会:建企业与白帽协同机制,全方位解决网络安全隐患
查看>>
Bossies 2016:最佳开源大数据工具
查看>>
银行卡信息安全事件频发 互联网站成数据泄露"重灾区"
查看>>
云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性创建ECS实例
查看>>
iOS10新特性提升安全 连接WiFi弹出提醒
查看>>
象云2.0产品发布暨国产操作系统首次入驻公有云
查看>>
一个完美DCIM应该具备的功能与价值
查看>>