Example #1
0
        /// <summary>
        /// 抓网页数据核心方法
        /// </summary>
        /// <param name="pros"></param>
        /// <param name="threadName"></param>
        public void DoIt(List <Parameter> pros, string threadName)
        {
            ListBoxHelp.Add(lbRes, $"{DateTime.Now.CnTime()}|thread-{threadName} start..." + "\r\n");
            string TempUrl = txtURL.Text.Trim();

            for (int i = 0; i < pros.Count; i++)
            {
                //接收信号量,否则会阻塞达到暂停的目的
                EventHandle.WaitOne();
                //http
                HttpUtility   http  = new HttpUtility();
                StringBuilder sb    = new StringBuilder();
                StringBuilder sbLog = new StringBuilder();
                //获取参数
                Parameter para = pros[i];
                //计时开始
                Stopwatch sw = new Stopwatch();
                sw.Start();
                sb.AppendFormat("{0}", DateTime.Now.CnTime());
                //根据参数重新匹配http url
                string url = GenerateFullURL(TempUrl, para.Param);
                //请求http
                string value = TextHelper.ClearSpace(http.CreateGet(url));
                sw.Stop();
                sb.AppendFormat("|thread-{0}({1}/{2})serid:{3}|url:{4}", threadName, i + 1, pros.Count, para.Id, url);
                sb.AppendFormat("|times:{0}s", sw.ElapsedMilliseconds * 1.0 / 1000);
                sbLog.AppendFormat("serid:{0},{1}", para.Id, value); //TextHelper.ClearHtml(value)
                ListBoxHelp.Add(lbRes, sb.ToString() + "\r\n");
                LogHelper.WriteLog(sbLog.ToString());
                //最后一次不sleep了
                if (i < pros.Count)
                {
                    Thread.Sleep(ThreadSleep);
                }
                //执行完毕后计数
                CalculatedQuantity();
            }
            ListBoxHelp.Add(lbRes, $"{DateTime.Now.CnTime()}|thread-{threadName} finished!" + "\r\n");
        }