C#语言实现对网页图片的随机抓取。基础办法,但还有一点小问题,欢迎大家指正

//当点击读取的时候,抓取网页源代码
        string wangzhi;
        string respHtml;
        private void 读取网页源代码ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            textBox2.Clear();  //读 取之前清空
            wangzhi = comboBox1.Text;
            HttpWebRequest rep = (HttpWebRequest)WebRequest.Create(wangzhi);  //通过网址找到网页放在rep里。建立连接
            HttpWebResponse resp = (HttpWebResponse)rep.GetResponse();  //读取网页
            Encoding htmlEncoding = Encoding.Default;   //确定编码格式
            StreamReader sr = new StreamReader(resp.GetResponseStream(), htmlEncoding); //把网页源代码存入流中
            respHtml = sr.ReadToEnd();  //把流从头到尾读出,转换成字符串
            textBox2.Text = respHtml; //获取的网页源代码
            comboBox1.Items.Add(comboBox1.Text);

}

  //从网页源码中获取图片,并且下载到E盘
        public int num = 0;
        private void 从网页源码中读取图片ToolStripMenuItem_Click(object sender, EventArgs e)
        {
             listView1.Columns.Clear();
             listView1.Items.Clear();
             listView1.Columns.Add("链接地址和图片地址",700);
             string result = respHtml;     //用result接受网页源代码
             MatchCollection mc;            //mc是个集合可以放任何东西           

              //正则表达式获取<img src=>图片url
            mc = Regex.Matches(result, @"<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 mc)      //遍历集合,并把所有的图片地址放在listViews里
            {
            listView1.Items.Add(match.Value.ToString());
            }
            num = listView1.Items.Count;  //记录有多少条img地址
            string imgsrc = string.Empty;  //定义
            //循环下载
            for (int i = 0; i < num; i++)
            {
                string imgurl = listView1.Items[i].ToString();  //获取图片url地址
                Regex reg = new Regex(@"<img.*?src=""(?<src>[^""]*)""[^>]*>",RegexOptions.IgnoreCase);//表示不可变的正则表达式
                MatchCollection mcl = reg.Matches(imgurl);  //设定要查找的字符串
                foreach (Match mm in mcl)
                {
                    try
                    {
                        WebRequest req = WebRequest.Create(mm.Groups["src"].Value);  //图片的src内容
                        WebResponse res = req.GetResponse();
                        //用文件流读取图片
                        Stream reader = res.GetResponseStream(); //从互联网返回数据流
                        string path = "E://" + i.ToString() + ".jpg";   //图片路径命名.注意格式,E后面的引号用中文!!!!!!!!!!
                        FileStream writer = new FileStream(path, 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();
                        res.Close();
                        listView1.Items.Add(path + "图片保存成功!");

                    }
                    catch
                    {
                        MessageBox.Show("本网页图片读取完毕");
                    }

                }
            }

        }
    }
  }
时间: 2024-11-05 18:52:00

C#语言实现对网页图片的随机抓取。基础办法,但还有一点小问题,欢迎大家指正的相关文章

网页调试技巧:抓取马上跳转的页面POST信息或者页面内容

http://www.qs5.org/Post/625.html 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容 2016/02/02 | 心得分享 | 0 Replies 有时候调试网页或者抓别人网页的POST包的时候. 总会遇到这样的尴尬,我们需要抓取POST提交的信息. 或者获取POST完成页面返回的代码. 但是,目标页却马上就跳转了,导致,还没来得及Esc呢,页面就已经刷新了. 这种情况,起码谷歌浏览器的F12是搞不了了... 比如下面的情况 我把密码放在 被Post页面的源码

Python抓取需要cookie的网页

Python抓取需要cookie的网页 在仿照<Python小练习:可视化人人好友关系>一文时,需要登录模拟登录人人网.然而自从CSDN事件之后,人人网开始使用加密方式处理登录名和密码,直接使用post方式已经无法登陆人人网.这时,从豆瓣讨论中找到了解决方法: 1. 首先使用浏览器登陆人人,然后找到浏览器中关于登陆的Cookie: 2. 将Cookie记录下来,在Python中使用cookie模块模拟浏览器的行为: 3. 取得并解析数据. 1. HTTP协议与Cookie 抓取网页的过程跟浏览

Asp.net 使用正则和网络编程抓取网页数据(有用)

Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </summary> /// <param name="strUrl">採集地址</param> /// <param name="Begin">開始字符</param> /// <param name="End">结束字符</param&g

python多线程实现抓取网页

Python实现抓取网页 下面的Python抓取网页的程序比较初级,只能抓取第一页的url所属的页面,只要预定URL足够多,保证你抓取的网页是无限级别的哈,下面是代码: ##coding:utf-8 ''' 无限抓取网页 @author wangbingyu @date 2014-06-26 ''' import sys,urllib,re,thread,time,threading ''' 创建下载线程类 ''' class download(threading.Thread): def __

Asp.net 使用正则和网络编程抓取网页数据(实用)

Asp.net 使用正则和网络编程抓取网页数据(实用) /// <summary> /// 抓取网页相应内容 /// </summary> /// <param name="strUrl">采集地址</param> /// <param name="Begin">开始字符</param> /// <param name="End">结束字符</param&g

C语言调用curl库抓取网页图片(转)

思路是先用curl抓取网页源码,然后以关键字寻找出图片网址. 范例: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <curl/curl.h> 5 6 void get_key_from_str(char *origin, char *str1, char *str2, char *key); 7 8 int main(int argc, char **

C# 抓取网页的img src带参数的图片链接,并下载

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.Threadin

盘点用Java抓取HTTP服务器和FTP服务器的网页数据或图片等数据的实用技巧

摘要 在信息时代,常常需要通过编程的方式来灵活整理各种网络数据.首先涉及到如何方便准确地抓取网络数据.下面盘点用Java程序来访问HTTP服务器以及FTP服务器的各种实用技巧.主要介绍了Java Socket.java.net.URL类.Selenuim软件包.Apache HttpClients.Apache FTPClient来和HTTP服务器以及FTP服务器通信的方法以及其优缺点. 参考资料 (1)本文参考了笔者所写的<Java网络编程核心技术详解>,2020年上半年出版. (2)Jav

一个咸鱼的Python爬虫之路(三):爬取网页图片

学完Requests库与Beautifulsoup库我们今天来实战一波,爬取网页图片.依照现在所学只能爬取图片在html页面的而不能爬取由JavaScript生成的图.所以我找了这个网站http://www.ivsky.com 网站里面有很多的图集,我们就找你的名字这个图集来爬取 http://www.ivsky.com/bizhi/yourname_v39947/ 来看看这个页面的源代码: 可以看到我们想抓取的图片信息在<li> 里面然后图片地址在img里面那么我们这里可以用Beautifu