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

Linux下網頁抓取

運維 系統運維
最近一直在學習stevens的unix網絡編程,對于網絡通信有了一定的認識,所以也想練練手。聊天程序之前用winsock做過,這次不想做重復的。之前看到一哥們寫過windows下抓取貓撲的帖子,我覺得抓頁面也是一個不錯想法。

 最近一直在學習stevens的unix網絡編程,對于網絡通信有了一定的認識,所以也想練練手。聊天程序之前用winsock做過,這次不想做重復的。之前看到一哥們寫過windows下抓取貓撲的帖子,我覺得抓頁面也是一個不錯想法。我也喜歡逛貓撲,有時候也去追追里面寫的文章,貓撲帖子少了一個很重要的功能,就是只看樓主的帖子。貓撲水人很多,容易把樓主的帖子淹沒在大海里面。

        查看了一下貓撲帖子的網頁源代碼,帖子內容介于<divclass="box2 js-reply"data-rid="*">和</div>之間,只需要解析這段內容,就能得到自己想要的東西。不過里面東西比較多,比較雜,還是先找一個簡單頁面抓取試試。csdn博客相對來說就是個不錯的選擇,***沒廣告,內容不算很多,第二,代碼風格很好。抓CSDN的頁面無非獲得博主名,文章名字和URL等,如果想獲得更多的信息,可以把博主的排名,評論數抓取下來。

下面簡單分析一下CSDN博客源代碼。

博主標題:

 

  1. <div id="blog_title">  
  2.   
  3.             <h1>  
  4.   
  5.                 <a href="/lanyan822">編程小子的專欄</a></h1>  
  6.   
  7.             <h2>鍥而舍之,朽木不折;鍥而不舍,金石可鏤</h2>  
  8.   
  9.             <div class="clear">  
  10.   
  11.             </div>  
  12.   
  13.         </div>  

文章標題和URL:

 

 

  1. <span class="link_title"><a href="/lanyan822/article/details/7549916">  
  2.   
  3.       ubuntu11.10搭建git服務器  
  4.       </a>  

文章訪問次數,評論次數等:

 

 

  1. <div class="article_manage">  
  2.   
  3.     <span class="link_postdate">2012-05-14 15:09</span>  
  4.   
  5.     <span class="link_view" title="閱讀次數"><a href="/lanyan822/article/details/7549916" title="閱讀次數">閱讀</a>(21)</span>  
  6.   
  7.     <span class="link_comments" title="評論次數"><a href="/lanyan822/article/details/7549916#comments" title="評論次數">評論</a>(0)</span>  
  8. </div>  

博客統計信息:

 

 

  1. <ul id="blog_rank">  
  2.   
  3.            <li>訪問:<span>1218次</span></li>  
  4.   
  5.            <li>積分:<span>164分</span></li>  
  6.   
  7.            <li>排名:<span>千里之外</span></li>  
  8.   
  9.        </ul>  
  1. <ul id="blog_statistics">  
  2.   
  3.            <li>原創:<span>13篇</span></li>  
  4.   
  5.            <li>轉載:<span>2篇</span></li>  
  6.   
  7.            <li>譯文:<span>0篇</span></li>  
  8.   
  9.            <li>評論:<span>1條</span></li>  
  10.   
  11.        </ul>  

 

 從上面貼出的HTML可以看出,所需要的信息都在某一個id下,每個id是唯一的,這對解析是很有利的。我們只需要抓取到網頁,分析相應內容,得到想要的信息即可。

在確定CSDN博客是可以抓取后,就可以著手抓取。如何抓取?簡單來說,就是與CSDN博客服務器簡歷tcp連接,然后發送HTTP請求,得到響應。頁面抓取過程如下圖所示:

主要流程:

 

  1. 解析域名(csdn.blog.net),得到服務器IP地址
  2. 與服務器端建立TCP連接
  3. 發送HTTP請求
  4. 得到服務器端響應,響應內容里面含有請求頁面源代碼
  5. 解析網頁源代碼,得到所需要信息,如果需要抓取博主所有的文章,需要解析出每篇文章的URL
  6. 統計博主文章數,判斷是否有分頁,如果又分頁,則請求分頁內容,獲取分頁的文章URL
  7. 跳轉到***步,請求每篇文章
  8. 把文章保存到本地
  9. 根據需求看是否對文章進行處理  

 

知道流程后,就可以著手編碼。先來看看我目前作出來的效果圖。

 

這里并不只是把文章信息解析出來,也把每篇博客具體內容給存到本地了。存在以博主名命名的文件夾下,每篇文章存在以文章命名的html文件中。

 

具體實現:

一、解析域名

采用gethostbyname方法。函數聲明如下:

 

  1. #include<netdb.h>  
  2. struct hostent * gethostbyname(const char *hostname)  
執行成功,返回非空指針,失敗返回空指針,并設置h_errno,可以通過hstrerror方法查看h_errno對應的錯誤提示信息。

 

函數中用到的hostent結構體,如下所示:

 

  1. <pre name="code" class="cpp">struct hostent  
  2. {  
  3.   char *h_name;         /* 查詢主機的規范名字 */  
  4.   char **h_aliases;     /* 別名 */  
  5.   int h_addrtype;       /* 地址類型  */  
  6.   int h_length;         /* 地址個數  */  
  7.   char **h_addr_list;       /* 所有的地址 */  
  8. };  
 

二、獲得IP地址后,與CSDN博客服務器建立TCP連接。

 

解析域名和建立TCP鏈接,我都放在一個自定義函數buildconnect里面。每次需要建立連接,我只需要調用這個方法即可。代碼如下:

 

  1. /* 
  2. *功能:獲得CSDN博客IP地址,并與CSDN服務器建立TCP連接 
  3.     *參數:無 
  4. *返回值:非負描述字-成功,-1-出錯 
  5. */  
  6. int buildConnection() {  
  7.     int sockfd;  
  8.     static struct hostent *host = NULL;  
  9.     static struct sockaddr_in csdn_addr;  
  10.     if (host == NULL) {  
  11.         if ((host = gethostbyname(CSDN_BLOG_URL)) == NULL) {//獲取CSDN博客服務器IP地址  
  12.             fprintf(stderr, "gethostbyname error:%s\n", hstrerror(h_errno));  
  13.             exit(-1);  
  14.         }  
  15. #ifdef DEBUG  
  16.         printf("csdn ip:%s\n", inet_ntoa(*((struct in_addr *) host->h_addr_list[0])));  
  17. #endif  
  18.         bzero(&csdn_addr, sizeof (csdn_addr));  
  19.         csdn_addr.sin_family = AF_INET;  
  20.         csdn_addr.sin_port = htons(CSDN_BLOG_PORT);  
  21.         csdn_addr.sin_addr = *((struct in_addr *) host->h_addr_list[0]);  
  22.     }  
  23.     sockfd = socket(AF_INET, SOCK_STREAM, 0);  
  24.     if (sockfd == -1) {  
  25.         fprintf(stderr, "socked error:%s\n", strerror(errno));  
  26.         exit(-1);  
  27.     }  
  28.     if (connect(sockfd, (struct sockaddr *) &csdn_addr, sizeof (csdn_addr)) == -1) {  
  29.         fprintf(stderr, "connect error:%s", strerror(errno));  
  30.         exit(-1);  
  31.     }  
  32.     return sockfd;  
  33. }  
不需要每一次都去解析域名,所以把域名存在一個static變量里面。

三、發送HTTP請求

 

HTTP請求格式如下所示:

 

  1. "GET /lanyan822 HTTP/1.1\r\n  
  2. Accept:*/*\r\n  
  3. Accept-Language:zh-cn\r\n  
  4. User-Agent: Mozilla/4.0 (compatible;MSIE 5.01;Windows NT 5.0)\r\n  
  5. Host: blog.csdn.net:80\r\n  
  6. Connection: Close\r\n  
  7. \r\n  
說明:GET:表明是一個GET請求,還有POST請求(你可以模擬登陸,發送用戶名和密碼到服務端。不過現在CSDN登陸需要一個隨機碼驗證。這個不好辦)/lanyan822表示請求的頁面,HTTP1.1表示使用的版本。\r\n表示結束。
Accept:表示瀏覽器接受的MIME類型
Accept-Language:表示瀏覽器接受的語言類型
User-Agent:指瀏覽器的名字。呵呵,因為是模擬瀏覽器發請求,所以這里是假的
Host:服務器的域名和端口
Connection:用來告訴服務器是否可以維持固定的HTTP連接。HTTP/1.1使用Keep-Alive為默認值,這樣,當瀏覽器需要多個文件時(比如一個HTML文件和相關的圖形文件),不需要每次都建立連接。這里我每次請求頁面后,我都選擇關閉。
這里需要注意的是:HTTP請求格式,千萬不能在里面多寫空格什么的。我之前一直請求頁面失敗就是因為里面多了空格。***以\r\n結束。
  1. /* 
  2. *功能:發送HTTP請求,HTTP請求格式一定要正確,且不能有多余的空格. 
  3. *參數:sockfd:套接字,requestParam:http請求路徑 
  4. *返回值:寫入套接口的字節數-成功,-1:失敗 
  5. */  
  6. int sendRequest(int sockfd, const char *requestParam) {  
  7.     char request[BUFFERLEN];  
  8.     int ret;  
  9.     bzero(request, sizeof (request));  
  10.     sprintf(request, "GET %s HTTP/1.1\r\n Accept:*/*\r\n Accept-Language:zh-cn\r\n"  
  11.             "User-Agent: Mozilla/4.0 (compatible;MSIE 5.01;Windows NT 5.0)\r\n"  
  12.             "Host: %s\r\n"  
  13.             "Connection: Close\r\n"  
  14.             "\r\n", requestParam, CSDN_BLOG_URL);  
  15. #ifdef DEBUG  
  16.     printf("請求HTTP格式:%s\n", request);  
  17. #endif  
  18.     ret = write(sockfd, request, sizeof (request));  
  19. #ifdef DEBUG  
  20.     printf("send %d data to server\n", ret);  
  21. #endif  
  22.     return ret;  
  23. }  

四、接受服務端響應,并存儲請求頁面

 

HTTP響應包括響應頭和所請求頁面的源代碼。

HTTP響應頭如下所示:

 

  1. HTTP/1.1 200 OK  
  2. Server: nginx/0.7.68  
  3. Date: Wed, 16 May 2012 06:28:28 GMT  
  4. Content-Type: text/html; charset=utf-8  
  5. Connection: close  
  6. Vary: Accept-Encoding  
  7. X-Powered-By: ASP.NET  
  8. Set-Cookie: uuid=344c2ad0-b060-448b-b75f-2c9dd308e5a5; expires=Thu, 17-May-2012 06:24:49 GMT; path=/  
  9. Set-Cookie: avh=yKfd8EgMOqw1YuvAzcgrbQ%3d%3d; expires=Wed, 16-May-2012 06:29:49 GMT; path=/  
  10. Cache-Control: private  
  11. Content-Length: 18202  
響應頭部也是以\r\n結束。所以可以通過\r\n\r\n來判斷響應頭部的結束位置。

 

實現源碼:

 

  1. /* 
  2. *功能:將服務端返回的html內容存入filePath中.這里使用了select函數. 
  3. *參數:sockfd:套接字,filePath:文件存儲路徑 
  4. *返回值:讀入套接字字節數-成功,-1-失敗,-2請求頁面返回狀態值非200 
  5. */  
  6. int saveRequestHtml(int sockfd, const char *filePath) {  
  7.     int headerTag, ret, fileFd = -1,contentLen,count=0;  
  8.     char receiveBuf[BUFFERLEN];  
  9.     fd_set rset;  
  10.     struct timeval timeout;  
  11.     memset(&timeout, 0, sizeof (timeout));  
  12.     timeout.tv_sec = 60;  
  13.     timeout.tv_usec = 0;  
  14.     char *first, *last,*ok_loc,*pContentLenStart,*pContentLenEnd;  
  15.     while (TRUE) {  
  16.         FD_SET(sockfd, &rset);  
  17.         ret = select(sockfd + 1, &rset, NULL, NULL, &timeout);  
  18.         if (ret == 0) {  
  19.             fprintf(stderr, "select time out:%s\n", strerror(errno));  
  20.             return ret;  
  21.         } else  
  22.             if (ret == -1) {  
  23.             fprintf(stderr, "select error :%s\n", strerror(errno));  
  24.             return ret;  
  25.         }  
  26.         headerTag = 0;  
  27.         if (FD_ISSET(sockfd, &rset)) {  
  28.   
  29.   
  30.             while (ret = read(sockfd, receiveBuf, BUFFERLEN - 1)) {  
  31.                 if (headerTag == 0) {  
  32.                     if (access(filePath, F_OK) == 0) {  
  33.                         if (remove(filePath) == -1)  
  34.                             fprintf(stderr, "remove error:%s\n", strerror(errno));  
  35.                     } else {  
  36. #ifdef DEBUG  
  37.                         printf("%s not exist\n", filePath);  
  38. #endif  
  39.                     }                  
  40.                     receiveBuf[ret] = '\0';  
  41.                     first = strstr(receiveBuf, "\r\n\r\n");//服務端返回消息頭部和網頁html內容.消息頭部也是以\r\n\r\n結尾.  
  42.                     if (first != 0) {          
  43.                         last = first + strlen("\r\n\r\n");  
  44.                         ok_loc=strstr(receiveBuf,"OK");//如果請求成功,狀態碼是200,并且有OK  
  45.                         if(ok_loc!=0)  
  46.                         {  
  47. #ifdef DEBUG  
  48.                             printf("頁面請求成功\n");  
  49. #endif  
  50.                             fileFd = open(filePath, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);  
  51.                             if (fileFd == -1) {  
  52.                                 fprintf(stderr, "open error:%s\n", strerror(errno));  
  53.                                 return -1;  
  54.                             }  
  55.                             pContentLenStart=strstr(receiveBuf,CONTENT_LENGTH);//這里是為了獲取HTTP響應頭content-length大小。  
  56.                             if(pContentLenStart!=0)  
  57.                             {  
  58.                                 pContentLenEnd=strstr(pContentLenStart+strlen(CONTENT_LENGTH),"\r\n");  
  59.                                 if(pContentLenEnd!=0)  
  60.                                 {  
  61.                                     contentLen=myatoi(pContentLenStart,pContentLenEnd);  
  62. #ifdef DEBUG  
  63.                                     printf("content-length:%d\n",contentLen);  
  64. #endif  
  65.                                     count+= write(fileFd, last, ret - (last - receiveBuf));  
  66.                                     headerTag = 1;  
  67.                                 }else  
  68.                                     return -1;  
  69.                             }else  
  70.                             {  
  71.                                 return -1;  
  72.                             }  
  73.                         }else  
  74.                         {  
  75.                             return -2;//頁面請求失敗。  
  76.                         }  
  77.                          
  78.                     }  
  79. #ifdef DEBUG  
  80.                     printf("%s\n", receiveBuf);  
  81. #endif  
  82.                 } else {  
  83.                    count+= write(fileFd, receiveBuf, ret);  
  84.                 }  
  85.             }  
  86.             close(fileFd);  
  87.         }  
  88.         break;  
  89.     }  
  90.     if(count!=contentLen)  
  91.     {  
  92.         printf("接受長度與HTTP響應頭長度不一致\n");  
  93.         return -1;  
  94.     }  
  95.     return count;  
  96. }  

五、解析網頁源代碼,得到所需要信息

我主要解析了博客的文章名,文章URL,訪問次數,排名,積分,原創文章數,轉載文章數,翻譯文章數,評論數。
源代碼解析是按照所需要的信息在源代碼中出現的順序依次解析,先出現文章名,接著是文章的評論,發表日期等信息,接著解析博主的積分,等級等,***解析博主發表的文章數。
解析用的最多的是strstr函數。
  1. #include<string.h>  
  2. char *strstr (char *haystack, const char *needle);  
函數功能:查找needle在haystack中***次出現的地址,查找成功,返回***次出現的地址,查找失敗返回0.類似于c++ string的find_first_of函數。
 
信息解析出來,需要存儲下來。主要是存在自定義的數據結構里面。每一頁(最多50篇文章)存儲在struct Articles結構體里面,文章信息則存入struct ArticleInfo里面。頁面存儲結構如下圖所示:

自定義的結構體:
 

 

  1. struct BloggerInfo  
  2. {  
  3.     int visits;//訪問次數  
  4.     int integral;//積分  
  5.     int ranking;//排名  
  6.     int artical_original;//原創文章數  
  7.     int artical_reproduce;//轉載文章數  
  8.     int artical_translation;//翻譯文章數  
  9.     int comments;//評論  
  10. };  
  11.   
  12. struct ArticleInfo  
  13. {  
  14.     char articleName[SMALLLEN];//文章標題  
  15.     char URL[SMALLLEN];//URL  
  16.     char createDate[25];//創建時間  
  17.     int visits;//訪問時間  
  18.     int comments;//評論次數  
  19.     struct ArticleInfo *next;//下一篇文章地址  
  20. };  
  21.   
  22. struct Articles  
  23. {  
  24.     int page;//頁數  
  25.     struct Articles * pageNext;//下一頁所在地址  
  26.     struct ArticleInfo *firstArticle;//該頁***篇文章地址  
  27.     struct ArticleInfo *currentArticle;//插入文章時使用,表示插入時的***一篇文章  
  28. };  

【編輯推薦】

  1. Chkdsk大躍進:Win8磁盤檢測時間大大縮短
  2. Linux下使用mke2fsk格式化分區的方法
  3. Ubuntu 11.10 利用終端環境備份還原
責任編輯:趙寧寧
相關推薦

2013-11-13 14:00:31

網頁設計設計

2021-11-24 17:22:06

網絡抓取網絡爬蟲數據收集

2023-03-09 15:55:17

JavaScriptURLCSS

2009-07-31 10:34:41

ASP.NET抓取網頁

2010-03-03 15:39:50

Python抓取網頁內

2009-12-02 15:50:41

PHP抓取網頁內容

2025-04-03 02:35:00

GoogleGemini工具

2020-12-04 06:39:25

爬蟲網頁

2010-03-04 11:22:59

Python抓取網頁圖

2009-09-07 14:00:57

C#抓取網頁

2010-07-16 11:16:40

Perl抓取網頁

2017-05-16 13:55:57

2017-04-29 10:37:23

2019-01-31 09:02:56

網頁抓取設計模式數據

2020-11-11 10:58:59

Scrapy

2022-08-12 08:00:00

編碼語言開發工具

2010-01-18 14:41:33

VB.NET抓取網頁

2024-05-23 08:15:03

.NET網頁數據

2009-04-28 10:03:35

PHPcURL抓取網頁

2019-11-19 15:43:07

人工智能軟件技術
點贊
收藏

51CTO技術棧公眾號

99久久99久久精品国产片果冰| 国产一级久久久久毛片精品| 日韩av中文| 激情综合色丁香一区二区| 久久电影一区二区| 日本一级大毛片a一| 亚洲黄色中文字幕| 综合亚洲深深色噜噜狠狠网站| 久久久久久国产免费| 波多野结衣加勒比| 国产精品videossex撒尿| 亚洲色图视频网| 欧美久久在线| 亚洲第九十九页| 奇米色一区二区| 久久久久国产精品免费| 永久免费av无码网站性色av| julia中文字幕一区二区99在线| 中文字幕一区二区三中文字幕| 欧美与黑人午夜性猛交久久久| 欧美视频亚洲图片| 韩国成人漫画| 亚洲国产精品一区二区www在线 | 亚洲欧美视频一区二区三区| 国产精品日韩av| 国产高潮国产高潮久久久91| 亚洲精品动态| 中文字幕av第一页| www免费在线观看| 日韩和的一区二区| 国产69精品一区二区亚洲孕妇| 激情高潮到大叫狂喷水| 黄色av电影在线播放| 欧美精品亚洲精品日韩精品| a'aaa级片在线观看| 成人高清在线视频| 91久久精品美女| 波多野结衣视频免费观看| 红桃视频国产精品| 久久久精品一区二区三区| 国产美女免费网站| 西野翔中文久久精品国产| 欧美电视剧在线看免费| 色噜噜狠狠永久免费| 日韩成人动漫| 日本大香伊一区二区三区| heyzo亚洲| 绿色成人影院| 黄色精品在线看| 日韩网站在线免费观看| 青春草视频在线| 亚洲一区精品在线| 成人精品视频在线播放| 免费电影网站在线视频观看福利| 国产激情视频一区二区三区欧美| 欧美日本亚洲视频| 国产美女久久久久久| 久久一本综合| 久久精品国产精品| 91日韩中文字幕| 欧美96在线丨欧| 久久久久久久国产精品视频| 日本熟妇一区二区| 国产深夜精品| 国产成人精品久久二区二区| www.久久久久久久| 美女视频免费一区| 成人在线国产精品| 亚洲成a人片在线| av动漫一区二区| 日本在线视频不卡| 久久久久久久久免费视频| 亚洲激情综合网| 男人添女荫道口女人有什么感觉| 成人在线免费观看| 国产欧美视频一区二区三区| 亚洲在线播放电影| 日本孕妇大胆孕交无码| 午夜精品成人在线| 激情婷婷综合网| 亚洲在线资源| 亚洲精品国产精品国产自| 老牛影视av老牛影视av| 久久中文字幕av| 欧美劲爆第一页| 国产精品熟女视频| 国产精品亚洲第一区在线暖暖韩国 | 亚洲欧洲在线看| 91免费高清视频| 国产精品人人爽人人爽| 成人一区福利| 欧美私模裸体表演在线观看| 做a视频在线观看| 成功精品影院| 亚洲网站在线看| 黄视频网站免费看| 一本色道久久综合亚洲精品不| 亚洲嫩模很污视频| 国产又粗又长又黄的视频| 亚洲网站啪啪| 国产精品天天狠天天看| 国产乱色精品成人免费视频| 成人精品一区二区三区中文字幕| 91精品国产91久久久久青草| 天天av天天翘| 综合久久久久久| 黄色一级大片在线观看| 亚洲成人偷拍| 日韩在线观看视频免费| 日本在线视频中文字幕| 久久99这里只有精品| 久久精品中文字幕一区二区三区 | 久久精品国产一区二区三| 91在线视频一区| 国内在线精品| 午夜久久久久久久久久一区二区| av一区二区三区免费观看| 欧美日韩免费看片| 亚洲国产精品久久久久秋霞不卡| 国产 xxxx| 欧美 日韩 国产 一区| 国产精品久久久久久久天堂 | 日韩亚洲欧美成人一区| 中文字幕第4页| 日韩视频三区| 国产传媒欧美日韩| 五月婷婷视频在线观看| 精品视频在线看| 国产又爽又黄无码无遮挡在线观看| 亚洲盗摄视频| 久久久久久久91| 性一交一乱一伧老太| 中文字幕一区二区日韩精品绯色| 超碰在线免费观看97| 欧美黄色网页| 国产丝袜一区二区| 日韩精品视频免费看| 岛国精品在线播放| 少妇一晚三次一区二区三区| 亚洲免费看片| 久久久999成人| 一本色道久久综合熟妇| 国产精品无人区| www.色就是色| 成人a'v在线播放| 国产精品久久久一区| yw视频在线观看| 欧美三级视频在线观看| 国产午夜福利一区| 美国欧美日韩国产在线播放| 夜夜爽www精品| 国产精品99久久免费| 欧美成人中文字幕| 午夜精品久久久久久久99老熟妇| 久久久久9999亚洲精品| 日韩av新片网| 校园春色另类视频| 国产精品成人一区二区| av中文字幕在线| 欧美丰满嫩嫩电影| 久久久久国产精品夜夜夜夜夜| 久久xxxx精品视频| 日本一区二区三区视频在线观看| 成人午夜在线影视| 欧美一级午夜免费电影| 麻豆亚洲av熟女国产一区二| 成人精品高清在线| 成人av一级片| 色综合蜜月久久综合网| 51国产成人精品午夜福中文下载| 国产区视频在线| 欧美高清你懂得| 麻豆视频在线观看| 久久毛片高清国产| 色婷婷.com| 黄色欧美日韩| 欧美一区二区三区四区夜夜大片| av毛片在线看| 91久久免费观看| 欧美老女人bb| 欧美深夜福利视频| 日韩中文字幕在线一区| 久久久久久久色| 日本福利片高清在线观看| 亚洲制服欧美中文字幕中文字幕| 草草久久久无码国产专区| 妖精一区二区三区精品视频| 国产精品久久久久久久久久| caoporn97在线视频| 日韩经典第一页| 亚洲一区二区色| 亚洲国产精品天堂| 四虎地址8848| 99精品一区二区| 欧美第一页浮力影院| 亚洲国产专区校园欧美| 欧美一区二区综合| 中文字幕一区日韩精品| 国产精品99久久久久久白浆小说| 日本五码在线| 欧美一区二区日韩| 天干夜夜爽爽日日日日| 亚洲一二三四在线观看| 男人的天堂av网| 成人aa视频在线观看| 牛夜精品久久久久久久| 136国产福利精品导航网址| 亚洲一区二区三区色| 婷婷精品在线| 国产富婆一区二区三区| 男人亚洲天堂| 国产成人涩涩涩视频在线观看| 户外极限露出调教在线视频| 日韩一区二区在线观看视频播放| 中日韩一级黄色片| 91色.com| 美女被爆操网站| 久久精品二区亚洲w码| 国产一区亚洲二区三区| 亚洲激情社区| 男人草女人视频| 国产精品毛片久久| 亚洲巨乳在线观看| 精品久久久久久久久久久下田| 国产主播欧美精品| 亚洲午夜天堂| 2019亚洲男人天堂| 2001个疯子在线观看| 久久香蕉国产线看观看av| www.国产精品.com| 亚洲小视频在线观看| 日本成人一区| 日韩精品免费综合视频在线播放| 一级片免费在线播放| 婷婷综合久久一区二区三区| 青青草原在线免费观看视频| 亚洲天堂成人在线观看| 国产又色又爽又高潮免费| 国产欧美精品一区| 实拍女处破www免费看| 97精品久久久午夜一区二区三区| 亚洲黄色a v| 日韩中文字幕麻豆| 国产视频在线视频| 久久裸体视频| 人妻无码视频一区二区三区| 翔田千里一区二区| 成人观看免费完整观看| 久久福利影视| 少妇人妻互换不带套| 日韩av在线播放中文字幕| 另类小说第一页| 久久成人精品无人区| 网站在线你懂的| 国产福利一区在线| 国产精品果冻传媒| 91尤物视频在线观看| 国产交换配乱淫视频免费| 久久精品亚洲乱码伦伦中文| 少妇av片在线观看| 成人免费一区二区三区在线观看| 亚洲精品乱码久久| av午夜一区麻豆| 免费福利视频网站| 亚洲人成在线观看一区二区| 久操视频免费在线观看| 亚洲成人av电影在线| 国产无套丰满白嫩对白| 欧美性感一类影片在线播放| 一级片在线观看视频| 欧美一区二区视频观看视频| 欧美一区二区三区激情| 亚洲美女免费精品视频在线观看| 丰满人妻一区二区三区四区53 | 久久免费激情视频| 在线视频国内自拍亚洲视频| 日韩久久久久久久久久| 91麻豆精品国产91久久久久| 午夜精品在线播放| 亚洲剧情一区二区| 激情在线小视频| 97色在线观看| 国产福利91精品一区二区| 99www免费人成精品| 伊人久久大香线蕉综合网站 | 久久国产成人午夜av影院宅| 大桥未久一区二区三区| 亚洲在线黄色| theporn国产精品| 97超碰欧美中文字幕| 国产小视频你懂的| 亚洲成在人线在线播放| a片在线免费观看| 欧美精品一区二区不卡 | www.视频一区| 久久久久亚洲AV成人无在| 亚洲国产欧美在线| 真实新婚偷拍xxxxx| 亚洲精品在线电影| 一级毛片视频在线| 97在线观看免费| 国产精品777777在线播放| 欧美日韩亚洲免费| 很黄很黄激情成人| 国产精品嫩草影院8vv8| 2020国产成人综合网| 欧美日韩亚洲国产另类| 精品视频全国免费看| 五月婷婷伊人网| 欧美另类在线观看| www.一区| 欧洲亚洲一区二区三区四区五区| 精品国产欧美日韩| 妺妺窝人体色777777| 精品一二三四区| 欧美成人国产精品一区二区| 亚洲成在人线免费| www.av在线.com| 久久天天躁狠狠躁夜夜爽蜜月 | 亚洲精品大片www| 伊人久久一区二区| 国产亚洲精品美女久久久| 国产无遮挡裸体视频在线观看| 欧美亚洲成人精品| 麻豆精品在线| 婷婷视频在线播放| 麻豆传媒一区二区三区| 玖玖爱在线观看| 狠狠久久五月精品中文字幕| 亚洲爱爱综合网| 久久久久久久国产| 综合久久成人| 成年在线观看视频| 国产乱人伦偷精品视频不卡| 亚洲精品一区二区三区影院忠贞| 最新国产精品久久精品| 中文字幕乱码人妻无码久久| 亚洲日韩第一页| 网友自拍亚洲| 日韩精品欧美专区| 日韩精品一二三| 成人黄色a级片| 欧美日韩在线播放三区| 视频一区二区三区不卡| 国产精品视频地址| 精品一二三区| 久久国产这里只有精品| 日韩一区中文字幕| 99热精品在线播放| 九九热这里只有在线精品视| 美女日韩一区| 国产毛片久久久久久国产毛片| 日韩精品成人一区二区在线| 亚洲v国产v欧美v久久久久久| 亚洲乱码中文字幕| 亚洲经典一区二区三区| 久久免费视频在线观看| 欧美变态网站| 免费在线观看的av网站| 国产午夜三级一区二区三| 中文字幕在线观看视频一区| 久久精品免费电影| 亚洲一级大片| 国产肥臀一区二区福利视频| 久久久国产精华| 国产精品久久久久精| 色综合老司机第九色激情| 国产区精品视频在线观看豆花| 咪咪色在线视频| 成人精品免费看| 婷婷激情五月综合| 久久久精品国产网站| 国产美女撒尿一区二区| 国产日产欧美视频| 国产精品欧美精品| 亚洲精品久久久久久久久久| 91福利视频在线观看| 日韩精品不卡一区二区| 黄页网站在线看| 日韩欧美一区视频| 国产福利视频在线观看| 精品久久久久久乱码天堂| 全国精品久久少妇| 青青草精品在线视频| 亚洲男人天堂九九视频| 国产一区二区| 无码aⅴ精品一区二区三区浪潮| 99视频在线观看一区三区| 中文在线免费观看| 91禁外国网站| 性欧美69xoxoxoxo| 中国毛片在线观看| 日韩欧美123| 成人亚洲视频| 亚洲熟妇av一区二区三区漫画| 国产**成人网毛片九色| а中文在线天堂| 久久全国免费视频| 成人一二三区| 草草地址线路①屁屁影院成人|