采集原理 代码直接可用

来源:互联网 发布:网络活动策划方案 编辑:程序博客网 时间:2024/05/20 15:41
 

其实采集并没有什么只是经验少有时有人说   “采集”  有时会误导人 
说白了就是: 首先得到一个入口“入口 就是url地址” 通过正则表达式 “(?<=" + (变量)+ ").*?(?=" + (变量)+ ") 就是从什么后开始 到什么时候结束 是开始和结束之间的字符串” 能得到您输入的url地址里面的网页所有代码赋给一个字符串,然后在得到这个字符串里面的所有url地址(href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']),放在泛型里面,然后便利泛型调用某方法(方法里要做的事   就是得到 XX内容 XX标题 XX时间 XX什么   得到你想得到的)得到之后再把本网页里面的所有url放到放到泛型里继续便利  一只到不符合条件或者泛型里没有数据为止

 

 

  /// <summary>
        /// 获得网页代码
        /// </summary>
        /// <param name="Url">路径</param>
        /// <param name="ecode">编码</param>
        /// <returns>字符串</returns>
        public string getUrltoHtml(string Url, string ecode)//第一个残参数url是地址,第二个是编码格式 gb2312|Utf-8 返回string类型 返回的就是本url里面的所有代码
        {
            try
            {

                System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
                System.Net.WebResponse wResp = wReq.GetResponse();
                System.IO.Stream respStream = wResp.GetResponseStream();
                System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding(ecode));
                return reader.ReadToEnd();
            }
            catch
            {
                return "";
            }
        }

 

 

   /// <summary>
        /// 得到标题
        /// </summary>
        /// <param name="StrHtml">网页代码</param>
        /// <param name="str1">从什么时候开始</param>
        /// <param name="str2">到什么时候结束</param>
        /// <returns>字符串</returns>
        public string getword(string StrHtml, string str1, string str2)//这个方法是得到你要获取的内容“比如:asd是字符串 你输入第一个字符串str1="a",str2="d" 那么你得到的就是s, 这个方法的第一个参数是网页的全代码 配合上面的方法一起用 上面方法是传url和编码格式得到 网页全代码,第二个是有截取的字符开始的位置,第三个参数是要截取的字符 结束位置”
        {


            string rv = "";
            string strRegex = "(?<=" + str1 + ").*?(?=" + str2 + ")";
            rv = System.Text.RegularExpressions.Regex.Match(StrHtml, strRegex, System.Text.RegularExpressions.RegexOptions.Singleline).ToString();

            return rv;

        }

 


 //本方法有三个参数 第一个url地址 第二个是编码格式 第三个是条件 条件可加可不加    上面说到调用方法说的就是调用本方法
  private void geturls(string url, string code, string txtcondition)
        {
            //调用方法得到网页所有代码txtcode编码格式
            string htmlstring = getUrltoHtml(url, code);
          
            //得到本网页的标题
            string title = getword(htmlstring, txttitle1.Text, txttitle2.Text);
            //得到内容
            string content = getword(htmlstring, textBox1.Text, textBox2.Text);
  //发布到webservice加到数据库
            if (url.IndexOf(txtcondition) > 0 && url.IndexOf("http://") >= 0)
            {
                ServiceReference1.Service1SoapClient l = new ServiceReference1.Service1SoapClient();
                l.Addcollectioninfo(url,title,content);
            }


            System.Collections.IEnumerator enu;
            //定义一个字符串用来在后面替换得到的url多余字符
            string weburl = "";
            //得到url的正则表达式
            string regex = "href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']";
            Regex re = new Regex(regex);
            //在htmlstring所有网页代码里找到你要的标题
            MatchCollection matches = re.Matches(htmlstring);
            enu = matches.GetEnumerator();
            while (enu.MoveNext() && enu.Current != null)
            {
                Match match = (Match)(enu.Current);
                //找到的url多余地方替换掉
                weburl = match.Value.Replace("\"", "").Replace("href=", "");
                weburl = jeudui(txturl.Text, weburl);

                //把符合条件的url在家到反省里
                if (listurl.IndexOf(weburl) == -1 && weburl.IndexOf(txtcondition) > 0 && url.IndexOf("http://") >= 0)
                {
                    listurl.Add(weburl);
                }
            }

        }

 

  /// <summary>
        /// 用来判断url地址是否是本网站 在得到网页全代码时传来url地址
        /// </summary>
        private string EstimateWhetherEquality(string url)
        {
            string s = "";
            try
            {
                Uri baseUri = new Uri(url);
//列:http://www.baidu.com/asd/asd/asd 用过Uri baseUri = new Uri(http://www.baidu.com/asd/asd/asd) 得到的就是www.baidu.com
                s = baseUri.Host;
                return s;
               
            }
            catch
            {
                return s;
            }

        }

一定要看  明白在用  要不然下次你还是不回

原创粉丝点击