C#爬虫

C#爬虫之WebClient、WebRequest、WebResponse应用

WebClient 获取网页Html

 WebClient MyWebClient = new WebClient();
                MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
                Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
                pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句

请求数据并保存为文件

try
            {
                WebRequest request = WebRequest.Create(urls);//图片src内容
                WebResponse response = request.GetResponse();
                //文件流获取图片操作
                Stream reader = response.GetResponseStream();
                string path = "H://imgs//" + count.ToString() + "//" +aa.ToString()+"//"+ i.ToString() + ".jpg";        //图片路径命名 
                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();
                response.Close();
                //下载成功

            }
            catch (Exception msg)
            {
                Console.Write(msg.Message);
                return;
            }

利用正则表达式和队列可以爬取网页上的图片,请看下面例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;
using System.Net;
using System.Collections;

namespace ConsoleApp16
{
    class Program
    {
        public static string HtmlText(string url)
        {
            string pageHtml = "";
            try
            {
                WebClient MyWebClient = new WebClient();
                MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
                Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
                pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
            }
            catch (WebException webEx)
            {
                Console.WriteLine(webEx.Message.ToString());
            }
            return pageHtml;
        }

        public static void save(int i, int count, int aa, string urls)
        {
            try
            {
                WebRequest request = WebRequest.Create(urls);//图片src内容
                WebResponse response = request.GetResponse();
                //文件流获取图片操作
                Stream reader = response.GetResponseStream();
                string path = "H://qimg//" + count.ToString() + "//" + aa.ToString() + "//" + i.ToString() + ".jpg";        //图片路径命名 
                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();
                response.Close();
                //下载成功

            }
            catch (Exception msg)
            {
                Console.Write(msg.Message);
                return;
            }
        }

        static void Main(string[] args)
        {
            Queue html = new Queue();//初始化网页链接队列
            Queue img = new Queue();//初始化图片地址队列
            int index = 0;
            string pageHtml = HtmlText(网站主页urls);
            Regex re = new Regex(正则表达式匹配下一级网页链接);
            MatchCollection mc = re.Matches(pageHtml);
            foreach (Match ma in mc)
            {
                string tmp = urls + ma.Value.ToString();
                html.Enqueue(tmp);//入队
            }
            int i = 1;
            while (html.Count > 0)
            {
                if (i < 30)
                {
                    if (i % 2 == 0)
                    {
                        i++;
                        html.Dequeue();
                        continue;
                    }
                }
                else
                    Directory.CreateDirectory("H://qimg//" + i.ToString());//创建目录
                string ss = (string)html.Dequeue();
                for (int aa = 1; aa < 4; aa++)
                {
                    string path = ss + "?" + "sub=" + aa.ToString();
                    string Html = HtmlText(path);
                    Regex res = new Regex(正则表达式匹配图片地址, RegexOptions.None);
                    MatchCollection mcs = res.Matches(Html);
                    foreach (Match mas in mcs)
                    {
                        string a = "https://" + mas.Value.ToString();
                        img.Enqueue(a);
                    }
                    Regex ree = new Regex(正则表达式, RegexOptions.None);//将找到的新的图片html加入队列
                    MatchCollection mce = ree.Matches(Html);
                    foreach (Match mae in mce)
                    {
                        string tmp = "https://" + mae.Value.ToString().Replace("\"","").Replace(">","");//替换字符
                        html.Enqueue(tmp);
                    }
                    Directory.CreateDirectory("H://qimg//" + i.ToString() + "//" + aa.ToString());
                   for(int s=1;img.Count>0;s++)
                    {
                        if (s <= 8)//保存找到的前八张图片
                            save(s, i, aa, (string)img.Dequeue());
                        else
                            img.Dequeue();
                    }
                    Console.WriteLine("ok");
                }
                    html.Dequeue();//保存完当前网页图片,出队
                    i++;
             }
            }
        }
}

写好正则表达式后,程序就会自己不断从网站上爬取图片,保存到本地。控制台可以使程序执行地更快。个人只是初学者,最近要用到才拿来玩玩,怕以后忘记才记录下来。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c是英语字母表中的第三个字母,也被称为"Cee"(带音标的发音)。它的拉丁字母表中的原始形式源自于古埃及象形文字,早期的形式类似于一个非常弯曲的手臂。在英语中,c通常用于构建单词的开头或中间,它是一个常见的辅音字母。在拼写时,c通常与其他辅音字母组合成不同的音节。例如,在cat这个词中,c用/k/的音值发音。另外,在某些情况下,它也能够发出/s/的音值,比如在city这个词中。 除了英语之外,c还在许多其他语言中使用。比如在法语中,c有时可以发出/s/的音值,而在德语中可以被发成/k/、/ts/或/tʃ/的音值。在汉字拼音系统中,c通常用于表示/ch/的音值,例如在“中”和“吃”这两个字中。 在数学领域,c通常代表着“常数”的意思。在复数中,c经常用来表示实部或复数单位。在化学中,c是指光速的符号,其数值约为299,792,458米/秒。 总的来说,c是一个常见且有着多种发音和用途的字母,在语言、科学和数学中都扮演着重要的角色。 ### 回答2: c是计算机科学中的一种编程语言,也是很多编程初学者首选的语言之一。它被广泛应用于软件开发、系统编程、游戏开发等领域。 c语言的特点包括简洁、高效、灵活等。它的语法结构相对简单,易于学习和理解。同时,c语言还提供了丰富的库函数,可以方便地实现各种功能。因此,c语言在开发一些性能要求较高的程序时非常适用。 c语言的应用范围非常广泛。在软件开发方面,c语言可以用于开发操作系统、数据库、网络通信等底层应用程序。在游戏开发方面,c语言常被用于开发游戏引擎和游戏逻辑,因为它的性能非常出色。此外,c语言还可以用于嵌入式系统的开发,例如智能家居、汽车电子、医疗设备等。总而言之,c语言的应用非常广泛,几乎可以涵盖计算机科学领域的各个方面。 然而,c语言也存在一些局限性。由于c语言的底层特性较强,对程序员的要求比较高。而且,c语言不支持面向对象的编程方式,这在一些大型项目中可能会有一定的局限性。同时,c语言的代码可读性也较差,容易出现bug。因此,在实际应用中,程序员们也需要特别小心。 综上所述,c语言是一种重要的编程语言,被广泛应用于计算机科学领域。它的简洁、高效、灵活等特点使其得到众多程序员的青睐。然而,也需要注意c语言的局限性和一些潜在的问题。 ### 回答3: c是英文字母表中的第三个字母,也是拉丁字母表中的一个字母。在数学中,c常常代表着"常数"的意思,表示一个固定的数值,与变量相对。在化学中,C是碳元素的化学符号,是一种非金属元素,也是地壳中含量最多的元素之一。碳是生命的基础,是有机物的重要组成部分。在计算机科学中,C是一种编程语言的名字,是一种通用的高级程序设计语言,广泛用于软件开发领域。此外,在音乐中,C是一个音调的名称,位于音阶中的第一个音符位置。综上所述,C有着多种不同的含义和用法,根据不同的领域和背景,它可以代表着不同的概念和意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值