zoukankan      html  css  js  c++  java
  • 用C#开发蜘蛛网络爬虫采集程序(附源码)(一)

    开发爬虫程序首先要先得到Web页面的HTML代码,微软已经为我们提供了很方便的方法,我们可以用WebClient或WebRequest、HttpWebResponse来很容易的得到网站页面的HTML代码。最后已经提供源码下载。

    先举例用WebClient得到HTML代码的方法。

        private string getHTML(string strUrl,Encoding encoding)
        {
            Uri url = new Uri(strUrl);
            WebClient wc = new WebClient();
            wc.Encoding = encoding;
            Stream s = wc.OpenRead(url);
            StreamReader sr = new StreamReader(s, encoding);
            return sr.ReadToEnd();
        }

    调用的时候需要知道页面的编码方式,后面会给大家举个不需要知道编码方式的例子。先看一下调用的方法:

    string html = getHTML("http://www.baidu.com", Encoding.GetEncoding("GB2312"));

    接下来就是重点了,用WebRequest、HttpWebResponse来获取页面的HTML代码,而且只需要传递进去一个URL就可以了,编码方式可以由程序来分析,虽然还不太完美,但大部分网站都能识别出来。

    先用WebRequest初始化一个实列,然后用GetResponse请求得到的响应返回给HttpWebResponse,通过response.StatusDescription就可以得到编码方式的代码,通过分析得到我们需要的网页编码方式,最后将HTML代码读出来就可以了。

        private void getHTMLbyWebRequest(string strUrl)
        {
            Encoding encoding = System.Text.Encoding.Default;
            WebRequest request = WebRequest.Create(strUrl);
            request.Credentials = CredentialCache.DefaultCredentials;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if (response.StatusDescription.ToUpper() == "OK")
            {
                switch (response.CharacterSet.ToLower())
                {
                    case "gbk":
                        encoding = Encoding.GetEncoding("GBK");//貌似用GB2312就可以
                        break;
                    case "gb2312":
                        encoding = Encoding.GetEncoding("GB2312");
                        break;
                    case "utf-8":
                        encoding = Encoding.UTF8;
                        break;
                    case "big5":
                        encoding = Encoding.GetEncoding("Big5");
                        break;
                    case "iso-8859-1":
                        encoding = Encoding.UTF8;//ISO-8859-1的编码用UTF-8处理,致少优酷的是这种方法没有乱码
                        break;
                    default:
                        encoding = Encoding.UTF8;//如果分析不出来就用的UTF-8
                        break;
                }
                this.Literal1.Text = "Lenght:" + response.ContentLength.ToString() + "<br>CharacterSet:" + response.CharacterSet + "<br>Headers:" + response.Headers + "<br>";
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream, encoding);
                string responseFromServer = reader.ReadToEnd();
                this.TextBox2.Text = responseFromServer;
                FindLink(responseFromServer);
                this.TextBox2.Text = ClearHtml(responseFromServer);
                
                reader.Close();
                dataStream.Close();
                response.Close();
            }
            else
            {
                this.TextBox2.Text = "Error";
            }
        }

    这样网页的HTML代码就已经得到了,接下来就是处理链接和过滤掉没用的HTML代码并把文本内容保留下来了。

     用C#开发蜘蛛网络爬虫采集程序(一)

     用C#开发蜘蛛网络爬虫采集程序(二)

    量的积累到质的飞越

  • 相关阅读:
    问题详情-手机问问
    红萝卜要不要削皮?
    清炖香菇
    如何清洗新鲜的香菇
    青菜粥的做法
    Qt移动版优化后台云服务、支持跨平台开发
    EF架构~EF异步改造之路~仓储接口的改造~续
    EF架构~EF6配置需要注意的几个地方
    EF架构~EF异步改造之路~让DbContextRepository去实现异步接口
    EF架构~EF异步改造之路~仓储接口的改造
  • 原文地址:https://www.cnblogs.com/taobox/p/2691694.html
Copyright © 2011-2022 走看看