下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
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.Threading; using System.Threading.Tasks; using System.windows.Forms; using Newtonsoft.Json; using Newtonsoft.Json.linq; namespace 图片下载器 { public partial class Form1 : Form { private string dir; public Form1() { Control.CheckForIllegalCrossthreadCalls = false;//这种方法不推荐使用,即不检查跨线程 *** 作,应该使用委托的 InitializeComponent(); } private voID butSelect_Click(object sender,EventArgs e) { FolderbrowserDialog dlg = new FolderbrowserDialog(); if (dlg.ShowDialog() == System.windows.Forms.DialogResult.OK) { textDir.Text = dlg.Selectedpath; } } public static int pagecount = 1; private voID Showpages() { this.textShow.AppendText("目前正在下载第" + pagecount + "页\n"); } private voID butStart_Click(object sender,EventArgs e) { string key = textKeyWords.Text; if (string.IsNullOrEmpty(key)) {//检测关键字 MessageBox.Show("请输入关键词!"); return; } if (string.IsNullOrEmpty(textDir.Text)) {//检测路径 MessageBox.Show("请选择路径!"); return; } dir = textDir.Text; if (!dir.EndsWith("\")) { dir = dir + "\"; } Thread thread = new Thread(() => {//启动一个新线程 process(key); }); thread.Start();//线程启动 } private voID process(string key) { int count = (int)numericupdown.Value;//请求的页面数量 for (int i = 0 ; i < count ; i++) { pagecount = i + 1; Showpages(); httpWebRequest req = (httpWebRequest)WebRequest.Create("http://image.baIDu.com/search/avatarjson?tn=resultJsonavatarnew&IE=utf-8&word=" + Uri.EscapeUriString(key) + "&cg=girl&pn=" + (i + 1) * 60 + "&rn=60&itg=0&z=0&fr=&wIDth=&height=&lm=-1&ic=0&s=0&st=-1&gsm=360600003c"); using (httpWebResponse res = (httpWebResponse)req.GetResponse()) { if (res.StatusCode == httpStatusCode.OK) { using (Stream stream = res.GetResponseStream()) { try { download(stream); } catch (Exception e) { textShow.BeginInvoke(new Action(() => { textShow.AppendText(e.Message + Environment.Newline); })); } } } else { MessageBox.Show("获取第" + i + "页失败!" + res.StatusCode); } } } } private voID download(Stream stream) { using (StreamReader reader = new StreamReader(stream)) { string Json = reader.ReadToEnd(); JObject objRoot = (JObject)JsonConvert.DeserializeObject(Json); JArray imgs = (JArray)objRoot["imgs"]; for (int j = 0 ; j < imgs.Count ; j++) { JObject img = (JObject)imgs[j]; string objUrl = (string)img["objURL"];//http://hibiadu....../1.jpg // textShow.AppendText(objUrl + Environment.Newline); //保存的路径是:destDir; try { DownloadImage(objUrl);//避免一个方法中的代码过于复杂 } catch (Exception ex) { //子线程的代码中 *** 作界面控件要使用BeginInvoke textShow.BeginInvoke(new Action(() => { textShow.AppendText(ex.Message + Environment.Newline); })); } } } } private voID DownloadImage(string objUrl) { //得到保存的路径 string path = Path.Combine(dir,Path.Getfilename(objUrl)); httpWebRequest req = (httpWebRequest)WebRequest.Create(objUrl); req.Referer = "http://image.baIDu.com/";//欺骗网站服务器这是从百度图片发出的 using (httpWebResponse res = (httpWebResponse)req.GetResponse()) { if (res.StatusCode == httpStatusCode.OK) { using (Stream stream = res.GetResponseStream()) using (Stream filestream = new fileStream(path,fileMode.Create)) { stream.copyTo(filestream); } } else { throw new Exception("下载失败" + res.StatusCode); } } } } }
百度网盘下载:http://pan.baidu.com/s/1kT3YzXl密码: gafi
来自:http://blog.csdn.net/jtahstu/article/details/48109555
以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的基于C#的百度图片批量下载工具全部内容,希望文章能够帮你解决基于C#的百度图片批量下载工具所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)