数据采集与网站统计实现全过程
網(wǎng)站統(tǒng)計(jì)需要數(shù)據(jù)的支持,那么數(shù)據(jù)從哪里來(lái)?這里就需要網(wǎng)站記錄客戶(hù)所瀏覽過(guò)的痕跡,記錄用戶(hù)訪問(wèn)每個(gè)頁(yè)面的流向,就要給該頁(yè)面加百度統(tǒng)計(jì)和cnzz的統(tǒng)計(jì)代碼,將用戶(hù)的訪問(wèn)數(shù)據(jù)記錄下來(lái)
進(jìn)而生成統(tǒng)計(jì)數(shù)據(jù)。現(xiàn)在就來(lái)自己實(shí)現(xiàn)一個(gè)這樣的數(shù)據(jù)采集與統(tǒng)計(jì)功能,具體步驟與相關(guān)代碼如下
一、設(shè)計(jì)表結(jié)構(gòu)
先考慮數(shù)據(jù)的記錄方式與保存位置,用戶(hù)這些數(shù)據(jù)后期要用,因此考慮將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,根據(jù)需要?jiǎng)?chuàng)建了三個(gè)表,Visitor用于記錄來(lái)訪用戶(hù)的相關(guān)數(shù)據(jù),VisitorRecord用于記錄來(lái)訪用戶(hù)訪問(wèn)時(shí)間,著陸頁(yè)面與跳出頁(yè)面,表ViewRecord是訪問(wèn)記錄,用于記錄訪問(wèn)的基礎(chǔ)數(shù)據(jù)。表結(jié)構(gòu)如下:
二、插入數(shù)據(jù)
創(chuàng)建表好了,如何向其中插入數(shù)據(jù)?既然ViewRecord是記錄基礎(chǔ)數(shù)據(jù),毫無(wú)疑問(wèn)當(dāng)用戶(hù)每訪問(wèn)一次一個(gè)頁(yè)面,就要向該表中插入一條數(shù)據(jù);一個(gè)訪問(wèn)者就向Visitor表中插入一條數(shù)據(jù),現(xiàn)在問(wèn)題來(lái)了,我們?nèi)绾蝸?lái)判斷該用戶(hù)是否來(lái)過(guò)呢,這里我們定義一臺(tái)PC端為一個(gè)用戶(hù),如果表Vistor中已存在該用戶(hù)的數(shù)據(jù),只需更新表中訪問(wèn)次數(shù)visitingNum,而不需要再向Visitor表中添加數(shù)據(jù)。至于應(yīng)該如何判斷,這里采用的是用一插件fingerprint2.js來(lái)幫助識(shí)別是否為同一用戶(hù),這種文件類(lèi)似于指紋識(shí)別,插件請(qǐng)移步至下載頻道下載(下載地址:指紋識(shí)別插件 fingerprint2.js)。另外表VisitorRecord用來(lái)存儲(chǔ)用戶(hù)的來(lái)訪時(shí)間、跳出時(shí)間及訪問(wèn)時(shí)長(zhǎng)。
至于各個(gè)表插入數(shù)據(jù)的方法這里就不再贅述了,相信看到此文的讀者都不在話(huà)下,這里只闡述具體的調(diào)用與實(shí)現(xiàn),功能是放到一般處理程序中實(shí)現(xiàn)的,讀者可自由變通。費(fèi)話(huà)不多說(shuō),上代碼: Stat.ashx public class Stat : IHttpHandler {
public void ProcessRequest(HttpContext context) {string url = context.Request.PathInfo;string IP = Labbase.Common.Utils.GetIP();Labbase.BLL.TJ_LocalIP bllIP = new Labbase.BLL.TJ_LocalIP();Labbase.Model.TJ_Visitor mdTJVisitor = new Labbase.Model.TJ_Visitor();Labbase.BLL.TJ_Visitor bllTJVisitor = new Labbase.BLL.TJ_Visitor();Labbase.Model.TJ_VisitorRecord mdTJVisitorRecord = new Labbase.Model.TJ_VisitorRecord();Labbase.BLL.MVisitorRecord bllMVisitorRecord = new Labbase.BLL.MVisitorRecord();if (bllIP.Exists("LIP= '" + IP + "'"))return;if (isEngine(IP, context.Request.ServerVariables["HTTP_USER_AGENT"]))return;if (!string.IsNullOrEmpty(context.Request["InPage"])){if (context.Request.Cookies["lbGUID"] == null){HttpCookie cooklbGUID = new HttpCookie("lbGUID");cooklbGUID.Value = Guid.NewGuid().ToString();cooklbGUID.Expires = DateTime.MaxValue;context.Response.Cookies.Add(cooklbGUID);}else{Guid lbGUID;try{lbGUID = new Guid(context.Request.Cookies["lbGUID"].Value.ToString());}catch{return;}int lbGUIDCount = bllTJVisitor.Exists(new Guid(context.Request.Cookies["lbGUID"].Value)) == false ? 0 : 1;if (lbGUIDCount == 0){mdTJVisitor.visitingNum = 1;mdTJVisitor.VisitorID = lbGUID;mdTJVisitor.Bfingerprinting = context.Request["fingerprint"];mdTJVisitor.LastVisitingTime = DateTime.Now;mdTJVisitor.VIp = IP;mdTJVisitor.Loction = IPShowAddress(IP);//查詢(xún)IP庫(kù)bllTJVisitor.Add(mdTJVisitor);mdTJVisitorRecord.VRID = Guid.NewGuid();mdTJVisitorRecord.VisitorID = mdTJVisitor.VisitorID;mdTJVisitorRecord.InTime = DateTime.Now;mdTJVisitorRecord.outTime = DateTime.Now.AddSeconds(1);mdTJVisitorRecord.Entrance = context.Request.UrlReferrer.ToString();mdTJVisitorRecord.ExitPage = context.Request.UrlReferrer.ToString();bllMVisitorRecord.Add(mdTJVisitorRecord);}else{mdTJVisitor = bllTJVisitor.GetModel(lbGUID);if ((DateTime.Now - (DateTime)mdTJVisitor.LastVisitingTime).Minutes > 5){mdTJVisitorRecord.VRID = Guid.NewGuid();mdTJVisitorRecord.VisitorID = lbGUID;mdTJVisitorRecord.InTime = DateTime.Now;mdTJVisitorRecord.outTime = DateTime.Now.AddSeconds(1);mdTJVisitorRecord.Entrance = context.Request.UrlReferrer.ToString();mdTJVisitorRecord.ExitPage = context.Request.UrlReferrer.ToString();bllMVisitorRecord.Add(mdTJVisitorRecord);mdTJVisitor.LastVisitingTime = DateTime.Now;bllTJVisitor.Update(mdTJVisitor);}else{string vrid = bllMVisitorRecord.GetVRIDByGUID(lbGUID);if (vrid != ""){mdTJVisitor = bllTJVisitor.GetModel(lbGUID);mdTJVisitor.LastVisitingTime = DateTime.Now;bllTJVisitor.Update(mdTJVisitor);mdTJVisitorRecord.VRID = new Guid(vrid);}}}Labbase.Model.ViewRecord mdViewRecord = new Labbase.Model.ViewRecord();Labbase.BLL.MViewRecord bllMViewRecord = new Labbase.BLL.MViewRecord();mdViewRecord.VRID = mdTJVisitorRecord.VRID;mdViewRecord.ViewID = Guid.NewGuid();mdViewRecord.referenceUrl = System.Web.HttpUtility.UrlDecode(context.Request["referrer"]);if (Utils.IsNullOrEmpty(mdViewRecord.referenceUrl))mdViewRecord.referenceUrl = "";mdViewRecord.FullPagePath = System.Web.HttpUtility.UrlDecode(context.Request["InPage"]);mdViewRecord.ViewIP = IP;mdViewRecord.Localarea = IPShowAddress(IP);//查詢(xún)IP庫(kù)mdViewRecord.Vtitle = System.Web.HttpUtility.UrlDecode(context.Request["title"]);mdViewRecord.ViewTime = DateTime.Now;if (!Utils.IsNullOrEmpty(mdViewRecord.referenceUrl))mdViewRecord.SId = Enginer(new Uri(mdViewRecord.referenceUrl).DnsSafeHost);elsemdViewRecord.SId = 0;string AbsolutePath = context.Request.UrlReferrer.AbsolutePath.TrimStart(new char[] { '/' });if (AbsolutePath.Contains('-')){AbsolutePath = AbsolutePath.Substring(0, AbsolutePath.IndexOf('-'));}if (AbsolutePath.Contains('.')){AbsolutePath = AbsolutePath.Substring(0, AbsolutePath.IndexOf('.'));}int parID = 0;string[] pars;object objCompany;Labbase.BLL.supply bllsupply = new Labbase.BLL.supply();Labbase.BLL.product_category bllcategory = new Labbase.BLL.product_category();Labbase.Model.supplyInfo mdSupply = new Labbase.Model.supplyInfo();int companyID = 0;switch (AbsolutePath){case "IndustryNewsDetial":parID = int.Parse(context.Request.UrlReferrer.PathAndQuery.Split('-').Last().TrimEnd(".html".ToCharArray()));Labbase.BLL.News bllNews = new Labbase.BLL.News();objCompany = bllNews.GetCompanyID("NewsID=" + parID);if (objCompany != null && !string.IsNullOrEmpty(objCompany.ToString()) && objCompany.ToString() != "0"){mdViewRecord.Querypar1 = int.Parse(objCompany.ToString());}else{mdViewRecord.Querypar1 = 0;}mdViewRecord.channel = "技術(shù)資料";break;case "SupplyDetial"://供應(yīng)詳情parID = int.Parse(context.Request.UrlReferrer.PathAndQuery.Split('-').Last().TrimEnd(".html".ToCharArray()));string supplyID = parID.ToString();mdSupply = bllsupply.GetModel(Int32.Parse(supplyID));DataTable dtclass = bllcategory.GetProductClassInfo(" ClassXXID=" + mdSupply.ClassXXID);mdViewRecord.Querypar1 = mdSupply.CompanyID;companyID = int.Parse(mdSupply.CompanyID.ToString());if (dtclass.Rows.Count > 0){mdViewRecord.QueryPar2 = Int32.Parse(dtclass.Rows[0]["ClassID"].ToString());mdViewRecord.QueryPar3 = Int32.Parse(dtclass.Rows[0]["ClassXID"].ToString());}mdViewRecord.QueryPar4 = mdSupply.ClassXXID;mdViewRecord.channel = "供求信息";break;case "ProductLDetail"://產(chǎn)品詳情parID = int.Parse(context.Request.UrlReferrer.PathAndQuery.Split('-').Last().TrimEnd(".html".ToCharArray()));companyID = new Labbase.BLL.product().GetCompanyIDByProductID(parID);mdViewRecord.Querypar1 = companyID;mdViewRecord.channel = "產(chǎn)品信息";break;case "CompanyIndex"://公司庫(kù)首頁(yè)case "CompanyNewsList"://公司技術(shù)資料case "CompanyContact":case "CompanyInfo":parID = int.Parse(context.Request.UrlReferrer.PathAndQuery.Split('-').Last().TrimEnd(".html".ToCharArray()));mdViewRecord.Querypar1 = parID;companyID = parID;mdViewRecord.channel = "公司主頁(yè)";break;case "CompanyProduct"://公司供應(yīng)case "CompanyProdutDetail"://公司供應(yīng)詳情case "CompanyNews"://公司技術(shù)資料詳情pars = context.Request.UrlReferrer.PathAndQuery.TrimEnd(".html".ToCharArray()).Split('-');mdViewRecord.Querypar1 = int.Parse(pars[1]);companyID = int.Parse(pars[1]);mdViewRecord.channel = "公司主頁(yè)";break;case "NewsLDetails":case "PrimeList":mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "資訊";break;case "IndustryNewsList":mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "技術(shù)資料";break;case "SupplyList":case "ProClass":mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "供求信息";break;case "ProductBList":mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "產(chǎn)品信息";break;case "BrandsList":mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "品牌專(zhuān)區(qū)";break;case "CompanyList":mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "公司庫(kù)";break;case "Exhibition":case "Exhibition/Detail":mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "展會(huì)信息";break;case "ProductSearch":case "SupplySearch":case "NewsSearch":case "CompanySearch":case "BrandSearch":mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "搜索";break;case "purchase":case "AboutmUs":case "ContactmUs":default:mdViewRecord.Querypar1 = 0;mdViewRecord.channel = "其它";break;}if (!Utils.IsNullOrEmpty(mdViewRecord.referenceUrl)){//Engine_wrod EW = EngineWord(WebRequest.Create(mdViewRecord.referenceUrl));string keyws = GetKeyWord(mdViewRecord.referenceUrl);if (!string.IsNullOrEmpty(keyws)){Labbase.BLL.SearchWord bllSearchWord = new Labbase.BLL.SearchWord();Labbase.Model.SearchWord mdSearchWord = new Labbase.Model.SearchWord();object obj = bllSearchWord.GetSearchWordId("Word='" + keyws + "'");if (obj == null){mdSearchWord.SWID = Guid.NewGuid();mdSearchWord.LastDate = DateTime.Now;mdSearchWord.SumNum = 1;mdSearchWord.UserIP = IP;mdSearchWord.Word = keyws;mdSearchWord.CompanyID = companyID;bllSearchWord.Add(mdSearchWord);mdViewRecord.SWId = mdSearchWord.SWID;}else{mdViewRecord.SWId = new Guid(obj.ToString());mdSearchWord = bllSearchWord.GetModel(new Guid(obj.ToString()));mdSearchWord.SumNum = mdSearchWord.SumNum + 1;mdSearchWord.LastDate = DateTime.Now;mdSearchWord.CompanyID = companyID;bllSearchWord.Update(mdSearchWord);}}}bllMViewRecord.Add(mdViewRecord);}}if (!string.IsNullOrEmpty(context.Request["OutPage"])){Guid lbGUID;try{lbGUID = new Guid(context.Request.Cookies["lbGUID"].Value.ToString());}catch{return;}int lbGUIDCount = bllTJVisitor.Exists(new Guid(context.Request.Cookies["lbGUID"].Value)) == false ? 0 : 1;if (lbGUIDCount < 1) return;string vrid = bllMVisitorRecord.GetVRIDByGUID(lbGUID);if (vrid != ""){mdTJVisitorRecord = bllMVisitorRecord.GetModel(new Guid(vrid));mdTJVisitorRecord.outTime = Convert.ToDateTime(DateTime.Now);mdTJVisitorRecord.ExitPage = context.Request.UrlReferrer.ToString();bllMVisitorRecord.Update(mdTJVisitorRecord);}}context.Response.ContentType = "text/plain";context.Response.Write(""); } private class Engine_wrod {public bool isEngine { get; set; }public string keyWord { get; set; } }/// <summary> /// 獲取全部的搜索引擎 /// </summary> /// <param name="input"></param> /// <returns></returns> private int Enginer(string input) {Labbase.BLL.SearchEngine bll = new Labbase.BLL.SearchEngine();foreach (DataRow dr in bll.GetList("").Tables[0].Rows){if (input.Contains(dr["SDomin"].ToString())){return int.Parse(dr["SID"].ToString());}}return 0; }/// <summary> /// 判定是否是搜索引擎 /// </summary> /// <param name="IP"></param> /// <param name="useragent"></param> /// <returns></returns> private bool isEngine(string IP, string useragent) {Labbase.BLL.SerchEngineMark bllSerchEngineMark = new Labbase.BLL.SerchEngineMark();Labbase.BLL.SearchEngineIP bllSearchEngineIP = new Labbase.BLL.SearchEngineIP();if (string.IsNullOrEmpty(useragent)) return true;//如果沒(méi)有useragent 設(shè)定為搜索引擎,不再繼續(xù)統(tǒng)計(jì).foreach (DataRow dr in bllSerchEngineMark.GetList("").Tables[0].Rows){if (useragent.Contains(dr["SEMString"].ToString())){return true;}}return bllSearchEngineIP.Exists("SEIP='" + IP + "'"); }/// <summary> /// 獲取搜索關(guān)鍵詞 /// </summary> /// <param name="url">來(lái)源地址</param> /// <returns></returns> private string GetKeyWord(string url) {string keyword = "";string[] _uOsr = { "google", "yahoo", "baidu", "soso", "bing", "sogou", "so.com" }; //將幾個(gè)搜索引擎與對(duì)應(yīng)的搜索關(guān)系詞寫(xiě)入對(duì)應(yīng)的數(shù)組中string[] _uOkw = { "q", "q", "wd|word|kw|keyword", "w", "q", "query", "q" };for (int i = 0; i < _uOsr.Length; i++){if (url.Contains(_uOsr[i])) //如果URL中包含這幾個(gè)搜索引擎則進(jìn)入處理{if (_uOsr[i] == "baidu"){string[] temp = _uOkw[i].Split('|'); //來(lái)自百度的關(guān)系詞 有WD和WORD,分開(kāi)處理#region 現(xiàn)在的代碼keyword = GetQuerystring(temp[0], url); //當(dāng)以WD取不到的時(shí)候,則用WORD取詞if (string.IsNullOrEmpty(keyword)) //指定對(duì)應(yīng)的編碼來(lái)消除亂碼 {keyword = GetQuerystring(temp[1], url); //從URL中取得關(guān)鍵詞的方法}if (string.IsNullOrEmpty(keyword)){keyword = GetQuerystring(temp[2], url);}if (string.IsNullOrEmpty(keyword)){keyword = GetQuerystring(temp[3], url);}#endregion}else{keyword = GetQuerystring(_uOkw[i], url);}break;}}string ecode = GBorUTF(keyword, url); //獲得文字的編碼格式keyword = HttpUtility.UrlDecode(keyword, Encoding.GetEncoding(ecode));keyword = HttpUtility.UrlEncode(keyword, Encoding.GetEncoding("UTF-8"));keyword = HttpUtility.UrlDecode(keyword, Encoding.GetEncoding("UTF-8"));return keyword; }/// <summary> /// 獲取文字的編碼 /// </summary> /// <param name="input"></param> /// <returns></returns> private string GBorUTF(string input, string url) {string en_code = "UTF-8";if (url.Contains("baidu")){if (url.Contains("ie=")){if (url.Contains("ie=gb2312")){en_code = "GB2312";}}else{string R_TO_U = HttpUtility.UrlDecode(input, Encoding.GetEncoding("UTF-8"));string U_TO_R = HttpUtility.UrlEncode(R_TO_U, Encoding.GetEncoding("UTF-8"));if (input.ToLower() != U_TO_R.ToLower()){en_code = "GB2312";}else{en_code = "UTF-8";}}}else if (url.Contains("sogou")){if (url.Contains("ie=")){if (url.Contains("ie=gb2312")){en_code = "GB2312";}}else{string R_TO_U = HttpUtility.UrlDecode(input, Encoding.GetEncoding("UTF-8"));string U_TO_R = HttpUtility.UrlEncode(R_TO_U, Encoding.GetEncoding("UTF-8"));if (input.ToLower() != U_TO_R.Replace("(", "%28").Replace(")", "%29").ToLower()){en_code = "GB2312";}}}else if (url.Contains("so.com")){if (url.Contains("ie=")){if (url.Contains("ie=gb2312")){en_code = "GB2312";}}else{string R_TO_U = HttpUtility.UrlDecode(input, Encoding.GetEncoding("UTF-8"));string U_TO_R = HttpUtility.UrlEncode(R_TO_U, Encoding.GetEncoding("UTF-8"));if (input.ToLower() != U_TO_R.ToLower()){en_code = "GB2312";}}}return en_code;}/// <summary> /// 從URL地址中通過(guò)queryname提取關(guān)鍵詞 /// </summary> /// <param name="queryname">wd,word,q,query,w...</param> /// <param name="url">URL地址</param> /// <returns></returns> private string GetQuerystring(string queryname, string url) {string keyword = string.Empty;Dictionary<string, string> dic = new Dictionary<string, string>();string re = "[?&]([^=]+)(?:=([^&]*))?"; //通進(jìn)正則將URL中參數(shù)分拆 放入字典中MatchCollection mc = Regex.Matches(url, re);foreach (Match item in mc){if (item.Success){dic.Add(item.Groups[1].Value, item.Groups[2].Value);}}if (dic.ContainsKey(queryname)) //如果字典中有傳入的匹配關(guān)鍵詞的鍵,則取其值返回{keyword = dic[queryname];}return keyword;}/// <summary> /// 獲取鏈接的參數(shù) /// </summary> /// <param name="strQuery"></param> /// <param name="strSplit"></param> /// <returns></returns> protected string wordFromUrlQuery(string strQuery, string strSplit) {strQuery = strQuery.TrimStart('?');strSplit += "=";foreach (string str in strQuery.Split('&')){if (str.StartsWith(strSplit)){string[] qValue = str.Split('=');if (qValue.Length > 1)return qValue[1];}}return ""; }/// <summary> ///根據(jù)IP獲取地址 /// </summary> /// <param name="strChar"></param> /// <returns></returns> protected string IPShowAddress(string strChar) {string ip = strChar;IPScaner objScan = new IPScaner();objScan.DataPath = System.Web.HttpContext.Current.Server.MapPath(@"/js/QQWry.Dat");objScan.IP = ip;string addre = objScan.IPLocation();return addre; } public bool IsReusable {get{return false;} } 復(fù)制代碼} 三、數(shù)據(jù)采集 具體功能得以實(shí)現(xiàn)之后,這個(gè)時(shí)候我們需要一個(gè)js腳本來(lái)控制該一般處理程序Stat.aspx的運(yùn)行,具體腳本如下: statistics.js: $(function () {
var urlreferrer = escape(document.referrer);var locationurl = escape(document.location); var ffreashed = getCookie("freash"); if (ffreashed == document.location) {return; }if (getCookie("lbGUID") == null) {$.ajax({url: "/js/fingerprint2.js",dataType: "script",cache: true}).done(function (data, status, jqxhr) {var fp = new Fingerprint2();fp.get(function (result) {$.ajax({type: "POST",url: "/tools/Stat.ashx",data: { InPage: locationurl, referrer: urlreferrer, title: escape(document.title) },async: false,success: function () {$.ajax({type: "POST",url: "/tools/Stat.ashx",data: { InPage: locationurl, fingerprint: result, referrer: urlreferrer, title: escape(document.title) },async: false});},error: function (XMLHttpRequest, textStatus, errorThrown) {alert(XMLHttpRequest.status)}});});}); } else {$.ajax({type: "POST",url: "/tools/Stat.ashx",data: { InPage: locationurl, referrer: urlreferrer, title: escape(document.title) },async: false,error: function (XMLHttpRequest, textStatus, errorThrown) {alert(XMLHttpRequest.status)}}); } 復(fù)制代碼}); //給重新刷新設(shè)置一個(gè)cookie $(window).unload(function () { $.ajax({ type: "POST", url: "/tools/Stat.ashx", data: { OutPage: escape(document.location) }, async: false }); setCookie("freash", document.location); }); function setCookie(name, value) { var exp = new Date(); exp.setTime(exp.getTime() + 2.5 * 1000); document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString(); } function getCookie(name) { var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); if (arr = document.cookie.match(reg)) return unescape(arr[2]); else return null; } function delCookie(name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval = getCookie(name); if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); } 到了該步驟,基本的工作已經(jīng)完成了,剩下的工作就是直接將腳本引用到頁(yè)面中,用戶(hù)點(diǎn)擊相應(yīng)的頁(yè)面自然也就可以實(shí)現(xiàn)數(shù)據(jù)采集與數(shù)據(jù)統(tǒng)計(jì)了。為了避免重復(fù)動(dòng)作,最好將腳本引用到頁(yè)面共用的用戶(hù)控件中,下面是經(jīng)過(guò)規(guī)范化處理的引用示例:
<script type="text/javascript"> (function () { //網(wǎng)站內(nèi)部統(tǒng)計(jì) var oHead = document.getElementsByTagName('HEAD').item(0); var oScript = document.createElement("script"); oScript.type = "text/javascript"; oScript.async = true; oScript.src = "/js/statistics.js"; oHead.appendChild(oScript); })(); </script> 總的來(lái)說(shuō),數(shù)據(jù)采集無(wú)非就是記錄下用戶(hù)在本網(wǎng)站各頁(yè)面的具體瀏覽軌跡,從而用于對(duì)用戶(hù)的需求進(jìn)行分析,采集就是統(tǒng)計(jì)的數(shù)據(jù)來(lái)源
轉(zhuǎn)載于:https://juejin.im/post/5d07440d6fb9a07f0a2de0a9
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的数据采集与网站统计实现全过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Delphi 关键字详解
- 下一篇: 安装源码包(这里主要写了redis,其他