您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> .NET >> C#多线程处理百度关键词排名查询的问题

C#多线程处理百度关键词排名查询的问题

来源:网络整理     时间:2016/5/11 5:35:23     关键词:关键词排名查询,百度关键词排名

关于网友提出的“C#多线程处理百度关键词排名查询的问题”问题疑问,本网通过在网上对“C#多线程处理百度关键词排名查询的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:C#多线程处理百度关键词排名查询的问题
描述:

c#百度多线程域名

最近在做一个百度关键词排名查询的功能,要求是批量查询的,域名批量,关键词批量,就像爱站工具包关键词Url及排名那个功能,目前自己已实现关键词批量查询,卡在了域名批量这个功能点上了,不知道要用什么方法把多个域名和多个关键词联系起来,试了很多种办法都没达到预期的效果,谁能出来指导一下?万分感谢!!!
贴出部分代码:
(开启多线程目前最多5个线程)
    private void GetBaiduRanking()
        {
            this.lbSearchInfo.Text = "开始查询......";
            thread = new Thread[intThreadCount];
            for (int i = 0; i < intThreadCount; i++)
            {
                thread[i] = new Thread(new ThreadStart(GetBaiduRankingData));
                thread[i].IsBackground = true;
                thread[i].Start();
            }
        }
 private void GetBaiduRankingData()
        {
            while (KeyWordQueue.Count > 0)
            {
                string sUrl = "";
                int count = 0;
                int intPage = 1;
                string sCurrentKeyWord = "";
                threadList.Add(Thread.CurrentThread);
                lock (KeyWordQueue)
                {
                    if (KeyWordQueue.Count > 0)
                    {
                        sCurrentKeyWord = KeyWordQueue.Dequeue();
                    }
                }
                List firstRankResultList = new List();
                //分页查询,目前是控制只查询前100名
                while (count < 100)
                {
                    string sHtmlText = "";
                    List allRankResultList = new List();
                    sUrl = GetSearchUrl(count, sCurrentKeyWord);
                    //Socket获取百度搜索Html文本
                    //sHtmlText = WebToolKit.Get(sUrl, Encoding.UTF8).Replace("\n", "");
                    sHtmlText = this.GetHtmlText(sUrl, "utf-8", false, true).Replace("\n", "");
                    //是否出现验证码
                    IsAppearVerifyCode(sUrl, sHtmlText);
                    //包含排名ID和域名的html文本正则表达式
                    Regex regex = new Regex("<(div|table) class=\"result(?!-opxpath-log)(.*?)\" id=\"(?\\d+)\"(.*?)>(.*?)(.*?)href = \"(?\\S+)\"(.*?)>(?.*?)(.*?)<span class=\"(g|c-showurl|op_wiseapp_showurl)\">(?<url>.*?)(.*?)", RegexOptions.IgnoreCase);<br>                     try<br>                     {<br>                         #region 取某一页排名<br>                         //匹配正则表达式的文本<br>                         MatchCollection mcTable = regex.Matches(sHtmlText);<br>                         if (mcTable != null && mcTable.Count != 0)<br>                         {<br>                             //遍历匹配的HTML文本<br>                             foreach (Match item in mcTable)<br>                             {//循环当前页的结果<br>                                 string sSiteAddress = Convert.ToString(item.Groups["Url"]);<br>                                 if (sSiteAddress.Contains("<b>"))<br>                                 {<br>                                     sSiteAddress = sSiteAddress.Replace("<b>", "");<br>                                 }<br>                                 if (sSiteAddress.Contains("</b>"))<br>                                 {<br>                                     sSiteAddress = sSiteAddress.Replace("</b>", "");<br>                                 }<br>                                 if (sSiteAddress.Contains("..."))<br>                                 {<br>                                     sSiteAddress = sSiteAddress.Substring(0, sSiteAddress.IndexOf("..."));<br>                                 }<br>                                 #region 匹配导入的域名对应的排名<br>                                 string strSite = sSiteAddress.Contains("/") ? sSiteAddress.Substring(0, sSiteAddress.IndexOf("/") + 1) : sSiteAddress;<br>                                 //strInPutSiteAddress是输入的网址,目前只有单个网址,如何实现多个网址<br>                                 if (strSite.Contains(strInPutSiteAddress))<br>                                 {<br>                                     string sRealSiteAddress = GetRealSiteAddress(Convert.ToString(item.Groups["RealUrl"]));<br>                                     //string sRealSiteAddress = Convert.ToString(item.Groups["RealUrl"]);<br>                                     string sRank = Convert.ToString(item.Groups["ID"]);<br>                                     if (this.rbFirstRank.Checked)<br>                                     {<br>                                         var firstRankResult = new KeyWordRankResult() { SiteAddress = strInPutSiteAddress, Rank = Convert.ToInt32(sRank), RealAddress = sRealSiteAddress };<br>                                         firstRankResultList.Add(firstRankResult);<br>                                     }<br>                                     else<br>                                     {<br>                                         var allRankResult = new KeyWordRankResult() { SiteAddress = strInPutSiteAddress, Rank = Convert.ToInt32(sRank), RealAddress = sRealSiteAddress };<br>                                         allRankResultList.Add(allRankResult);<br>                                         //添加到DataGridView列表<br>                                         AddDataGridViewData(strInPutSiteAddress, sCurrentKeyWord, sRank, sRealSiteAddress, intPage);<br>                                     }<br>                                 }<br>                             }<br>                                 #endregion<br>                         }<br>                         #endregion<br>                         #region 判断域名在当前页是否有排名<br>                         if (this.rbAllRank.Checked)<br>                         {<br>                             if (!allRankResultList.Any())<br>                             {<br>                                 string sRanking = string.Format("第{0}页无排名", intPage);<br>                                 string sRealAddress = string.Format("第{0}页无数据", intPage);<br>                                 AddDataGridViewData(strInPutSiteAddress, sCurrentKeyWord, sRanking, sRealAddress, intPage);<br>                             }<br>                         }<br>                         #endregion<br>                     }<br>                     catch (Exception ex)<br>                     {<br>                         if (ex.Message.Contains("中止线程"))<br>                         {<br>                             Thread.ResetAbort();<br>                         }<br>                         else<br>                         {<br>                             MessageBox.Show(ex.ToString());<br>                         }<br>                     }<br>                     intPage++;<br>                     intHadSearchCount++;<br>                     count += intPageNumber;<br>                 }<br>                 #region 获取首个排名<br>                 if (this.rbFirstRank.Checked)<br>                 {<br>                     if (firstRankResultList.Any())<br>                     {<br>                         List<keywordrankresult> firstRankList = firstRankResultList.OrderBy(p => p.Rank).ToList();<br>                         string sSiteAddress = firstRankList.FirstOrDefault().SiteAddress;<br>                         string sRanking = firstRankList.FirstOrDefault().Rank.ToString();<br>                         string sRealAddress = firstRankList.FirstOrDefault().RealAddress;<br>                         AddDataGridViewData(sSiteAddress, sCurrentKeyWord, sRanking, sRealAddress, intPage);<br>                     }<br>                     else<br>                     {<br>                         const string sRanking = "无排名";<br>                         const string sRealAddress = "无数据";<br>                         AddDataGridViewData(strInPutSiteAddress, sCurrentKeyWord, sRanking, sRealAddress, intPage);<br>                     }<br>                 }<br>                 #endregion<br>                 if (intHadSearchCount == this.intSearchCount)<br>                 {<br>                     sw.Stop();<br>                     MessageBox.Show(sw.ElapsedMilliseconds.ToString());<br>                     SetUI();<br>                 }<br>             }<br>         } <br> 以上介绍了“C#多线程处理百度关键词排名查询的问题”的问题解答,希望对有需要的网友有所帮助。<br> 本文网址链接:http://www.codes51.com/itwd/1021299.html<br> <p class="clear"> </p> <div style="text-align: center;"> <ins class="adsbygoogle" style="display:inline-block;width:640px;height:60px" data-ad-client="ca-pub-5036073066499791" data-ad-slot="7818665603"></ins> </div> </keywordrankresult></url></span class=\"(g|c-showurl|op_wiseapp_showurl)\">

相关图片

相关文章