中文字幕在线精品不卡_正在播放露脸一区_久久综合欧美_www.男人天堂

哈爾濱海月數(shù)據(jù)恢復(fù),技術(shù)亞洲領(lǐng)先 設(shè)為首頁(yè)加入收藏RSS訂閱
中國(guó)區(qū):哈爾濱(總部)、鄭州、福建、深圳沈陽(yáng)、合肥、大連、包頭、淄博、上海廣州、
    南京杭州、嘉興、武漢濟(jì)南、青島、新疆太原
亞太區(qū):印度韓國(guó)、泰國(guó)、新加坡、馬來(lái)西亞、澳大利亞
Linux
Linux下網(wǎng)頁(yè)抓取

  來(lái)源:【51cto.com】

  ***近一直在學(xué)習(xí)stevens的unix網(wǎng)絡(luò)編程,對(duì)于網(wǎng)絡(luò)通信有了一定的認(rèn)識(shí),所以也想練練手。聊天程序之前用winsock做過(guò),這次不想做重復(fù)的。之前看到一哥們寫過(guò)windows下抓取貓撲的帖子,我覺(jué)得抓頁(yè)面也是一個(gè)不錯(cuò)想法。我也喜歡逛貓撲,有時(shí)候也去追追里面寫的文章,貓撲帖子少了一個(gè)很重要的功能,就是只看樓主的帖子。貓撲水人很多,容易把樓主的帖子淹沒(méi)在大海里面。

  查看了一下貓撲帖子的網(wǎng)頁(yè)源代碼,帖子內(nèi)容介于

之間,只需要解析這段內(nèi)容,就能得到自己想要的東西。不過(guò)里面東西比較多,比較雜,還是先找一個(gè)簡(jiǎn)單頁(yè)面抓取試試。csdn博客相對(duì)來(lái)說(shuō)就是個(gè)不錯(cuò)的選擇,******沒(méi)廣告,內(nèi)容不算很多,第二,代碼風(fēng)格很好。抓CSDN的頁(yè)面無(wú)非獲得博主名,文章名字和URL等,如果想獲得更多的信息,可以把博主的排名,評(píng)論數(shù)抓取下來(lái)。

 

  自定義的結(jié)構(gòu)體:

  [cpp] view plaincopyprint?

  struct BloggerInfo

  {

  int visits;//訪問(wèn)次數(shù)

  int integral;//積分

  int ranking;//排名

  int artical_original;//原創(chuàng)文章數(shù)

  int artical_reproduce;//轉(zhuǎn)載文章數(shù)

  int artical_translation;//翻譯文章數(shù)

  int comments;//評(píng)論

  };

  struct ArticleInfo

  {

  char articleName[SMALLLEN];//文章標(biāo)題

  char URL[SMALLLEN];//URL

  char createDate[25];//創(chuàng)建時(shí)間

  int visits;//訪問(wèn)時(shí)間

  int comments;//評(píng)論次數(shù)

  struct ArticleInfo *next;//下一篇文章地址

  };

  struct Articles

  {

  int page;//頁(yè)數(shù)

  struct Articles * pageNext;//下一頁(yè)所在地址

  struct ArticleInfo *firstArticle;//該頁(yè)******篇文章地址

  struct ArticleInfo *currentArticle;//插入文章時(shí)使用,表示插入時(shí)的***后一篇文章

  };

  下面簡(jiǎn)單分析一下CSDN博客源代碼。

  博主標(biāo)題:

  [html] view plaincopyprint?

  


 

  


  編程小子的專欄

  

鍥而舍之,朽木不折;鍥而不舍,金石可鏤


  


  


  


  文章標(biāo)題和URL:

  [html] view plaincopyprint?

  

  ubuntu11.10搭建git服務(wù)器

  

  文章訪問(wèn)次數(shù),評(píng)論次數(shù)等:

  [html] view plaincopyprint?

  


  

  閱讀(21)

  評(píng)論(0)

  


  博客統(tǒng)計(jì)信息:

  [html] view plaincopyprint?

  


     

      

  • 訪問(wèn):1218次

  •   

  • 積分:164分

  •   

  • 排名:千里之外

  •   


 

  [html] view plaincopyprint?

  


      

  • 原創(chuàng):13篇

  •  

      

  • 轉(zhuǎn)載:2篇

  •   

  • 譯文:0篇

  •   

  • 評(píng)論:1條

  •   


  從上面貼出的HTML可以看出,所需要的信息都在某一個(gè)id下,每個(gè)id是******的,這對(duì)解析是很有利的。我們只需要抓取到網(wǎng)頁(yè),分析相應(yīng)內(nèi)容,得到想要的信息即可。

  在確定CSDN博客是可以抓取后,就可以著手抓取。如何抓取?簡(jiǎn)單來(lái)說(shuō),就是與CSDN博客服務(wù)器簡(jiǎn)歷tcp連接,然后發(fā)送HTTP請(qǐng)求,得到響應(yīng)。頁(yè)面抓取過(guò)程如下圖所示:

 

 

  主要流程:

  解析域名(csdn.blog.net),得到服務(wù)器IP地址

  與服務(wù)器端建立TCP連接

  發(fā)送HTTP請(qǐng)求

  得到服務(wù)器端響應(yīng),響應(yīng)內(nèi)容里面含有請(qǐng)求頁(yè)面源代碼

  解析網(wǎng)頁(yè)源代碼,得到所需要信息,如果需要抓取博主所有的文章,需要解析出每篇文章的URL

  統(tǒng)計(jì)博主文章數(shù),判斷是否有分頁(yè),如果又分頁(yè),則請(qǐng)求分頁(yè)內(nèi)容,獲取分頁(yè)的文章URL

  跳轉(zhuǎn)到******步,請(qǐng)求每篇文章

  把文章保存到本地

  根據(jù)需求看是否對(duì)文章進(jìn)行處理

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


 

 


 

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

 

  具體實(shí)現(xiàn):

  一、解析域名

  采用gethostbyname方法。函數(shù)聲明如下:

  [cpp] view plaincopyprint?

  #include

  struct hostent * gethostbyname(const char *hostname)

  執(zhí)行成功,返回非空指針,失敗返回空指針,并設(shè)置h_errno,可以通過(guò)hstrerror方法查看h_errno對(duì)應(yīng)的錯(cuò)誤提示信息。

  函數(shù)中用到的hostent結(jié)構(gòu)體,如下所示:

  [cpp] view plaincopyprint?

  

struct hostent
																												


  {

  char *h_name; /* 查詢主機(jī)的規(guī)范名字 */

  char **h_aliases; /* 別名 */

  int h_addrtype; /* 地址類型 */

  int h_length; /* 地址個(gè)數(shù) */

  char **h_addr_list; /* 所有的地址 */

  };

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

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

  [cpp] view plaincopyprint?

  /*

  *功能:獲得CSDN博客IP地址,并與CSDN服務(wù)器建立TCP連接

  *參數(shù):無(wú)

  *返回值:非負(fù)描述字-成功,-1-出錯(cuò)

  */

  int buildConnection() {

  int sockfd;

  static struct hostent *host = NULL;

  static struct sockaddr_in csdn_addr;

  if (host == NULL) {

  if ((host = gethostbyname(CSDN_BLOG_URL)) == NULL) {//獲取CSDN博客服務(wù)器IP地址

  fprintf(stderr, "gethostbyname error:%s\n", hstrerror(h_errno));

  exit(-1);

  }

  #ifdef DEBUG

  printf("csdn ip:%s\n", inet_ntoa(*((struct in_addr *) host->h_addr_list[0])));

  #endif

  bzero(&csdn_addr, sizeof (csdn_addr));

  csdn_addr.sin_family = AF_INET;

  csdn_addr.sin_port = htons(CSDN_BLOG_PORT);

  csdn_addr.sin_addr = *((struct in_addr *) host->h_addr_list[0]);

  }

  sockfd = socket(AF_INET, SOCK_STREAM, 0);

  if (sockfd == -1) {

  fprintf(stderr, "socked error:%s\n", strerror(errno));

  exit(-1);

  }

  if (connect(sockfd, (struct sockaddr *) &csdn_addr, sizeof (csdn_addr)) == -1) {

  fprintf(stderr, "connect error:%s", strerror(errno));

  exit(-1);

  }

  return sockfd;

  }

  不需要每一次都去解析域名,所以把域名存在一個(gè)static變量里面。

  三、發(fā)送HTTP請(qǐng)求

  HTTP請(qǐng)求格式如下所示:

  [cpp] view plaincopyprint?

  "GET /lanyan822 HTTP/1.1\r\n

  Accept:*/*\r\n

  Accept-Language:zh-cn\r\n

  User-Agent: Mozilla/4.0 (compatible;MSIE 5.01;Windows NT 5.0)\r\n

  Host: blog.csdn.net:80\r\n

  Connection: Close\r\n

  \r\n

  說(shuō)明:GET:表明是一個(gè)GET請(qǐng)求,還有POST請(qǐng)求(你可以模擬登陸,發(fā)送用戶名和密碼到服務(wù)端。不過(guò)現(xiàn)在CSDN登陸需要一個(gè)隨機(jī)碼驗(yàn)證。這個(gè)不好辦)/lanyan822表示請(qǐng)求的頁(yè)面,HTTP1.1表示使用的版本。\r\n表示結(jié)束。

  Accept:表示瀏覽器接受的MIME類型

  Accept-Language:表示瀏覽器接受的語(yǔ)言類型

  User-Agent:指瀏覽器的名字。呵呵,因?yàn)槭悄M瀏覽器發(fā)請(qǐng)求,所以這里是假的

  Host:服務(wù)器的域名和端口

  Connection:用來(lái)告訴服務(wù)器是否可以維持固定的HTTP連接。HTTP/1.1使用Keep-Alive為默認(rèn)值,這樣,當(dāng)瀏覽器需要多個(gè)文件時(shí)(比如一個(gè)HTML文件和相關(guān)的圖形文件),不需要每次都建立連接。這里我每次請(qǐng)求頁(yè)面后,我都選擇關(guān)閉。

  這里需要注意的是:HTTP請(qǐng)求格式,千萬(wàn)不能在里面多寫空格什么的。我之前一直請(qǐng)求頁(yè)面失敗就是因?yàn)槔锩娑嗔丝崭瘛?**后以\r\n結(jié)束。

  [cpp] view plaincopyprint?

  /*

  *功能:發(fā)送HTTP請(qǐng)求,HTTP請(qǐng)求格式一定要正確,且不能有多余的空格.

  *參數(shù):sockfd:套接字,requestParam:http請(qǐng)求路徑

  *返回值:寫入套接口的字節(jié)數(shù)-成功,-1:失敗

  */

  int sendRequest(int sockfd, const char *requestParam) {

  char request[BUFFERLEN];

  int ret;

  bzero(request, sizeof (request));

  sprintf(request, "GET %s HTTP/1.1\r\n Accept:*/*\r\n Accept-Language:zh-cn\r\n"

  "User-Agent: Mozilla/4.0 (compatible;MSIE 5.01;Windows NT 5.0)\r\n"

  "Host: %s\r\n"

  "Connection: Close\r\n"

  "\r\n", requestParam, CSDN_BLOG_URL);

  #ifdef DEBUG

  printf("請(qǐng)求HTTP格式:%s\n", request);

  #endif

  ret = write(sockfd, request, sizeof (request));

  #ifdef DEBUG

  printf("send %d data to server\n", ret);

  #endif

  return ret;

  }

  四、接受服務(wù)端響應(yīng),并存儲(chǔ)請(qǐng)求頁(yè)面

  HTTP響應(yīng)包括響應(yīng)頭和所請(qǐng)求頁(yè)面的源代碼。

  HTTP響應(yīng)頭如下所示:

  [cpp] view plaincopyprint?

  HTTP/1.1 200 OK

  Server: nginx/0.7.68

  Date: Wed, 16 May 2012 06:28:28 GMT

  Content-Type: text/html; charset=utf-8

  Connection: close

  Vary: Accept-Encoding

  X-Powered-By: ASP.NET

  Set-Cookie: uuid=344c2ad0-b060-448b-b75f-2c9dd308e5a5; expires=Thu, 17-May-2012 06:24:49 GMT; path=/

  Set-Cookie: avh=yKfd8EgMOqw1YuvAzcgrbQ%3d%3d; expires=Wed, 16-May-2012 06:29:49 GMT; path=/

  Cache-Control: private

  Content-Length: 18202

  響應(yīng)頭部也是以\r\n結(jié)束。所以可以通過(guò)\r\n\r\n來(lái)判斷響應(yīng)頭部的結(jié)束位置。

  實(shí)現(xiàn)源碼:

  [cpp] view plaincopyprint?

  /*

  *功能:將服務(wù)端返回的html內(nèi)容存入filePath中.這里使用了select函數(shù).

  *參數(shù):sockfd:套接字,filePath:文件存儲(chǔ)路徑

  *返回值:讀入套接字字節(jié)數(shù)-成功,-1-失敗,-2請(qǐng)求頁(yè)面返回狀態(tài)值非200

  */

  int saveRequestHtml(int sockfd, const char *filePath) {

  int headerTag, ret, fileFd = -1,contentLen,count=0;

  char receiveBuf[BUFFERLEN];

  fd_set rset;

  struct timeval timeout;

  memset(&timeout, 0, sizeof (timeout));

  timeout.tv_sec = 60;

  timeout.tv_usec = 0;

  char *first, *last,*ok_loc,*pContentLenStart,*pContentLenEnd;

  while (TRUE) {

  FD_SET(sockfd, &rset);

  ret = select(sockfd + 1, &rset, NULL, NULL, &timeout);

  if (ret == 0) {

  fprintf(stderr, "select time out:%s\n", strerror(errno));

  return ret;

  } else

  if (ret == -1) {

  fprintf(stderr, "select error :%s\n", strerror(errno));

  return ret;

  }

  headerTag = 0;

  if (FD_ISSET(sockfd, &rset)) {

  while (ret = read(sockfd, receiveBuf, BUFFERLEN - 1)) {

  if (headerTag == 0) {

  if (access(filePath, F_OK) == 0) {

  if (remove(filePath) == -1)

  fprintf(stderr, "remove error:%s\n", strerror(errno));

  } else {

  #ifdef DEBUG

  printf("%s not exist\n", filePath);

  #endif

  }

  receiveBuf[ret] = '\0';

  first = strstr(receiveBuf, "\r\n\r\n");//服務(wù)端返回消息頭部和網(wǎng)頁(yè)html內(nèi)容.消息頭部也是以\r\n\r\n結(jié)尾.

  if (first != 0) {

  last = first + strlen("\r\n\r\n");

  ok_loc=strstr(receiveBuf,"OK");//如果請(qǐng)求成功,狀態(tài)碼是200,并且有OK

  if(ok_loc!=0)

  {

  #ifdef DEBUG

  printf("頁(yè)面請(qǐng)求成功\n");

  #endif

  fileFd = open(filePath, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);

  if (fileFd == -1) {

  fprintf(stderr, "open error:%s\n", strerror(errno));

  return -1;

  }

  pContentLenStart=strstr(receiveBuf,CONTENT_LENGTH);//這里是為了獲取HTTP響應(yīng)頭content-length大小。

  if(pContentLenStart!=0)

  {

  pContentLenEnd=strstr(pContentLenStart+strlen(CONTENT_LENGTH),"\r\n");

  if(pContentLenEnd!=0)

  {

  contentLen=myatoi(pContentLenStart,pContentLenEnd);

  #ifdef DEBUG

  printf("content-length:%d\n",contentLen);

  #endif

  count+= write(fileFd, last, ret - (last - receiveBuf));

  headerTag = 1;

  }else

  return -1;

  }else

  {

  return -1;

  }

  }else

  {

  return -2;//頁(yè)面請(qǐng)求失敗。

  }

  }

  #ifdef DEBUG

  printf("%s\n", receiveBuf);

  #endif

  } else {

  count+= write(fileFd, receiveBuf, ret);

  }

  }

  close(fileFd);

  }

  break;

  }

  if(count!=contentLen)

  {

  printf("接受長(zhǎng)度與HTTP響應(yīng)頭長(zhǎng)度不一致\n");

  return -1;

  }

  return count;

  }

  五、解析網(wǎng)頁(yè)源代碼,得到所需要信息

  我主要解析了博客的文章名,文章URL,訪問(wèn)次數(shù),排名,積分,原創(chuàng)文章數(shù),轉(zhuǎn)載文章數(shù),翻譯文章數(shù),評(píng)論數(shù)。

  源代碼解析是按照所需要的信息在源代碼中出現(xiàn)的順序依次解析,先出現(xiàn)文章名,接著是文章的評(píng)論,發(fā)表日期等信息,接著解析博主的積分,等級(jí)等,***后解析博主發(fā)表的文章數(shù)。

  解析用的***多的是strstr函數(shù)。

  [cpp] view plaincopyprint?

  #include

  char *strstr (char *haystack, const char *needle);

  函數(shù)功能:查找needle在haystack中******次出現(xiàn)的地址,查找成功,返回******次出現(xiàn)的地址,查找失敗返回0.類似于c++ string的find_first_of函數(shù)。

  信息解析出來(lái),需要存儲(chǔ)下來(lái)。主要是存在自定義的數(shù)據(jù)結(jié)構(gòu)里面。每一頁(yè)(***多50篇文章)存儲(chǔ)在struct Articles結(jié)構(gòu)體里面,文章信息則存入struct ArticleInfo里面。頁(yè)面存儲(chǔ)結(jié)構(gòu)如下圖所示:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
客戶服務(wù) +more
上門服務(wù)
服務(wù)承諾
異地恢復(fù)
收費(fèi)標(biāo)準(zhǔn)
付款方式
疑難解答
服務(wù)特色 +more
·免費(fèi)檢測(cè)
·免費(fèi)提供3天備份
·專業(yè)工程師提供服務(wù)
·免費(fèi)清潔送修的介質(zhì)
·數(shù)據(jù)恢復(fù)前報(bào)價(jià),客戶確認(rèn)后工程師開始數(shù)據(jù)恢復(fù)
·數(shù)據(jù)恢復(fù)不成功不收費(fèi)
·與客戶簽訂保密協(xié)議,對(duì)客戶的數(shù)
 據(jù)嚴(yán)格保密,整個(gè)恢復(fù)過(guò)程不會(huì)對(duì)
 客戶的原盤有任何的寫操作,以確
 保原盤的數(shù)據(jù)完全

·免費(fèi)參觀恢復(fù)全過(guò)程

·工程師在線免費(fèi)咨詢

·專業(yè)工程師提供服務(wù)
服務(wù)器數(shù)據(jù)恢復(fù) 點(diǎn)擊這里給我發(fā)消

息
數(shù)據(jù)庫(kù)修復(fù)
點(diǎn)擊這里給我發(fā)

消息
硬盤數(shù)據(jù)恢復(fù)
點(diǎn)擊這里給我發(fā)消

息
中文字幕在线精品不卡_正在播放露脸一区_久久综合欧美_www.男人天堂

9000px;">

国产精品一区二区黑人巨大| 亚洲一区电影在线观看| 亚洲天堂日韩av| 精品人妻av一区二区三区| 色乱码一区二区三区在线| 一本色道久久综合无码人妻| 久久免费视频99| 亚洲免费在线视频观看| 久久精品五月天| 亚洲精品一二三四| 久久激情免费视频| 亚洲乱码在线观看| 久久无码人妻精品一区二区三区| 亚洲国产中文字幕在线| 美女网站色免费| 9i看片成人免费看片| 日本精品999| 国产激情在线免费观看| 亚洲AV无码一区二区三区少妇| 国产黄色片免费| 这里只有精品免费视频| 久久人妻一区二区| av在线免费看片| 无码人妻一区二区三区免费| 国产情侣在线播放| 亚洲精品乱码久久久久久蜜桃欧美| 久久国产柳州莫菁门| 97人妻精品一区二区免费| 色婷婷中文字幕| 国产性生活视频| 91av久久久| 午夜在线观看一区| 欧美 日韩 国产 成人 在线 91| aaa级黄色片| 亚洲AV无码一区二区三区少妇| 久久av高潮av无码av喷吹| 一本色道久久亚洲综合精品蜜桃| 色哟哟网站在线观看| 九九热国产视频| www黄色网址| 亚洲狠狠婷婷综合久久久久图片| 日韩精品xxx| 精品熟妇无码av免费久久| av男人天堂av| 亚洲永久无码7777kkk| 亚洲第一成人av| 日本人亚洲人jjzzjjz| 国产又粗又猛又色又| a天堂视频在线观看| 中文字幕永久免费视频| 色网站免费观看| 欧美熟妇交换久久久久久分类| 国产精品久久久久久免费| 亚洲一卡二卡在线观看| 中文字幕+乱码+中文乱码www | 性欧美在线视频| 日本二区三区视频| 麻豆视频免费在线播放| 国产视频一区二区三| www.中文字幕在线观看| 亚洲天堂五月天| 亚洲精品一二三四五区| 伊人中文字幕在线观看| 天天操天天操天天操| 人妻无码一区二区三区免费 | 中文字幕一区久久| 中文字幕久久久久久久| 亚洲成人久久精品| 亚欧精品在线视频| 无码精品视频一区二区三区| 神马久久久久久久久久| 日本一级特级毛片视频| 情侣偷拍对白清晰饥渴难耐| 美女网站视频色| 牛夜精品久久久久久久| 免费精品一区二区| 久热这里只有精品在线| 欧美a视频在线观看| 日本网站在线免费观看| 日韩av电影网| 色婷婷av一区二区三区之红樱桃| 色播五月综合网| 亚州av综合色区无码一区| 五月婷六月丁香| 伊人久久亚洲综合| 亚洲美女综合网| 91网址在线播放| 国产91免费看| 国产一级做a爱免费视频| 久久狠狠高潮亚洲精品| 青青草成人av| 天天摸日日摸狠狠添| 又黄又爽又色的视频| 亚洲黄色一级大片| 成年人网站免费看| 国产日韩在线观看一区| 精品人妻伦一二三区久久| 欧美国产在线看| 午夜福利123| 亚洲综合久久av一区二区三区| 9久久婷婷国产综合精品性色| 国产精品丝袜黑色高跟鞋| 久久精品亚洲a| 色婷婷综合网站| 亚洲精品色午夜无码专区日韩| www国产在线| 精品人妻一区二区免费| 日本精品在线观看视频| 中文字幕+乱码+中文乱码91| 99自拍视频在线| 精品国产视频一区二区三区| 人成免费在线视频| 中文字幕一区二区在线观看视频| 超碰av在线免费观看| 久久精品欧美一区二区| 日韩精品国产一区二区| 中文字幕在线有码| 国产青青草视频| 三级在线观看网站| 99热这里只有精品99| 久久精品—区二区三区舞蹈| 午夜久久久久久久| 99日在线视频| 欧美特级特黄aaaaaa在线看| 中文字幕亚洲欧洲| 国产精品成人免费观看| 日本一本在线视频| 99999精品| 欧美特级一级片| 91欧美一区二区三区| 老熟妇一区二区三区啪啪| 在线视频1卡二卡三卡| 国产无套在线观看| 亚洲 精品 综合 精品 自拍| 懂色av蜜臀av粉嫩av永久| 日本在线观看视频一区| 99re6在线观看| 日韩乱码一区二区| а√中文在线资源库| 人妻一区二区三区四区| av天堂一区二区三区| 青青草av在线播放| 丰满人妻一区二区三区大胸| 肉色超薄丝袜脚交69xx图片| 国产xxxx视频| 五月天婷婷久久| 国产又大又黄的视频| 在线视频 中文字幕| 国产一级特黄a大片免费| 免费在线黄色网| 亚洲高清在线免费观看| 国产喷水在线观看| 中文字幕精品一区二区精| 国产精品人人爽人人爽| 日韩精品一区二区在线播放| 亚洲一级免费观看| 欧美精品久久久久久久久46p | 少妇伦子伦精品无吗| 一二三四区在线| 男人天堂av在线播放| a在线视频播放观看免费观看| 蜜臀久久久久久999| 亚洲欧美在线不卡| 毛片aaaaaa| 亚洲视频在线不卡| 久久久99精品| 高潮毛片无遮挡| 天天操中文字幕| 国产免费中文字幕| 亚洲av综合色区无码一二三区| 九九九久久久久久久| 最新中文字幕免费| 欧美成人一区二区视频| 一区二区伦理片| 人妻视频一区二区| 懂色av粉嫩av蜜乳av| 天天爽夜夜爽夜夜爽| 国产欧美熟妇另类久久久| 杨幂一区二区国产精品| 欧美一区二区三区观看| 成人乱码一区二区三区| 无码人妻aⅴ一区二区三区| 精品不卡一区二区| 亚洲精品久久久久久宅男| 人妻无码一区二区三区久久99| 国精产品一区一区三区免费视频 | 青青草国产在线观看| 精品人体无码一区二区三区| 亚洲一区 视频| 中文字幕线观看| 日本高清视频www| 久一视频在线观看| 高清毛片aaaaaaaaa片| 91精品啪在线观看国产| 中文字幕第4页| 人妻一区二区三区四区| 欧美熟妇交换久久久久久分类| 国产精品综合激情| 粉嫩av懂色av蜜臀av分享| 亚洲区免费视频|