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

Java 多線程爬蟲及分布式爬蟲架構(gòu)探索

開發(fā) 架構(gòu) 分布式
這是 Java 爬蟲系列博文的第五篇,在上一篇 Java 爬蟲服務(wù)器被屏蔽,不要慌,咱們換一臺服務(wù)器 中,我們簡單的聊反爬蟲策略和反反爬蟲方法,主要針對的是 IP 被封及其對應(yīng)辦法。前面幾篇文章我們把爬蟲相關(guān)的基本知識都講的差不多啦。這一篇我們來聊一聊爬蟲架構(gòu)相關(guān)的內(nèi)容。

 這是 Java 爬蟲系列博文的第五篇,在上一篇 Java 爬蟲服務(wù)器被屏蔽,不要慌,咱們換一臺服務(wù)器 中,我們簡單的聊反爬蟲策略和反反爬蟲方法,主要針對的是 IP 被封及其對應(yīng)辦法。前面幾篇文章我們把爬蟲相關(guān)的基本知識都講的差不多啦。這一篇我們來聊一聊爬蟲架構(gòu)相關(guān)的內(nèi)容。

[[279402]]

前面幾章內(nèi)容我們的爬蟲程序都是單線程,在我們調(diào)試爬蟲程序的時候,單線程爬蟲沒什么問題,但是當我們在線上環(huán)境使用單線程爬蟲程序去采集網(wǎng)頁時,單線程就暴露出了兩個致命的問題:

  • 采集效率特別慢,單線程之間都是串行的,下一個執(zhí)行動作需要等上一個執(zhí)行完才能執(zhí)行
  • 對服務(wù)器的CUP等利用率不高,想想我們的服務(wù)器都是 8核16G,32G 的只跑一個線程會不會太浪費啦

線上環(huán)境不可能像我們本地測試一樣,不在乎采集效率,只要能正確提取結(jié)果就行。在這個時間就是金錢的年代,不可能給你時間去慢慢的采集,所以單線程爬蟲程序是行不通的,我們需要將單線程改成多線程的模式,來提升采集效率和提高計算機利用率。

多線程的爬蟲程序設(shè)計比單線程就要復(fù)雜很多,但是與其他業(yè)務(wù)在高并發(fā)下要保證數(shù)據(jù)安全又不同,多線程爬蟲在數(shù)據(jù)安全上到要求不是那么的高,因為每個頁面都可以被看作是一個獨立體。要做好多線程爬蟲就必須做好兩點:第一點就是統(tǒng)一的待采集 URL 維護,第二點就是 URL 的去重, 下面我們簡單的來聊一聊這兩點。

維護待采集的 URL

多線程爬蟲程序就不能像單線程那樣,每個線程獨自維護這自己的待采集 URL,如果這樣的話,那么每個線程采集的網(wǎng)頁將是一樣的,你這就不是多線程采集啦,你這是將一個頁面采集的多次。基于這個原因我們就需要將待采集的 URL 統(tǒng)一維護,每個線程從統(tǒng)一 URL 維護處領(lǐng)取采集 URL ,完成采集任務(wù),如果在頁面上發(fā)現(xiàn)新的 URL 鏈接則添加到 統(tǒng)一 URL 維護的容器中。下面是幾種適合用作統(tǒng)一 URL 維護的容器:

  • JDK 的安全隊列,例如 LinkedBlockingQueue
  • 高性能的 NoSQL,比如 Redis、Mongodb
  • MQ 消息中間件

URL 的去重

URL 的去重也是多線程采集的關(guān)鍵一步,因為如果不去重的話,那么我們將采集到大量重復(fù)的 URL,這樣并沒有提升我們的采集效率,比如一個分頁的新聞列表,我們在采集第一頁的時候可以得到 2、3、4、5 頁的鏈接,在采集第二頁的時候又會得到 1、3、4、5 頁的鏈接,待采集的 URL 隊列中將存在大量的列表頁鏈接,這樣就會重復(fù)采集甚至進入到一個死循環(huán)當中,所以就需要 URL 去重。URL 去重的方法就非常多啦,下面是幾種常用的 URL 去重方式:

  • 將 URL 保存到數(shù)據(jù)庫進行去重,比如 redis、MongoDB
  • 將 URL 放到哈希表中去重,例如 hashset
  • 將 URL 經(jīng)過 MD5 之后保存到哈希表中去重,相比于上面一種,能夠節(jié)約空間
  • 使用 布隆過濾器(Bloom Filter)去重,這種方式能夠節(jié)約大量的空間,就是不那么準確。

關(guān)于多線程爬蟲的兩個核心知識點我們都知道啦,下面我畫了一個簡單的多線程爬蟲架構(gòu)圖,如下圖所示:  

多線程爬蟲架構(gòu)圖

上面我們主要了解了多線程爬蟲的架構(gòu)設(shè)計,接下來我們不妨來試試 Java 多線程爬蟲,我們以采集虎撲新聞為例來實戰(zhàn)一下 Java 多線程爬蟲,Java 多線程爬蟲中設(shè)計到了 待采集 URL 的維護和 URL 去重,由于我們這里只是演示,所以我們就使用 JDK 內(nèi)置的容器來完成,我們使用 LinkedBlockingQueue 作為待采集 URL 維護容器,HashSet 作為 URL 去重容器。下面是 Java 多線程爬蟲核心代碼,詳細代碼以上傳 GitHub,地址在文末:

  1. /** 
  2.  * 多線程爬蟲 
  3.  */ 
  4. public class ThreadCrawler implements Runnable { 
  5.     // 采集的文章數(shù) 
  6.     private final AtomicLong pageCount = new AtomicLong(0); 
  7.     // 列表頁鏈接正則表達式 
  8.     public static final String URL_LIST = "https://voice.hupu.com/nba"
  9.     protected Logger logger = LoggerFactory.getLogger(getClass()); 
  10.     // 待采集的隊列 
  11.     LinkedBlockingQueue<String> taskQueue; 
  12.     // 采集過的鏈接列表 
  13.     HashSet<String> visited; 
  14.     // 線程池 
  15.     CountableThreadPool threadPool; 
  16.     /** 
  17.      * 
  18.      * @param url 起始頁 
  19.      * @param threadNum 線程數(shù) 
  20.      * @throws InterruptedException 
  21.      */ 
  22.     public ThreadCrawler(String url, int threadNum) throws InterruptedException { 
  23.         this.taskQueue = new LinkedBlockingQueue<>(); 
  24.         this.threadPool = new CountableThreadPool(threadNum); 
  25.         this.visited = new HashSet<>(); 
  26.         // 將起始頁添加到待采集隊列中 
  27.         this.taskQueue.put(url); 
  28.     } 
  29.  
  30.     @Override 
  31.     public void run() { 
  32.         logger.info("Spider started!"); 
  33.         while (!Thread.currentThread().isInterrupted()) { 
  34.             // 從隊列中獲取待采集 URL 
  35.             final String request = taskQueue.poll(); 
  36.             // 如果獲取 request 為空,并且當前的線程采已經(jīng)沒有線程在運行 
  37.             if (request == null) { 
  38.                 if (threadPool.getThreadAlive() == 0) { 
  39.                     break; 
  40.                 } 
  41.             } else { 
  42.                 // 執(zhí)行采集任務(wù) 
  43.                 threadPool.execute(new Runnable() { 
  44.                     @Override 
  45.                     public void run() { 
  46.                         try { 
  47.                             processRequest(request); 
  48.                         } catch (Exception e) { 
  49.                             logger.error("process request " + request + " error", e); 
  50.                         } finally { 
  51.                             // 采集頁面 +1 
  52.                             pageCount.incrementAndGet(); 
  53.                         } 
  54.                     } 
  55.                 }); 
  56.             } 
  57.         } 
  58.         threadPool.shutdown(); 
  59.         logger.info("Spider closed! {} pages downloaded.", pageCount.get()); 
  60.     } 
  61.  
  62.     /** 
  63.      * 處理采集請求 
  64.      * @param url 
  65.      */ 
  66.     protected void processRequest(String url) { 
  67.         // 判斷是否為列表頁 
  68.         if (url.matches(URL_LIST)) { 
  69.             // 列表頁解析出詳情頁鏈接添加到待采集URL隊列中 
  70.             processTaskQueue(url); 
  71.         } else { 
  72.             // 解析網(wǎng)頁 
  73.             processPage(url); 
  74.         } 
  75.     } 
  76.     /** 
  77.      * 處理鏈接采集 
  78.      * 處理列表頁,將 url 添加到隊列中 
  79.      * 
  80.      * @param url 
  81.      */ 
  82.     protected void processTaskQueue(String url) { 
  83.         try { 
  84.             Document doc = Jsoup.connect(url).get(); 
  85.             // 詳情頁鏈接 
  86.             Elements elements = doc.select(" div.news-list > ul > li > div.list-hd > h4 > a"); 
  87.             elements.stream().forEach((element -> { 
  88.                 String request = element.attr("href"); 
  89.                 // 判斷該鏈接是否存在隊列或者已采集的 set 中,不存在則添加到隊列中 
  90.                 if (!visited.contains(request) && !taskQueue.contains(request)) { 
  91.                     try { 
  92.                         taskQueue.put(request); 
  93.                     } catch (InterruptedException e) { 
  94.                         e.printStackTrace(); 
  95.                     } 
  96.                 } 
  97.             })); 
  98.             // 列表頁鏈接 
  99.             Elements list_urls = doc.select("div.voice-paging > a"); 
  100.             list_urls.stream().forEach((element -> { 
  101.                 String request = element.absUrl("href"); 
  102.                 // 判斷是否符合要提取的列表鏈接要求 
  103.                 if (request.matches(URL_LIST)) { 
  104.                     // 判斷該鏈接是否存在隊列或者已采集的 set 中,不存在則添加到隊列中 
  105.                     if (!visited.contains(request) && !taskQueue.contains(request)) { 
  106.                         try { 
  107.                             taskQueue.put(request); 
  108.                         } catch (InterruptedException e) { 
  109.                             e.printStackTrace(); 
  110.                         } 
  111.                     } 
  112.                 } 
  113.             })); 
  114.  
  115.         } catch (Exception e) { 
  116.             e.printStackTrace(); 
  117.         } 
  118.     } 
  119.     /** 
  120.      * 解析頁面 
  121.      * 
  122.      * @param url 
  123.      */ 
  124.     protected void processPage(String url) { 
  125.         try { 
  126.             Document doc = Jsoup.connect(url).get(); 
  127.             String title = doc.select("body > div.hp-wrap > div.voice-main > div.artical-title > h1").first().ownText(); 
  128.  
  129.             System.out.println(Thread.currentThread().getName() + " 在 " + new Date() + " 采集了虎撲新聞 " + title); 
  130.             // 將采集完的 url 存入到已經(jīng)采集的 set 中 
  131.             visited.add(url); 
  132.  
  133.         } catch (IOException e) { 
  134.             e.printStackTrace(); 
  135.         } 
  136.     } 
  137.  
  138.     public static void main(String[] args) { 
  139.  
  140.         try { 
  141.             new ThreadCrawler("https://voice.hupu.com/nba", 5).run(); 
  142.         } catch (InterruptedException e) { 
  143.             e.printStackTrace(); 
  144.         } 
  145.     } 

我們用 5 個線程去采集虎撲新聞列表頁看看效果如果?運行該程序,得到如下結(jié)果:


多線程采集結(jié)果

 

 

結(jié)果中可以看出,我們啟動了 5 個線程采集了 61 頁頁面,一共耗時 2 秒鐘,可以說效果還是不錯的,我們來跟單線程對比一下,看看差距有多大?我們將線程數(shù)設(shè)置為 1 ,再次啟動程序,得到如下結(jié)果:

 

 

 

單線程運行結(jié)果

可以看出單線程采集虎撲 61 條新聞花費了 7 秒鐘,耗時差不多是多線程的 4 倍,你想想這可只是 61 個頁面,頁面更多的話,差距會越來越大,所以多線程爬蟲效率還是非常高的。

分布式爬蟲架構(gòu)

分布式爬蟲架構(gòu)是一個大型采集程序才需要使用的架構(gòu),一般情況下使用單機多線程就可以解決業(yè)務(wù)需求,反正我是沒有分布式爬蟲項目的經(jīng)驗,所以這一塊我也沒什么可以講的,但是我們作為技術(shù)人員,我們需要對技術(shù)保存熱度,雖然不用,但是了解了解也無妨,我查閱了不少資料得出了如下結(jié)論:

分布式爬蟲架構(gòu)跟我們多線程爬蟲架構(gòu)在思路上來說是一樣的,我們只需要在多線程的基礎(chǔ)上稍加改進就可以變成一個簡單的分布式爬蟲架構(gòu)。因為分布式爬蟲架構(gòu)中爬蟲程序部署在不同的機器上,所以我們待采集的 URL 和 采集過的 URL 就不能存放在爬蟲程序機器的內(nèi)存中啦,我們需要將它統(tǒng)一在某臺機器上維護啦,比如存放在 Redis 或者 MongoDB 中,每臺機器都從這上面獲取采集鏈接,而不是從 LinkedBlockingQueue 這樣的內(nèi)存隊列中取鏈接啦,這樣一個簡單的分布式爬蟲架構(gòu)就出現(xiàn)了,當然這里面還會有很多細節(jié)問題,因為我沒有分布式架構(gòu)的經(jīng)驗,我也無從說起,如果你有興趣的話,歡迎交流。

 

責(zé)任編輯:華軒 來源: 平頭哥的技術(shù)博文
相關(guān)推薦

2015-04-21 09:39:03

javajava分布式爬蟲

2018-05-22 15:30:30

Python網(wǎng)絡(luò)爬蟲分布式爬蟲

2019-10-28 11:30:43

架構(gòu)數(shù)據(jù)結(jié)構(gòu)布隆過濾器

2020-10-13 07:44:45

理解分布式

2023-12-29 08:18:31

Session分布式系統(tǒng)微服務(wù)

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2016-09-30 10:13:07

分布式爬蟲系統(tǒng)

2015-05-28 10:58:57

分布式彈性計算云計算架構(gòu)

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2023-07-05 00:09:13

分布式存儲架構(gòu)

2019-07-19 19:53:01

2019-07-19 08:46:58

2023-03-07 09:49:04

分布式數(shù)據(jù)庫

2018-05-09 09:44:51

Java分布式系統(tǒng)

2024-04-08 11:04:03

2018-12-20 09:30:59

分布式高并發(fā)多線程

2025-02-14 08:50:00

架構(gòu)開發(fā)軟件

2017-10-30 08:52:27

vSAN架構(gòu)RAID

2022-03-06 21:43:05

Citus架構(gòu)PostgreSQL

2021-09-10 21:25:43

Redis分布式
點贊
收藏

51CTO技術(shù)棧公眾號

国产片一区二区三区| 黄色亚洲在线| 制服丝袜中文字幕亚洲| 桥本有菜av在线| 精品国自产拍在线观看| 亚洲精品美女| 中文字幕国产亚洲2019| 极品白嫩少妇无套内谢| 成人软件在线观看| 亚洲精品久久久久久国产精华液| 韩国成人动漫在线观看| 中文字幕在线视频免费| 国产精品99免费看| 在线播放日韩欧美| 99久久免费看精品国产一区| 精品成人免费一区二区在线播放| 国产精品电影一区二区| 久久精品日韩| www香蕉视频| 日本强好片久久久久久aaa| 欧美激情免费视频| 免费黄色国产视频| 日韩极品少妇| 亚洲精品在线观看网站| 鲁一鲁一鲁一鲁一av| 国产传媒在线| 亚洲免费av高清| 亚洲欧美日韩综合一区| 日本一级在线观看| 成人黄色一级视频| 91色在线观看| 在线视频欧美亚洲| 三级不卡在线观看| 57pao成人永久免费视频| 青青草偷拍视频| 97精品国产| 中文字幕无线精品亚洲乱码一区 | 亚洲 欧美 视频| 91精品啪在线观看国产18| 亚洲一区av在线播放| 黄色片视频免费观看| 99久久免费精品国产72精品九九| 欧美日韩成人一区| 蜜臀一区二区三区精品免费视频 | 国产日韩欧美一二三区| 日韩中文字幕高清| 久久一区中文字幕| 91精品国产电影| 日本一二三区不卡| 影音先锋久久久| 久久免费在线观看| 国产第100页| 精品不卡视频| 韩国一区二区电影| 99热只有这里有精品| 99视频一区| 欧美在线视频播放| 日本黄色一级视频| 日韩国产一区二| 国产精品久久久久7777婷婷| 无码人妻丰满熟妇区bbbbxxxx| 99国产精品| 2020欧美日韩在线视频| 黄色片免费观看视频| 国产视频欧美| 日韩av日韩在线观看| 亚洲欧美日韩激情| 美女高潮久久久| 亚洲伊人成综合成人网| www.超碰在线.com| 成人福利在线看| 久久久久久高清| 成人在线播放视频| 亚洲天堂中文字幕| 免费视频爱爱太爽了| 福利影院在线看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲九九在线| 欧美激情视频网| 一级片中文字幕| 蜜臀久久久99精品久久久久久| 成人黄色av免费在线观看| 性做久久久久久久| 久久视频一区二区| 影音先锋欧美在线| 波多野结衣在线高清| 一本久久精品一区二区| 国产日韩欧美久久| 91精品国产自产精品男人的天堂| 精品视频在线播放色网色视频| 国产精品无码无卡无需播放器| 亚洲欧洲中文字幕| 欧美野外猛男的大粗鳮| 中文字幕av久久爽| 成人午夜视频福利| 日韩av电影免费播放| 视频在线这里都是精品| 色一情一伦一子一伦一区| 手机免费看av网站| 台湾佬综合网| 美女久久久久久久| www.日韩一区| 成人一区二区三区在线观看| 日韩国产精品一区二区| 男女免费观看在线爽爽爽视频| 色婷婷av久久久久久久| www.色.com| 精品国产99| 97精品国产97久久久久久春色| 亚洲一区二区人妻| 99视频精品全部免费在线| 咪咪色在线视频| www.日韩| 亚洲精品一区二区三区在线观看 | 亚洲精品国产久| 免费不卡中文字幕在线| 色综合久久88| 国产精品国产av| 欧美激情一二三区| 欧美日韩一道本| 亚洲精品不卡在线观看| 色av吧综合网| 91在线视频免费播放| av在线播放一区二区三区| 五月天男人天堂| 巨胸喷奶水www久久久免费动漫| 精品国产一区二区三区久久影院 | av网址在线| 精品视频在线免费看| aaaaa一级片| 亚洲激情婷婷| 国产精品播放| 欧美bbbxxxxx| 日韩三级.com| 国产大片免费看| 精品一区二区三区久久| 亚洲精品在线免费| 亚洲天堂1区| 亚洲区中文字幕| 日本中文字幕久久| 91丨porny丨国产| 91好吊色国产欧美日韩在线| 视频一区在线| 久久99精品久久久久久青青91| 夜夜躁狠狠躁日日躁av| 欧美激情中文字幕一区二区| 妺妺窝人体色www在线小说| 国产成人aa在线观看网站站| 色综合男人天堂| 成人av无码一区二区三区| 亚洲美女区一区| 中文字幕55页| 国产一区美女| 国产一区二区三区四区hd| 182在线播放| 精品小视频在线| 精品国产一区二区三区四| 91美女视频网站| 亚洲爆乳无码专区| 北条麻妃国产九九九精品小说 | 日韩欧美久久| 欧美激情区在线播放| 免费av网站观看| 欧美日韩中国免费专区在线看| 精品少妇一区二区三区免费观| 久久国产高清| 亚洲免费精品视频| 99精品女人在线观看免费视频| 久久精品中文字幕| 成人一区二区三区仙踪林| 欧美91福利在线观看| 成人av播放| 午夜不卡影院| 一个人看的www久久| 一本一道人人妻人人妻αv| 中文字幕一区二区视频| 波多野结衣三级视频| 国产欧美日韩一区二区三区在线| 欧美日韩三区四区| 欧美一区二区三区婷婷| 久久69精品久久久久久久电影好 | 在线视频 中文字幕| 亚洲美女屁股眼交3| 在线免费观看污视频| 日韩在线一区二区| 欧美与动交zoz0z| 国产一区二区在线视频你懂的| 欧美中文字幕视频在线观看| av在线免费观看网| 欧美成人艳星乳罩| 午夜精品一区二| 亚洲视频一区二区在线观看| 精品一区二区视频在线观看| 日韩1区2区3区| youjizz.com在线观看| 四虎5151久久欧美毛片| 成人国产精品免费视频| 在线天堂资源www在线污| 日韩在线观看免费网站| 无码精品人妻一区二区| 欧美日韩国产综合久久| 久草视频在线观| 亚洲女人****多毛耸耸8| 实拍女处破www免费看| 国产九色精品成人porny| 丝袜老师办公室里做好紧好爽 | 天堂网一区二区| 一区二区三区在线免费观看| 青娱乐国产视频| 成人av网站在线| 国产不卡的av| 免费成人美女在线观看.| 免费高清在线观看免费| 黄色工厂这里只有精品| 色乱码一区二区三区熟女| 国产精品嫩草影院在线看| 999热视频| 亚洲在线资源| 国产精品视频色| 一区二区三区电影大全| 欧美日韩成人在线视频| 免费在线看a| 色诱视频网站一区| 久久精品性爱视频| 亚洲天堂2014| 麻豆视频免费在线播放| 久久久久久综合| 国产精品久久久免费观看| 国产精品资源在线看| 午夜激情av在线| 水蜜桃久久夜色精品一区的特点| 久久久久久久久久伊人| 91av精品| 国产精品亚洲天堂| 99视频精品全部免费在线视频| 日本日本精品二区免费| 偷拍视屏一区| 久久久婷婷一区二区三区不卡| 国产欧美一区二区三区米奇| 97在线资源站| 999国产精品一区| 99超碰麻豆| 亚洲精品v亚洲精品v日韩精品| 91色在线观看| 一区二区三区四区视频免费观看| 91日本在线观看| 66精品视频在线观看| 国产精品对白一区二区三区| 51精品国产| 国产欧美日韩亚洲| 日韩av字幕| 欧美日韩一区二区三区在线视频| 无码少妇一区二区三区| 免费国产在线精品一区二区三区| 日本一区福利在线| 日韩电影大全在线观看| 欧美精品久久久久久| 亚洲一区三区视频在线观看| 99视频精品全部免费在线视频| 99亚洲精品视频| 国模大胆一区二区三区| 国产精品久久..4399| 国产精品久久久久久模特| 欧美精品一区二区三区免费播放| 日韩在线一区二区| www.五月天色| av动漫一区二区| 中文字幕一区二区三区人妻不卡| 国产欧美中文在线| 国产精品久久久免费看| 一区二区视频在线| 日韩欧美a级片| 在线亚洲高清视频| 国产精品综合在线| 亚洲精品美女在线观看播放| 男男激情在线| 精品免费国产二区三区| 特黄视频在线观看| 伊人久久免费视频| 4438x成人网全国最大| 午夜精品视频网站| 亚洲精品555| 波多野结衣精品久久| 亚洲激情播播| 老司机av福利| 美女国产精品| 中文字幕第66页| 久久一区二区三区四区| 国产精品嫩草影院俄罗斯| 亚洲成人一区二区在线观看| 精品久久久久久久久久久久久久久久久久 | 日日噜噜噜噜人人爽亚洲精品| 欧美日韩国产综合一区二区三区 | 羞羞色院91蜜桃| 日韩欧美视频在线| 男同在线观看| 欧美日韩国产91| 韩国精品视频在线观看| 国产亚洲精品自在久久| 四虎国产精品免费观看| 婷婷五月综合缴情在线视频| 老司机午夜精品| 亚洲 欧美 日韩在线| 国产精品欧美综合在线| 国产成人愉拍精品久久| 91精品黄色片免费大全| 黄色片在线播放| 国产69精品久久久久9| 九九热这里有精品| 免费av一区二区三区| 亚洲国产国产亚洲一二三| jizz18女人| 久久婷婷综合激情| 日韩精品一卡二卡| 欧美一三区三区四区免费在线看 | 91成人性视频| 试看120秒一区二区三区| 少妇特黄a一区二区三区| 99这里有精品| 日本成人在线免费| 综合网在线视频| 中文字幕日韩经典| 亚洲片在线观看| 在线观看网站免费入口在线观看国内| 亚洲在线免费看| 99成人超碰| 亚欧美在线观看| 久久精品亚洲精品国产欧美| 日韩成人免费在线视频| 日韩欧美国产电影| www在线观看播放免费视频日本 | 国产福利一区二区精品秒拍| 免费在线观看污污视频| 久久99精品久久久| av资源在线免费观看| 欧美主播一区二区三区| 黄色av网站在线| 日本一区二区三区在线播放| 天美av一区二区三区久久| 青青艹视频在线| 99re免费视频精品全部| 五月天综合激情| 亚洲国内精品在线| 蜜桃视频www网站在线观看| 国产精品夜夜夜一区二区三区尤| 欧美精选一区| 亚洲图片欧美另类| 婷婷夜色潮精品综合在线| 人妻中文字幕一区| 午夜精品视频在线| 偷拍精品福利视频导航| 免费日韩视频在线观看| 久久久久88色偷偷免费| 成人免费一级片| 色噜噜狠狠狠综合曰曰曰| 亚洲成a人片777777久久| 在线成人av电影| 国产在线观看一区二区 | 色婷婷综合五月| 电影在线一区| 91久久久久久久久| 国产精品大片| 日本xxxx裸体xxxx| 国产日韩一级二级三级| 免费视频网站在线观看入口| 在线性视频日韩欧美| 祥仔av免费一区二区三区四区| 经典三级在线视频| 99久久久免费精品国产一区二区| av资源免费观看| 中文字幕av一区二区三区谷原希美| 国产一区二区色噜噜| 欧美在线观看视频免费| 99精品久久免费看蜜臀剧情介绍| 中文字幕一区二区人妻视频| 久久久av电影| 精品丝袜久久| 中文字幕国内自拍| 一区二区在线观看视频在线观看| 天堂中文在线观看视频| 国产精品老牛影院在线观看| 欧美成人嫩草网站| 国产老熟女伦老熟妇露脸| 欧美色窝79yyyycom| 暖暖在线中文免费日本| 欧美日韩最好看的视频| 狠狠色丁香婷婷综合| 日韩欧美不卡视频| 最新中文字幕亚洲| 久久狠狠久久| 五月天激情播播| 欧美日韩国产专区| 黄色网页在线免费看| 久久av免费观看| 狠狠色伊人亚洲综合成人| 中文字幕在线字幕中文| 色妞色视频一区二区三区四区| 黑人久久a级毛片免费观看| xxxx一级片| 激情成人中文字幕|