Пример #1
0
        private SiteProInfo GetProduct(string singleHtml,IProList proListManager)
        {
            SiteProInfo item = new SiteProInfo();
            item.ProUrl = proListManager.GetSpUrl(singleHtml);
            if (proListManager.ErrorInfo != null)
            {
                new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                proListManager.ErrorInfo = null;
                return null;
            }
            item.SiteSkuId = proListManager.GetItemSku(item.ProUrl);
            item.SpName = proListManager.GetSpName(singleHtml);
            if (proListManager.ErrorInfo != null)
            {
                new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                proListManager.ErrorInfo = null;
                return null;
            }
            item.SpPrice = proListManager.GetSpPrice(singleHtml, item.SiteSkuId);
            if (item.SpPrice <= 0)
                return null;
            item.FloorPrice = item.SpPrice;
            if (proListManager.ErrorInfo != null)
            {
                new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                proListManager.ErrorInfo = null;
                return null;
            }
            item.smallPic = proListManager.GetSmallPic(singleHtml);
            if (proListManager.ErrorInfo != null)
            {
                new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                proListManager.ErrorInfo = null;
                return null;
            }
            item.CommenCount = proListManager.GetComments(singleHtml);
            if (proListManager.ErrorInfo != null)
            {
                new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                proListManager.ErrorInfo = null;
                return null;
            }

            item.SiteCat = proListManager.SiteCatInfo.ClassId;
            item.SiteId = proListManager.SiteCatInfo.SiteId;
            item.CreateDate = DateTime.Now;
            item.UpdateTime = DateTime.Now;
            return item;
        }
Пример #2
0
        private void SaveProduct(IProList proListManager)
        {
            string pageUrl = proListManager.getListUrl();

            //var paNum = proListManager.Reginfo.PageStart + proListManager.Reginfo.PageStep;
            //string tempPageUrl = pageUrl.Replace("$page", paNum.ToString());
            //string pageHtml = proListManager.DownLoadPage(tempPageUrl, proListManager.AreaInfoId);
            //if (string.IsNullOrEmpty(pageHtml))
            //{
            //    if (proListManager.ErrorInfo != null)
            //        new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
            //          return;
            //}

            int maxPage = 1;

            List<SiteProInfo> list = new List<SiteProInfo>();
            SiteProInfoBll probll = new SiteProInfoBll();

            for (int i = 0; i < maxPage; i++)
            {
                if (Quitout)
                    break;
                int paNum = proListManager.Reginfo.PageStart + proListManager.Reginfo.PageStep * i;
                string tempPageUrl = pageUrl.Replace("$page", paNum.ToString());
                Stopwatch downLoadtime = new Stopwatch();
                downLoadtime.Start();
                string pageHtml = proListManager.DownLoadPage(tempPageUrl, proListManager.AreaInfoId);
                downLoadtime.Stop();
                if (string.IsNullOrEmpty(pageHtml))
                {
                    if (proListManager.ErrorInfo != null)
                        new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                    continue;
                }

                if (i == 0)
                {
                     maxPage = proListManager.getPageNum(pageHtml);
                    if (!proListManager.HasProducts(pageHtml))
                    {
                        if (proListManager.ErrorInfo != null)
                        {
                            proListManager.ErrorInfo.UrlPath = pageUrl;
                            new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                            return;
                        }
                    }
                }
                string content = string.IsNullOrEmpty(proListManager.Reginfo.ListsReg) ? pageHtml : proListManager.GetProConent(pageHtml);
                MatchCollection mcsingle = proListManager.GetSigleProduct(content);
                if(mcsingle== null)
                {
                    MessageCenter.ShowBox("[线程" + Thread.CurrentThread.Name + "]" + proListManager.SiteName + " " + proListManager.CatInfo.CatName + " 第" + (i + 1) + "页 单个产品匹配错误" , 2);
                    continue;
                }

                if (proListManager.ErrorInfo != null)
                {
                    new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                    proListManager.ErrorInfo = null;
                    continue;
                }
                int tempUpdate = 0;
                int temperror = 0;
                int tempadd = 0;
                Stopwatch detialtime = new Stopwatch();
                detialtime.Start();
                foreach (Match item in mcsingle)
                {
                    SiteProInfo pro = new SiteProInfo();
                    string singlePro = item.ToString();
                    try
                    {
                         pro = GetProduct(singlePro, proListManager);
                    }
                    catch (Exception ex)
                    {
                        LogServer.WriteLog(ex);
                        continue;
                    }

                    if (proListManager.ErrorInfo != null)
                    {

                        new SaveSpiderErrorBll().SaveSpiderError(proListManager.ErrorInfo);
                        proListManager.ErrorInfo = null;
                        temperror++;
                        continue;
                    }
                    if (pro == null)
                    {
                        temperror++;
                        continue;
                    }
                    var oldpro = probll.FindOne(pro.SiteSkuId);
                    if (oldpro != null)
                    {
                        if (pro.SpPrice != oldpro.SpPrice || pro.SpName != oldpro.SpName)
                        {
                            new HisSiteProInfoBll().AddHissiteproinfo(pro);
                        }
                        if (oldpro.FloorPrice < pro.FloorPrice)
                        {
                            pro.FloorPrice = oldpro.FloorPrice;
                        }
                        pro.CreateDate = oldpro.CreateDate;
                        probll.UpdateProinfo(pro);
                        tempUpdate++;
                    }
                    else
                    {
                        pro.ClassId = proListManager.CatInfo.Id;
                        //detial
                        getProDetial(pro, proListManager);

                        list.Add(pro);
                        new HisSiteProInfoBll().AddHissiteproinfo(pro);
                        tempadd++;

                    }

                }
                detialtime.Stop();
                probll.addSiteProinfo(list);
                list.Clear();
                MessageCenter.ShowBox("[线程" + Thread.CurrentThread.Name + "]" + proListManager.SiteName + " " + proListManager.CatInfo.CatName + " 第" + (i + 1) + "/" + maxPage + "页" + tempUpdate + "/" + tempadd + "/" + temperror + " t1:" + downLoadtime.Elapsed.TotalSeconds.ToString("0") + "s " + "t2:" + detialtime.Elapsed.TotalSeconds.ToString("0") + "s", 2);
            }
            if (list.Count == 0)
                return;
        }
Пример #3
0
 private void getProDetial(SiteProInfo pro, IProList proListManager)
 {
     string detial = proListManager.DownLoadPage(pro.ProUrl, proListManager.AreaInfoId);
     pro.SellType = proListManager.GetSellType(detial);
     pro.BigPic = proListManager.GetBigPic(detial);
     pro.spBrand = proListManager.GetBrand(detial);
     pro.spSkuDes = proListManager.GetSkuDes(detial);
     pro.Otherpic = proListManager.GetOtherpic(detial);
     pro.ShopName = proListManager.GetShopName(detial);
 }