精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

張洋:網站統計中的數據收集原理及實現

開發 開發工具 前端
網站數據統計分析工具是網站站長和運營人員經常使用的一種工具,比較常用的有谷歌分析、百度統計和騰訊分析等等。所有這些統計分析工具的第一步都是網站訪問數據的收集。目前主流的數據收集方式基本都是基于javascript的。本文將簡要分析這種數據收集的原理,并一步一步實際搭建一個實際的數據收集系統。

網站數據統計分析工具是網站站長和運營人員經常使用的一種工具,比較常用的有谷歌分析、百度統計和騰訊分析等等。所有這些統計分析工具的第一步都是網站訪問數據的收集。目前主流的數據收集方式基本都是基于javascript的。本文將簡要分析這種數據收集的原理,并一步一步實際搭建一個實際的數據收集系統。

 

數據收集原理分析

簡單來說,網站統計分析工具需要收集到用戶瀏覽目標網站的行為(如打開某網頁、點擊某按鈕、將商品加入購物車等)及行為附加數據(如某下單行為產生的訂單金額等)。早期的網站統計往往只收集一種用戶行為:頁面的打開。而后用戶在頁面中的行為均無法收集。這種收集策略能滿足基本的流量分析、來源分析、內容分析及訪客屬性等常用分析視角,但是,隨著ajax技術的廣泛使用及電子商務網站對于電子商務目標的統計分析的需求越來越強烈,這種傳統的收集策略已經顯得力不能及。

后來,Google在其產品谷歌分析中創新性的引入了可定制的數據收集腳本,用戶通過谷歌分析定義好的可擴展接口,只需編寫少量的javascript代碼就可以實現自定義事件和自定義指標的跟蹤和分析。目前百度統計、搜狗分析等產品均照搬了谷歌分析的模式。

其實說起來兩種數據收集模式的基本原理和流程是一致的,只是后一種通過javascript收集到了更多的信息。下面看一下現在各種網站統計工具的數據收集基本原理。

流程概覽

首先通過一幅圖總體看一下數據收集的基本流程。

1
圖1. 網站統計數據收集基本流程

首先,用戶的行為會觸發瀏覽器對被統計頁面的一個http請求,這里姑且先認為行為就是打開網頁。當網頁被打開,頁面中的埋點javascript 片段會被執行,用過相關工具的朋友應該知道,一般網站統計工具都會要求用戶在網頁中加入一小段javascript代碼,這個代碼片段一般會動態創建一個 script標簽,并將src指向一個單獨的js文件,此時這個單獨的js文件(圖1中綠色節點)會被瀏覽器請求到并執行,這個js往往就是真正的數據收集腳本。數據收集完成后,js會請求一個后端的數據收集腳本(圖1中的backend),這個腳本一般是一個偽裝成圖片的動態腳本程序,可能由php、 python或其它服務端語言編寫,js會將收集到的數據通過http參數的方式傳遞給后端腳本,后端腳本解析參數并按固定格式記錄到訪問日志,同時可能會在http響應中給客戶端種植一些用于追蹤的cookie。

上面是一個數據收集的大概流程,下面以谷歌分析為例,對每一個階段進行一個相對詳細的分析。

埋點腳本執行階段

若要使用谷歌分析(以下簡稱GA),需要在頁面中插入一段它提供的javascript片段,這個片段往往被稱為埋點代碼。下面是我的博客中所放置的谷歌分析埋點代碼截圖:

2
圖2. 谷歌分析埋點代碼

其中_gaq是GA的的全局數組,用于放置各種配置,其中每一條配置的格式為:

  1. _gaq.push(['Action''param1''param2', ...]); 

Action指定配置動作,后面是相關的參數列表。GA給的默認埋點代碼會給出兩條預置配置,_setAccount用于設置網站標識ID,這個標識ID是在注冊GA時分配的。_trackPageview告訴GA跟蹤一次頁面訪問。更多配置請參考:https://developers.google.com/analytics/devguides/collection/gajs/。實際上,這個_gaq是被當做一個FIFO隊列來用的,配置代碼不必出現在埋點代碼之前,具體請參考上述鏈接的說明。

就本文來說,_gaq的機制不是重點,重點是后面匿名函數的代碼,這才是埋點代碼真正要做的。這段代碼的主要目的就是引入一個外部的js文件(ga.js),方式是通過document.createElement方法創建一個script并根據協議(http或https)將src指向對應的ga.js,最后將這個element插入頁面的dom樹上。

注意ga.async = true的意思是異步調用外部js文件,即不阻塞瀏覽器的解析,待外部js下載完成后異步執行。這個屬性是HTML5新引入的。

#p#

數據收集腳本執行階段

數據收集腳本(ga.js)被請求后會被執行,這個腳本一般要做如下幾件事:

1、通過瀏覽器內置javascript對象收集信息,如頁面title(通過document.title)、referrer(上一跳url,通過document.referrer)、用戶顯示器分辨率(通過windows.screen)、cookie信息(通過 document.cookie)等等一些信息。

2、解析_gaq收集配置信息。這里面可能會包括用戶自定義的事件跟蹤、業務數據(如電子商務網站的商品編號等)等。

3、將上面兩步收集的數據按預定義格式解析并拼接。

4、請求一個后端腳本,將信息放在http request參數中攜帶給后端腳本。

這里唯一的問題是步驟4,javascript請求后端腳本常用的方法是ajax,但是ajax是不能跨域請求的。這里ga.js在被統計網站的域內執行,而后端腳本在另外的域(GA的后端統計腳本是http://www.google-analytics.com/__utm.gif),ajax行不通。一種通用的方法是js腳本創建一個Image對象,將Image對象的src屬性指向后端腳本并攜帶參數,此時即實現了跨域請求后端。這也是后端腳本為什么通常偽裝成gif文件的原因。通過http抓包可以看到ga.js對__utm.gif的請求:

image
圖3. 后端腳本請求的http包

可以看到ga.js在請求__utm.gif時帶了很多信息,例如utmsr=1280×1024是屏幕分辨率,utmac=UA-35712773-1是_gaq中解析出的我的GA標識ID等等。

值得注意的是,__utm.gif未必只會在埋點代碼執行時被請求,如果用_trackEvent配置了事件跟蹤,則在事件發生時也會請求這個腳本。

由于ga.js經過了壓縮和混淆,可讀性很差,我們就不分析了,具體后面實現階段我會實現一個功能類似的腳本。

后端腳本執行階段

GA的__utm.gif是一個偽裝成gif的腳本。這種后端腳本一般要完成以下幾件事情:

1、解析http請求參數的到信息。

2、從服務器(WebServer)中獲取一些客戶端無法獲取的信息,如訪客ip等。

3、將信息按格式寫入log。

5、生成一副1×1的空gif圖片作為響應內容并將響應頭的Content-type設為image/gif。

5、在響應頭中通過Set-cookie設置一些需要的cookie信息。

之所以要設置cookie是因為如果要跟蹤唯一訪客,通常做法是如果在請求時發現客戶端沒有指定的跟蹤cookie,則根據規則生成一個全局唯一的 cookie并種植給用戶,否則Set-cookie中放置獲取到的跟蹤cookie以保持同一用戶cookie不變(見圖4)。

image
圖4. 通過cookie跟蹤唯一用戶的原理

這種做法雖然不是完美的(例如用戶清掉cookie或更換瀏覽器會被認為是兩個用戶),但是是目前被廣泛使用的手段。注意,如果沒有跨站跟蹤同一用戶的需求,可以通過js將cookie種植在被統計站點的域下(GA是這么做的),如果要全網統一定位,則通過后端腳本種植在服務端域下(我們待會的實現會這么做)。

#p#

系統的設計實現

根據上述原理,我自己搭建了一個訪問日志收集系統。總體來說,搭建這個系統要做如下的事:

image

圖5. 訪問數據收集系統工作分解

下面詳述每一步的實現。我將這個系統叫做MyAnalytics。

確定收集的信息

為了簡單起見,我不打算實現GA的完整數據收集模型,而是收集以下信息。

名稱 途徑 備注
訪問時間 web server Nginx $msec
IP web server Nginx $remote_addr
域名 javascript document.domain
URL javascript document.URL
頁面標題 javascript document.title
分辨率 javascript window.screen.height & width
顏色深度 javascript window.screen.colorDepth
Referrer javascript document.referrer
瀏覽客戶端 web server Nginx $http_user_agent
客戶端語言 javascript navigator.language
訪客標識 cookie  
網站標識 javascript 自定義對象

埋點代碼

埋點代碼我將借鑒GA的模式,但是目前不會將配置對象作為一個FIFO隊列用。一個埋點代碼的模板如下:

  1. <script type="text/javascript">  
  2. var _maq = _maq || [];  
  3. _maq.push(['_setAccount''網站標識']);  
  4.    
  5. (function() {  
  6.     var ma = document.createElement('script'); ma.type = 'text/javascript'; ma.async = true;  
  7.     ma.src = ('https:' == document.location.protocol ? 'https://analytics' : 'http://analytics') + '.codinglabs.org/ma.js';  
  8.     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ma, s);  
  9. })();  
  10. </script> 

這里我啟用了二級域名analytics.codinglabs.org,統計腳本的名稱為ma.js。當然這里有一點小問題,因為我并沒有https的服務器,所以如果一個https站點部署了代碼會有問題,不過這里我們先忽略吧。

前端統計腳本

我寫了一個不是很完善但能完成基本工作的統計腳本ma.js:

  1. (function () {  
  2.     var params = {};  
  3.     //Document對象數據  
  4.     if(document) {  
  5.         params.domain = document.domain || '';  
  6.         params.url = document.URL || '';  
  7.         params.title = document.title || '';  
  8.         params.referrer = document.referrer || '';  
  9.     }    
  10.     //Window對象數據  
  11.     if(window && window.screen) {  
  12.         params.sh = window.screen.height || 0;  
  13.         params.sw = window.screen.width || 0;  
  14.         params.cd = window.screen.colorDepth || 0;  
  15.     }    
  16.     //navigator對象數據  
  17.     if(navigator) {  
  18.         params.lang = navigator.language || '';  
  19.     }    
  20.     //解析_maq配置  
  21.     if(_maq) {  
  22.         for(var i in _maq) {  
  23.             switch(_maq[i][0]) {  
  24.                 case '_setAccount':  
  25.                     params.account = _maq[i][1];  
  26.                     break;  
  27.                 default:  
  28.                     break;  
  29.             }    
  30.         }    
  31.     }    
  32.     //拼接參數串  
  33.     var args = '';  
  34.     for(var i in params) {  
  35.         if(args != '') {  
  36.             args += '&';  
  37.         }    
  38.         args += i + '=' + encodeURIComponent(params[i]);  
  39.     }    
  40.    
  41.     //通過Image對象請求后端腳本  
  42.     var img = new Image(1, 1);  
  43.     img.src = 'http://analytics.codinglabs.org/1.gif?' + args;  
  44. })(); 

整個腳本放在匿名函數里,確保不會污染全局環境。功能在原理一節已經說明,不再贅述。其中1.gif是后端腳本。

日志格式

日志采用每行一條記錄的方式,采用不可見字符^A(ascii碼0x01,Linux下可通過ctrl + v ctrl + a輸入,下文均用“^A”表示不可見字符0x01),具體格式如下:

時間^AIP^A域名^AURL^A頁面標題^AReferrer^A分辨率高^A分辨率寬^A顏色深度^A語言^A客戶端信息^A用戶標識^A網站標識。

#p#

后端腳本

為了簡單和效率考慮,我打算直接使用nginx的access_log做日志收集,不過有個問題就是nginx配置本身的邏輯表達能力有限,所以我選用了OpenResty做這個事情。OpenResty是一個基于Nginx擴展出的高性能應用開發平臺,內部集成了諸多有用的模塊,其中的核心是通過ngx_lua模塊集成了 Lua,從而在nginx配置文件中可以通過Lua來表述業務。關于這個平臺我這里不做過多介紹,感興趣的同學可以參考其官方網站http://openresty.org/,或者這里有其作者章亦春(agentzh)做的一個非常有愛的介紹OpenResty的slide:http://agentzh.org/misc/slides/ngx-openresty-ecosystem/,關于ngx_lua可以參考:https://github.com/chaoslawful/lua-nginx-module

首先,需要在nginx的配置文件中定義日志格式:

  1. log_format tick "$msec^A$remote_addr^A$u_domain^A$u_url^A$u_title^A$u_referrer^A$u_sh^A$u_sw^A$u_cd^A$u_lang^A$http_user_agent^A$u_utrace^A$u_account"; 

注意這里以u_開頭的是我們待會會自己定義的變量,其它的是nginx內置變量。

然后是核心的兩個location:

  1. location /1.gif {  
  2.     #偽裝成gif文件  
  3.     default_type image/gif;     
  4.     #本身關閉access_log,通過subrequest記錄log  
  5.     access_log off;  
  6.    
  7.     access_by_lua "  
  8.         -- 用戶跟蹤cookie名為__utrace  
  9.         local uid = ngx.var.cookie___utrace         
  10.         if not uid then  
  11.             -- 如果沒有則生成一個跟蹤cookie,算法為md5(時間戳+IP+客戶端信息)  
  12.             uid = ngx.md5(ngx.now() .. ngx.var.remote_addr .. ngx.var.http_user_agent)  
  13.         end  
  14.         ngx.header['Set-Cookie'] = {'__utrace=' .. uid .. '; path=/'}  
  15.         if ngx.var.arg_domain then  
  16.             -- 通過subrequest到/i-log記錄日志,將參數和用戶跟蹤cookie帶過去  
  17.             ngx.location.capture('/i-log?' .. ngx.var.args .. '&utrace=' .. uid)  
  18.         end  
  19.     ";   
  20.    
  21.     #此請求不緩存  
  22.     add_header Expires "Fri, 01 Jan 1980 00:00:00 GMT";  
  23.     add_header Pragma "no-cache";  
  24.     add_header Cache-Control "no-cache, max-age=0, must-revalidate";  
  25.    
  26.     #返回一個1×1的空gif圖片  
  27.     empty_gif;  
  28. }    
  29.    
  30. location /i-log {  
  31.     #內部location,不允許外部直接訪問  
  32.     internal;  
  33.    
  34.     #設置變量,注意需要unescape  
  35.     set_unescape_uri $u_domain $arg_domain;  
  36.     set_unescape_uri $u_url $arg_url;  
  37.     set_unescape_uri $u_title $arg_title;  
  38.     set_unescape_uri $u_referrer $arg_referrer;  
  39.     set_unescape_uri $u_sh $arg_sh;  
  40.     set_unescape_uri $u_sw $arg_sw;  
  41.     set_unescape_uri $u_cd $arg_cd;  
  42.     set_unescape_uri $u_lang $arg_lang;  
  43.     set_unescape_uri $u_utrace $arg_utrace;  
  44.     set_unescape_uri $u_account $arg_account;  
  45.    
  46.     #打開日志  
  47.     log_subrequest on;  
  48.     #記錄日志到ma.log,實際應用中最好加buffer,格式為tick  
  49.     access_log /path/to/logs/directory/ma.log tick;  
  50.    
  51.     #輸出空字符串  
  52.     echo '';  

要完全解釋這段腳本的每一個細節有點超出本文的范圍,而且用到了諸多第三方ngxin模塊(全都包含在OpenResty中了),重點的地方我都用注釋標出來了,可以不用完全理解每一行的意義,只要大約知道這個配置完成了我們在原理一節提到的后端邏輯就可以了。

日志輪轉

真正的日志收集系統訪問日志會非常多,時間一長文件變得很大,而且日志放在一個文件不便于管理。所以通常要按時間段將日志切分,例如每天或每小時切分一個日志。我這里為了效果明顯,每一小時切分一個日志。我是通過crontab定時調用一個shell腳本實現的,shell腳本如下:

  1. _prefix="/path/to/nginx" 
  2. time=`date +%Y%m%d%H`  
  3.    
  4. mv ${_prefix}/logs/ma.log ${_prefix}/logs/ma/ma-${time}.log  
  5. kill -USR1 `cat ${_prefix}/logs/nginx.pid` 

這個腳本將ma.log移動到指定文件夾并重命名為ma-{yyyymmddhh}.log,然后向nginx發送USR1信號令其重新打開日志文件。

然后再/etc/crontab里加入一行:

  1. 59  *  *  *  * root /path/to/directory/rotatelog.sh 

在每個小時的59分啟動這個腳本進行日志輪轉操作。

#p#

測試

下面可以測試這個系統是否能正常運行了。我昨天就在我的博客中埋了相關的點,通過http抓包可以看到ma.js和1.gif已經被正確請求:

image
圖6. http包分析ma.js和1.gif的請求

同時可以看一下1.gif的請求參數:

image
圖7. 1.gif的請求參數

相關信息確實也放在了請求參數中。

然后我tail打開日志文件,然后刷新一下頁面,因為沒有設access log buffer, 我立即得到了一條新日志:

  1. 1351060731.360^A0.0.0.0^Awww.codinglabs.org^Ahttp://www.codinglabs.org/^ACodingLabs^A^A1024^A1280^A24^Azh-CN^AMozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4^A4d612be64366768d32e623d594e82678^AU-1-1 

注意實際上原日志中的^A是不可見的,這里我用可見的^A替換為方便閱讀,另外IP由于涉及隱私我替換為了0.0.0.0。

看一眼日志輪轉目錄,由于我之前已經埋了點,所以已經生成了很多輪轉文件:

image

圖8. 輪轉日志

關于分析

通過上面的分析和開發可以大致理解一個網站統計的日志收集系統是如何工作的。有了這些日志,就可以進行后續的分析了。本文只注重日志收集,所以不會寫太多關于分析的東西。

注意,原始日志最好盡量多的保留信息而不要做過多過濾和處理。例如上面的MyAnalytics保留了毫秒級時間戳而不是格式化后的時間,時間的格式化是后面的系統做的事而不是日志收集系統的責任。后面的系統根據原始日志可以分析出很多東西,例如通過IP庫可以定位訪問者的地域、user agent中可以得到訪問者的操作系統、瀏覽器等信息,再結合復雜的分析模型,就可以做流量、來源、訪客、地域、路徑等分析了。當然,一般不會直接對原始日志分析,而是會將其清洗格式化后轉存到其它地方,如MySQL或HBase中再做分析。

分析部分的工作有很多開源的基礎設施可以使用,例如實時分析可以使用Storm,而離線分析可以使用Hadoop。當然,在日志比較小的情況下,也可以通過shell命令做一些簡單的分析,例如,下面三條命令可以分別得出我的博客在今天上午8點到9點的訪問量(PV),訪客數(UV)和獨立IP數(IP):

  1. awk -F^A '{print $1}' ma-2012102409.log | wc -l  
  2. awk -F^A '{print $12}' ma-2012102409.log | uniq | wc -l  
  3. awk -F^A '{print $2}' ma-2012102409.log | uniq | wc -l 

其它好玩的東西朋友們可以慢慢挖掘。

原文鏈接:http://www.codinglabs.org/html/how-web-analytics-data-collection-system-work.html

責任編輯:林師授 來源: 張洋的博客
相關推薦

2014-07-29 09:50:24

數據收集社交網絡數據泄露

2012-11-26 11:01:18

算法基數估計編程

2022-03-17 08:55:43

本地線程變量共享全局變量

2025-05-27 01:00:00

2022-04-28 10:29:38

數據數據收集

2015-03-10 13:55:31

JavaScript預解析原理及實現

2017-02-06 19:26:15

iOSCFArray開源

2017-03-02 10:49:37

推薦算法原理實現

2012-08-27 09:52:48

Android沙箱模型

2020-11-09 11:23:08

數據泄露漏洞網絡攻擊

2015-12-02 14:10:56

HTTP網絡協議代理原理

2015-12-02 15:29:32

HTTP網絡協議代理原理

2021-06-10 08:29:15

Rollup工具前端

2023-12-18 09:39:13

PreactHooks狀態管理

2014-06-11 10:29:03

2022-11-30 18:38:50

數據血緣DataLeap

2009-07-30 15:50:49

ASP.NET中網站訪

2010-05-12 10:53:04

Symbian開發

2018-07-27 08:39:44

負載均衡算法實現

2011-04-26 11:33:16

數據中心網站流量
點贊
收藏

51CTO技術棧公眾號

日韩免费在线观看| 国产精品青草综合久久久久99| 成人97在线观看视频| 亚洲视频天天射| 日韩伦理在线| 国产精品嫩草99a| 国产福利久久精品| 中文字幕天堂在线| 欧美精品二区| 国产亚洲精品美女| 日本中文字幕精品| 国产日韩另类视频一区| 一区二区三区四区亚洲| 欧美精品亚洲| 可以免费看毛片的网站| 天堂久久久久va久久久久| 久久影院资源网| 性欧美精品中出| 一区中文字幕| 欧美日韩一区不卡| 18禁免费无码无遮挡不卡网站| 日本不卡三区| av在线播放成人| 成人性生交大片免费看小说 | 欧美极品美女视频| 99在线观看视频| 伊人免费在线观看| 蜜桃视频一区| 97超碰国产精品女人人人爽| 中国毛片直接看| 波多野结衣的一区二区三区| 亚洲国产免费av| 国产成人精品一区二区三区在线观看| 88xx成人永久免费观看| 亚洲 欧美综合在线网络| 中文字幕日韩一区二区三区不卡| 国产中文字幕在线观看| av一区二区三区四区| 操人视频欧美| jlzzjlzz亚洲女人18| 麻豆91精品视频| 国产精品久久久久久久久久新婚 | 黄色欧美成人| 久久伊人91精品综合网站| 亚洲一级片在线播放| 国产成人影院| 精品在线欧美视频| 日韩一级视频在线观看| 岛国成人av| 欧美精品一区二区三区高清aⅴ| 99精品999| 日韩免费在线电影| 欧美久久久久免费| 五月激情五月婷婷| 亚洲精品一区av| 欧美日韩精品电影| gogogo高清免费观看在线视频| 日韩中文影院| 精品视频在线视频| 亚洲欧美自偷自拍另类| 国产一区二区色噜噜| 91久久精品一区二区三区| 欧美极品欧美精品欧美图片| 久草在线资源站手机版| 五月婷婷激情综合| 伊人成色综合网| 蜜桃视频m3u8在线观看| 日韩欧美亚洲成人| 日韩一级片播放| 国产精品无码久久久久| 欧美日本视频在线| 亚洲天堂一区二区在线观看| 欧美日韩激情电影| 欧美日韩国产高清一区二区三区 | 成人美女视频在线观看| 国产一区免费观看| 久热av在线| 国产精品国产三级国产a | 国产女主播喷水高潮网红在线| 五月国产精品| 中文字幕精品视频| 99精品久久久久| 亚洲伦伦在线| 国产精品免费视频久久久| 国产美女免费视频| www.激情成人| 杨幂一区欧美专区| 日韩伦理电影网站| 一本到不卡免费一区二区| 欧美第一页浮力影院| 精品成人18| 精品视频在线导航| 亚洲综合图片一区| 亚洲久色影视| 国产欧美日韩丝袜精品一区| www香蕉视频| 久久精品亚洲麻豆av一区二区| 亚洲一卡二卡三卡| 蜜桃视频动漫在线播放| 91精品国产综合久久久久久漫画| 国产真实乱人偷精品| 日韩av密桃| 午夜欧美大片免费观看| 中文字幕av免费观看| 成人免费视频一区二区| 色女孩综合网| aaa在线播放视频| 在线不卡一区二区| 女尊高h男高潮呻吟| 欧美在线二区| 国产精品久久久久久久久久久久久 | 欧美性猛交99久久久久99按摩| 美女在线视频一区二区 | 亚洲国产一区二区三区在线| 少妇视频在线| 欧美日韩在线三级| 免费a在线观看播放| 综合精品久久| 国产精品自产拍在线观看| 污污视频在线观看网站| 亚洲精品日韩专区silk| 手机在线成人免费视频| 台湾亚洲精品一区二区tv| 欧美黑人又粗大| 国产精品一区二区av白丝下载| 久久久久国产精品免费免费搜索| 91动漫在线看| 中文字幕av一区二区三区四区| 在线日韩第一页| 一级片视频在线观看| 成人91在线观看| 黄色成人在线免费观看| av成人在线网站| 色妞欧美日韩在线| 午夜一级黄色片| 久久久久久久久久久久久久久99 | 欧美日韩伦理一区二区| 国产一区二区三区毛片| 毛片视频网站在线观看| 暴力调教一区二区三区| 欧美久久在线观看| 亚洲精选av| 欧美黑人一区二区三区| www.激情五月| 亚洲在线视频一区| 性生交大片免费看l| 欧美激情麻豆| 成人在线看片| 美女精品视频| 欧美精品一区二区三区在线播放| 久久精品国产av一区二区三区| 国产suv精品一区二区6| 国产精品国三级国产av| 视频一区视频二区欧美| 欧美激情在线观看| 好吊视频一区二区三区| 精品欧美国产一区二区三区| 国产精品久久AV无码| 亚洲免费在线| 日韩欧美精品一区二区| 成人国产激情在线| 视频在线观看一区二区| 99热这里只有精品1| 一区二区三区.www| 国产精品300页| 久久一区二区三区四区五区| 亚洲国产精品综合| 国产一区精品二区| 国模精品系列视频| 免费在线一级视频| 欧美亚洲尤物久久| 粉嫩av性色av蜜臀av网站| 成人一级视频在线观看| 亚洲自偷自拍熟女另类| 精品久久综合| 91情侣在线视频| 亚洲精品日产| 最近2019中文字幕mv免费看| 国产成人精品一区二区无码呦| 亚洲一本大道在线| 51妺嘿嘿午夜福利| 国内精品视频666| 国产综合av在线| 日韩精品网站| 国产精品一区在线观看| 国产亚洲一区二区手机在线观看 | 亚洲第一二三四五区| 四虎成人在线观看| 亚洲三级电影全部在线观看高清| 蜜臀av粉嫩av懂色av| 日韩av午夜在线观看| 无码人妻aⅴ一区二区三区日本| 国产精品午夜av| 国产精品美女免费| 久久香蕉av| 最近中文字幕mv在线一区二区三区四区| www.黄色一片| 欧美视频你懂的| 日韩成人免费观看| 亚洲欧洲精品天堂一级 | 久久91成人| 91精品综合久久| 成人自拍av| 久久久在线观看| 老司机午夜在线视频| 日韩国产精品一区| www国产在线| 欧美色男人天堂| 国产精品久久久久久99| 一区二区久久久| 国产一区二区三区视频播放| 久久一区二区三区国产精品| 国产成人强伦免费视频网站| 青草国产精品久久久久久| 亚洲精品久久久久久久蜜桃臀| 久久国产综合| 日韩福利一区二区三区| 超碰97久久| 亚洲淫片在线视频| 99久久久国产精品免费调教网站| 97视频在线观看免费高清完整版在线观看 | 欧美国产视频| 国产99久久久欧美黑人| 久久久精品蜜桃| 国产成a人亚洲精v品在线观看| 精品午夜久久| 欧美激情一区二区三区在线视频| 亚洲无线观看| 亚洲综合小说区| 欧美成人aaa| 日韩美女视频免费看| 精精国产xxxx视频在线播放| 欧美大秀在线观看| а√资源新版在线天堂| www.久久色.com| 日韩在线观看www| 亚洲欧美精品在线| 青青草免费在线| 日韩精品视频在线免费观看| 成人免费一级视频| 精品国产一区二区亚洲人成毛片| a级片在线免费看| 日韩一本二本av| 国产黄色免费大片| 日韩精品一区二区三区swag| 精品国产99久久久久久宅男i| 欧美精品日韩一区| 国产有码在线观看| 91精品久久久久久久91蜜桃| 国产一区二区三区四区视频 | 久久国产精品电影| 黄色网在线免费看| 另类视频在线观看| 丝袜中文在线| 97成人精品区在线播放| 超碰超碰人人人人精品| 日韩av电影国产| 日韩漫画puputoon| 成人精品一区二区三区电影免费| 日韩亚洲国产免费| 91在线免费视频| 成人自拍在线| 久久综合精品一区| 欧美日韩国产传媒| 久久久久久久久久久久久国产| 欧美涩涩视频| 丰满爆乳一区二区三区| 丝袜诱惑亚洲看片| www.久久久久久久久久久| 国产乱国产乱300精品| 国产chinese中国hdxxxx| 久久美女高清视频| 欧美色视频一区二区三区在线观看| 亚洲欧洲在线观看av| 久久av高潮av无码av喷吹| 午夜精品aaa| 国产成人麻豆免费观看| 91精品免费在线| 日本黄色大片视频| 在线电影av不卡网址| 亚洲七七久久综合桃花剧情介绍| 久久久免费精品视频| 日日av拍夜夜添久久免费| 91精品久久久久久久久久久久久| 伊人久久影院| 日本一区不卡| 亚洲无线视频| 免费看a级黄色片| 国产99一区视频免费| 日本黄色特级片| 亚洲色图.com| 亚洲天堂一区在线| 91精品国产一区二区三区香蕉| 欧美自拍偷拍一区二区| 中文字幕av一区| 91破解版在线观看| 国产欧美va欧美va香蕉在线| 国产成人av毛片| 亚洲一区二区三区免费观看| 亚洲激情婷婷| 亚洲欧美天堂在线| 久久欧美一区二区| 农村黄色一级片| 欧美色精品在线视频| 日韩一级免费视频| 久久在线免费视频| 亚洲一区二区三区四区| 国产一区二区久久久| 国产精品久久久久久久| 免费成人在线视频网站| 国模无码大尺度一区二区三区 | 成人欧美一区二区三区在线播放| 亚洲久久在线观看| 日韩欧美精品在线视频| 婷婷视频在线| 国产成人免费91av在线| 欧美理伦片在线播放| 国产成人生活片| 久久黄色级2电影| 久久久久久亚洲中文字幕无码| 亚洲一二三四在线观看| 国产免费福利视频| 中文字幕少妇一区二区三区| 在线成人av观看| 精品一区久久久久久| 国产综合精品| xxx中文字幕| 亚洲女女做受ⅹxx高潮| 亚洲图片视频小说| 在线播放日韩精品| 影音成人av| 婷婷四月色综合| 日产欧产美韩系列久久99| 国产交换配乱淫视频免费| 懂色av影视一区二区三区| 日本黄色大片视频| 97视频在线免费观看| 狠狠久久伊人| 分分操这里只有精品| 成人综合婷婷国产精品久久蜜臀 | 影视一区二区| 天天久久综合网| 亚洲日本护士毛茸茸| 国产三级视频在线播放| y97精品国产97久久久久久| 狂野欧美性猛交xxxx| 伊人久久大香线蕉精品| 激情综合五月天| 色老板免费视频| 欧美一级免费观看| 黄色在线看片| 精品九九九九| 久久裸体视频| 美女av免费看| 欧美高清视频一二三区| caoporn免费在线| 国产91精品入口17c| 一区二区三区国产在线| 97伦伦午夜电影理伦片| 欧洲中文字幕精品| 欧美96在线| 高清国产在线一区| 亚洲一区图片| 国产视频不卡在线| 欧美一区二区视频在线观看| 日本天码aⅴ片在线电影网站| 国产成人精品福利一区二区三区| 亚洲东热激情| 欧美人与性囗牲恔配| 777色狠狠一区二区三区| a毛片在线看免费观看| 国产精品一区二区欧美| 性欧美暴力猛交另类hd| 男女男精品视频网站| 日韩欧美亚洲国产精品字幕久久久| 高清电影在线免费观看| 欧美午夜精品久久久久久蜜| 免费在线观看精品| 欧美极品aaaaabbbbb| 日韩成人激情视频| 国产91精品在线| 国产一二三区在线播放| 国产午夜精品一区二区三区四区| 国产精品久久久久久久久久久久久久久久| 久久亚洲综合国产精品99麻豆精品福利| 99精品在免费线中文字幕网站一区| 国产亚洲天堂网| 亚洲天堂中文字幕| 日产精品久久久久久久性色| 国产啪精品视频| 国产一区白浆| 三级在线观看免费大全| 精品亚洲aⅴ在线观看| 国产va免费精品观看精品| 九色在线视频观看| 亚洲免费看黄网站| 免费观看成年在线视频网站| 91九色在线视频| 首页国产欧美久久| 久草视频在线资源|