Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 久久国产精品久久,国产激情视频在线观看首页,中国大乳久久

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          網(wǎng)絡(luò)爬蟲知識 day02

          網(wǎng)絡(luò)爬蟲知識 day02

          .5 連接池

          如果每次請求都要創(chuàng)建HttpClient,會有頻繁創(chuàng)建和銷毀的問題,可以使用連接池來解決這個問題。


          2.6 請求參數(shù)

          有時候因為網(wǎng)絡(luò),或者目標(biāo)服務(wù)器的原因,請求需要更長的時間才能完成,我們需要自定義相關(guān)時間


          三、Jsoup

          我們抓取到頁面之后,還需要對頁面進(jìn)行解析。可以使用字符串處理工具解析頁面,也可以使用正則表達(dá)式,但是這些方法都會帶來很大的開發(fā)成本,所以我們需要使用一款專門解析html頁面的技術(shù)。


          3.1 jsoup介紹

          jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內(nèi)容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)。

          jsoup的主要功能如下:

          1. 從一個URL,文件或字符串中解析HTML;

          2. 使用DOM或CSS選擇器來查找、取出數(shù)據(jù);

          3. 可操作HTML元素、屬性、文本;

          在Maven工程中的Pom.xml中加入Jsoup依賴:

          <!--Jsoup-->

          <dependency>

          <groupId>org.jsoup</groupId>

          <artifactId>jsoup</artifactId>

          <version>1.10.3</version>

          </dependency>

          <!--測試-->

          <dependency>

          <groupId>junit</groupId>

          <artifactId>junit</artifactId>

          <version>4.12</version>

          </dependency>

          <!--工具-->

          <dependency>

          <groupId>org.apache.commons</groupId>

          <artifactId>commons-lang3</artifactId>

          <version>3.7</version>

          </dependency>

          <dependency>

          <groupId>commons-io</groupId>

          <artifactId>commons-io</artifactId>

          <version>2.6</version>

          </dependency>


          3.2 jsoup解析

          3.2.1 解析url

          Jsoup可以直接輸入url,它會發(fā)起請求并獲取數(shù)據(jù),封裝為Document對象

          注意:雖然使用Jsoup可以替代HttpClient直接發(fā)起請求解析數(shù)據(jù),但是往往不會這樣用,因為實(shí)際的開發(fā)過程中,需要使用到多線程,連接池,代理等等方式,而jsoup對這些的支持并不是很好,所以我們一般把jsoup僅僅作為Html解析工具使用。


          3.2.2 解析字符串

          先準(zhǔn)備一個html文件

          Jsoup可以直接輸入字符串,并封裝為Document對象


          3.2.3 解析文件

          Jsoup可以直接解析文件,并封裝為Document對象


          3.2.4 使用dom方式遍歷文檔

          元素獲取

          1. 根據(jù)id查詢元素getElementById

          2. 根據(jù)標(biāo)簽獲取元素getElementsByTag

          3. 根據(jù)class獲取元素getElementsByClass

          4. 根據(jù)屬性獲取元素getElementsByAttribute


          //1、根據(jù)id查詢元素getElementById

          Element element=document.getElementById("city_bj");


          //2、根據(jù)標(biāo)簽獲取元素getElementsByTag

          element=document.getElementsByTag("title").first();


          //3、根據(jù)class獲取元素getElementsByClass

          element=document.getElementsByClass("s_name").last();


          //4、根據(jù)屬性獲取元素getElementsByAttribute

          element=document.getElementsByAttribute("abc").first();

          element=document.getElementsByAttributeValue("class","city_con").first();


          3.2.5 使用選擇器語法查找元素

          jsoup elements對象支持類似于CSS (或jquery)的選擇器語法,來實(shí)現(xiàn)非常強(qiáng)大和靈活的查找功能。這個select 方法在Document, Element,或Elements對象中都可以使用。且是上下文相關(guān)的,因此可實(shí)現(xiàn)指定元素的過濾,或者鏈?zhǔn)竭x擇訪問。

          Select方法將返回一個Elements集合,并提供一組方法來抽取和處理結(jié)果。


          3.2.6 Selector選擇器概述

          tagname: 通過標(biāo)簽查找元素,比如:span

          #id: 通過ID查找元素,比如:# city_bj

          .class: 通過class名稱查找元素,比如:.class_a

          [attribute]: 利用屬性查找元素,比如:[abc]

          [attr=value]: 利用屬性值來查找元素,比如:[class=s_name]


          3.2.7 Selector選擇器組合使用

          el#id: 元素+ID,比如: h3#city_bj

          el.class: 元素+class,比如: li.class_a

          el[attr]: 元素+屬性名,比如: span[abc]

          任意組合: 比如:span[abc].s_name

          ancestor child: 查找某個元素下子元素,比如:.city_con li 查找"city_con"下的所有l(wèi)i

          parent > child: 查找某個父元素下的直接子元素,比如:

          .city_con > ul > li 查找city_con第一級(直接子元素)的ul,再找所有ul下的第一級li

          parent > *: 查找某個父元素下所有直接子元素

          、需求:爬取http://caijing.bandao.cn/list.asp?cate=YW&page=1財經(jīng)要聞欄目下的新聞標(biāo)題、url、時間。

          2、實(shí)現(xiàn)




          Jsoup.connect("http://caijing.bandao.cn/list.asp?cate=YW&page=1")
          .timeout(5000)
          .get()
          .getElementsByClass("centerAllList")
          .fold(ArrayList<Map<String,String>>()){ acc, elements -> elements.getElementsByTag("li")
          .mapTo(acc){ mapOf( "text" to it.getElementsByTag("a").html(), "href" to it.getElementsByTag("a").attr("href"), "date" to it.getElementsByClass("date").html()
          ) } }.forEach(::println)

          3、分析

          1)首先獲取頁面上的centerAllList類,新聞數(shù)據(jù)都在這里面

          2)在centerAllList類下,一對li標(biāo)簽代表一條新聞信息

          3)我們看到,acc和elements參數(shù)被傳進(jìn)函數(shù)中,其中acc表示最后要返回的那個總的List;而elements表示centerAllList的List。我們把此List遍歷,每一個子元素都代表一個centerAllList。接著我們獲取centerAllList下所有的li,這樣我們就能得到由li組成的List。

          4)現(xiàn)在我們已經(jīng)獲取到所有的li了,接下來我們把li轉(zhuǎn)為Map,一個Map代表一條新聞,所以我們最后需要的對象是由Map組成的List。其中acc代表最后要返回的List,而it代表每一個li。我們用mapTo把li轉(zhuǎn)為Map,并將其存入到acc中,此時我們就得到了由Map組成的List了。

          科時,畢業(yè)論文需要不少網(wǎng)絡(luò)上用戶的問答數(shù)據(jù)。那時,我還沒有搞過網(wǎng)絡(luò)爬蟲,只能利用關(guān)鍵詞搜索的方式,找到相關(guān)數(shù)據(jù),然后一條一條復(fù)制。我也覺得這樣很傻,但不得不承認(rèn)這確實(shí)我最初的操作方式,很艱難,累的手疼。

          后來,讀研究生時,做項目的同時還要搞科研。項目和科研,都需要采集大量的網(wǎng)絡(luò)數(shù)據(jù)。領(lǐng)頭做項目的師兄,指定了一系列國內(nèi)外網(wǎng)站,并把采集任務(wù)分配給我。對于當(dāng)時啥都不咋會的我,內(nèi)心“啥?這該咋弄啊?這咋弄啊?……”可是沒辦法,即便瑟瑟發(fā)抖,硬著頭皮還是要上。


          好在有著師兄指點(diǎn),讓我去學(xué)習(xí)網(wǎng)路爬蟲,說網(wǎng)路爬蟲可以搞定“我想要的數(shù)據(jù)”。為了“活”下去,我決定放手一搏,但在學(xué)習(xí)準(zhǔn)備階段我就遇到了我的第一個“爬蟲難題”。


          決定要用網(wǎng)絡(luò)爬蟲去采集數(shù)據(jù),面臨一個選擇就是:是用Java還是Python寫網(wǎng)絡(luò)爬蟲呢?對于一個新手,我翻閱了網(wǎng)上各種對比的帖子,各有各的觀點(diǎn),其中不少說Python上手容易,寫起來方便。但最終我還是選擇了Java,有以下幾點(diǎn)原因:

          1. Java火了很多年,而且依舊很火,其生態(tài)也比較完善。目前,很多大公司的系統(tǒng)皆采用Java設(shè)計,足以說明其強(qiáng)大之處。把Java學(xué)好了,足夠讓我找一份不錯的工作,即入職大廠。

          2. Java嚴(yán)謹(jǐn)規(guī)范,對于大型工程、大型程序,如果不規(guī)范不嚴(yán)謹(jǐn)維護(hù)豈不容易出問題。

          3. 對網(wǎng)絡(luò)爬蟲而言,JAVA中也有很多簡單易用的類庫(如Jsoup、Httpclient等),同時還存在不少易于二次開發(fā)的網(wǎng)絡(luò)爬蟲框架(Crawler4J、WebMagic等)。

          4. 曾在一個帖子中看到,“世界上99%的人都會選擇一條容易走的大路,因為人都喜歡安逸。這也是人的大腦的思維方式?jīng)Q定的,因為大腦的使命是為了讓你生存,而不是求知。但成功是總是屬于那1%的人,這類人是堅持讓大腦做不愿意做的事的人——求知”。哎,這在我看來,還真有一定的道理。如果勵志想成為一名真正的程序員,建議先學(xué)習(xí)Java。在此基礎(chǔ)上,如果你對Python感興趣,也是可以快速上手的。


          1 網(wǎng)絡(luò)爬蟲流程

          學(xué)習(xí)網(wǎng)絡(luò)爬蟲之前,先看了普通網(wǎng)絡(luò)爬蟲大致流程,如下圖所示:

          主要包括5個步驟:

          1. 選取部分種子URL(或初始URL),將其放入待采集的隊列中。如在Java中,可以放入List、LinkedList以及Queue中。

          2. 判斷URL隊列是否為空,如果為空則結(jié)束程序的執(zhí)行,否則執(zhí)行步驟3。

          3. 從待采集的URL隊列中取出一個URL,獲取URL對應(yīng)的網(wǎng)頁內(nèi)容。在此步驟需要使用HTTP響應(yīng)狀態(tài)碼(如200和403等)判斷是否成功獲取到了數(shù)據(jù),如響應(yīng)成功則執(zhí)行解析操作;如響應(yīng)不成功,則將其重新放入待采集URL隊列(注意這里需要過濾掉無效URL)。

          4. 針對響應(yīng)成功后獲取到的數(shù)據(jù),執(zhí)行頁面解析操作。此步驟根據(jù)用戶需求獲取網(wǎng)頁內(nèi)容中的部分字段,如汽車論壇帖子的id、標(biāo)題和發(fā)表時間等。

          5. 針對步驟4解析的數(shù)據(jù),執(zhí)行數(shù)據(jù)存儲操作。


          2 需要掌握的Java基礎(chǔ)知識

          在使用Java構(gòu)建網(wǎng)絡(luò)爬蟲時,需要掌握很多Java方面的基礎(chǔ)知識。例如,Java中基本的數(shù)據(jù)類型、Java中的數(shù)組操作、判斷語句的使用、集合操作、對象和類的使用、String類的使用、日期和時間的處理、正則表達(dá)式的使用、Maven工程的創(chuàng)建、多線程操作、日志的使用等。

          看著知識點(diǎn)很多,但如果將其放入到具體的網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)項目中去學(xué)習(xí),會發(fā)現(xiàn)很簡單。下面,我舉兩個例子。

          在網(wǎng)絡(luò)爬蟲中,我們經(jīng)常需要將待采集的URL放到集合中,然后循環(huán)遍歷集合中的每個URL去采集數(shù)據(jù)。比如,我們使用Queue集合操作:

          Queue<String> urlQueue=new LinkedList<String>();
              //添加要采集的URL
              urlQueue.offer("https://ccm.net/download/?page=1");
              urlQueue.offer("https://ccm.net/download/?page=2");
              urlQueue.offer("https://ccm.net/download/?page=3");
              boolean t=true;
              while (t) {
                //如果隊列為空,循環(huán)結(jié)束
                if( urlQueue.isEmpty() ){
                  t=false;
                }else {
                  //取出每個URL
                  String url=urlQueue.poll();
                  //獲取HTML
                  String getHtml=...;
                  //判斷是否成功請求到HTML
                  if (成功請求到HTML) {
                    //解析數(shù)據(jù)
                    ...;
                  }else { //如果網(wǎng)頁存在但沒有請求到數(shù)據(jù),重新添加到隊列中
                    urlQueue.offer(url);
                  }
                }
              }

          另外,在采集數(shù)據(jù)時,不同網(wǎng)站的時間使用格式可能不同。而不同的時間格式,會為數(shù)據(jù)存儲以及數(shù)據(jù)處理帶來一定的困難。例如,下圖為某汽車論壇中時間使用的格式,即“yyyy-MM-dd”和“yyyy-MM-dd HH:mm”兩種類型。

          下圖為某新聞網(wǎng)站中的時間使用格式“yyyy-MM-dd HH:mm:ss”。

          再如,藝術(shù)品網(wǎng)站deviantart的時間使用的是UNIX時間戳的形式。

          針對汽車論壇中的“yyyy-MM-dd”和“yyyy-MM-dd HH:mm”格式,可以統(tǒng)一轉(zhuǎn)化成“yyyy-MM-dd HH:mm:ss”格式,以方便數(shù)據(jù)存儲以及后期數(shù)據(jù)處理。此時,可以寫個方法將將字符串類型的時間標(biāo)準(zhǔn)化成指定格式的時間。如下程序:

          import java.text.ParseException;
          import java.text.SimpleDateFormat;
          import java.util.Date;
          public class TimeTest {
            public static void main(String[] args) {
              System.out.println(parseStringTime("2016-05-19 19:17",
                  "yyyy-MM-dd HH:mm","yyyy-MM-dd HH:mm:ss"));
              System.out.println(parseStringTime("2018-06-19",
                  "yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"));
            }
            /**
             * 字符型時間格式標(biāo)準(zhǔn)化方法
             * @param inputTime(輸入的字符串時間),inputTimeFormat(輸入的格式),outTimeFormat(輸出的格式).
             * @return 轉(zhuǎn)化后的時間(字符串)
             */
            public static String parseStringTime(String inputTime,String inputTimeFormat,
                String outTimeFormat){
              String outputDate=null;
              try {
                //日期格式化及解析時間
                Date inputDate=new SimpleDateFormat(inputTimeFormat).parse(inputTime);
                //轉(zhuǎn)化成新的形式的字符串
                outputDate=new SimpleDateFormat(outTimeFormat).format(inputDate);
              } catch (ParseException e) {
                e.printStackTrace();
              }
              return outputDate;
            }
          }

          針對UNIX時間戳,可以通過如下方法處理:

          //將unix時間戳轉(zhuǎn)化成指定形式的時間
            public static String TimeStampToDate(String timestampString, String formats) {
              Long timestamp=Long.parseLong(timestampString) * 1000;
              String date=new SimpleDateFormat(formats,
                  Locale.CHINA).format(new Date(timestamp));
              return date;
            }

          3 HTTP協(xié)議基礎(chǔ)與網(wǎng)絡(luò)抓包

          做網(wǎng)絡(luò)爬蟲,還需要了解HTTP協(xié)議相關(guān)的內(nèi)容,即要清楚數(shù)據(jù)是怎么在服務(wù)器和客戶端傳輸?shù)摹?/p>

          具體需要了解的內(nèi)容包括:

          1. URL的組成:如協(xié)議、域名、端口、路徑、參數(shù)等。

          2. 報文:分為請求報文和響應(yīng)報文。其中,請求報文包括請求方法、請求的URL、版本協(xié)議以及請求頭信息。響應(yīng)報文包括請求協(xié)議、響應(yīng)狀態(tài)碼、響應(yīng)頭信息和響應(yīng)內(nèi)容。響應(yīng)報文包括請求協(xié)議、響應(yīng)狀態(tài)碼、響應(yīng)頭信息和響應(yīng)內(nèi)容。

          3. HTTP請求方法:在客戶端向服務(wù)器發(fā)送請求時,需要確定使用的請求方法(也稱為動作)。請求方法表明了對URL指定資源的操作方式,服務(wù)器會根據(jù)不同的請求方法做不同的響應(yīng)。網(wǎng)絡(luò)爬蟲中常用的兩種請求方法為GET和POST。

          4. HTTP狀態(tài)碼:HTTP狀態(tài)碼由3位數(shù)字組成,描述了客戶端向服務(wù)器請求過程中發(fā)生的狀況。常使用200判斷網(wǎng)絡(luò)是否請求成功。

          5. HTTP信息頭:HTTP信息頭,也稱頭字段或首部,是構(gòu)成HTTP報文的要素之一,起到傳遞額外重要信息的作用。在網(wǎng)絡(luò)爬蟲中,我們常使用多個User-Agent和多個referer等請求頭來模擬人的行為,進(jìn)而繞過一些網(wǎng)站的防爬措施。

          6. HTTP響應(yīng)正文:HTTP響應(yīng)正文(或HTTP響應(yīng)實(shí)體主體),指服務(wù)器返回的一定格式的數(shù)據(jù)。網(wǎng)絡(luò)爬蟲中常遇到需要解析的幾種數(shù)據(jù)包括:HTML/XML/JSON。

          在開發(fā)網(wǎng)絡(luò)爬蟲時,給定 URL,開發(fā)者必須清楚客戶端是怎么向服務(wù)器發(fā)送請求的,以及客戶端請求后服務(wù)器返回的數(shù)據(jù)是什么。只有了解這些內(nèi)容,開發(fā)者才能在程序中拼接URL,針對服務(wù)返回的數(shù)據(jù)類型設(shè)計具體的解析策略。因此,網(wǎng)絡(luò)抓包是實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲必不可少的技能之一,也是網(wǎng)絡(luò)爬蟲開發(fā)的起點(diǎn)。


          本文作者錢洋博士所著新書《網(wǎng)絡(luò)數(shù)據(jù)采集技術(shù):Java網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)》現(xiàn)已上市。系統(tǒng)地介紹了網(wǎng)絡(luò)爬蟲的理論知識和基礎(chǔ)工具,并且選取典型網(wǎng)站,采用案例講解的方式介紹網(wǎng)絡(luò)爬蟲中涉及的問題,以增強(qiáng)大家的動手實(shí)踐能力。


          本書時候國內(nèi)少見的Java爬蟲寶典。與Python語言相比,使用Java語言進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)采集,具有采集效率更高、框架性能更好、敏捷易用等優(yōu)點(diǎn),而且針對大型搜索引擎系統(tǒng)的數(shù)據(jù)采集工作更多使用Java語言,故本書值得大家學(xué)習(xí)。

          (掃碼了解本書詳情)



          █ 關(guān) 于 作 者

          錢洋

          合肥工業(yè)大學(xué)管理科學(xué)與工程系博士、CSDN博客專家。作為技術(shù)人員參與過多個橫向、縱向?qū)W術(shù)課題,負(fù)責(zé)數(shù)據(jù)采集系統(tǒng)的設(shè)計與開發(fā)工作。在CSDN(博客名稱:HFUT_qianyang)上撰寫了多篇關(guān)于數(shù)據(jù)采集、自然語言處理、編程語言等領(lǐng)域的原創(chuàng)博客。

          姜元春

          合肥工業(yè)大學(xué)教授、博士生導(dǎo)師。長期從事電子商務(wù)、商務(wù)智能、數(shù)據(jù)采集與挖掘等方面的理論研究與教學(xué)工作。先后主持過國家自然科學(xué)基金優(yōu)秀青年科學(xué)基金項目、國家自然科學(xué)基金重大研究計劃培育項目、國家自然科學(xué)基金青年科學(xué)基金項目、教育部人文社科青年基金項目、阿里巴巴青年學(xué)者支持計劃、CCF-騰訊犀牛鳥基金項目等課題的研究工作。


          █ 大 咖 推 薦

          • 陳國青 / 清華大學(xué)教授、博士生導(dǎo)師
          • 程學(xué)旗 / 中國科學(xué)院計算技術(shù)研究所研究員、博士生導(dǎo)師
          • 卓訓(xùn)方 / 上海數(shù)據(jù)交易中心項目總監(jiān)
          • 劉業(yè)政 / 合肥工業(yè)大學(xué)教授博士生導(dǎo)師


          █ 本書內(nèi)容結(jié)構(gòu)

          第 1 ~3 章

          這3 章重點(diǎn)介紹與網(wǎng)絡(luò)爬蟲開發(fā)相關(guān)的基礎(chǔ)知識,其中包括網(wǎng)絡(luò)爬蟲的原理、Java 基礎(chǔ)知識和HTTP 協(xié)議等內(nèi)容。

          第 4~6 章

          這3 章分別從網(wǎng)頁內(nèi)容獲取、網(wǎng)頁內(nèi)容解析和網(wǎng)絡(luò)爬蟲數(shù)據(jù)存儲3 個方面介紹網(wǎng)絡(luò)爬蟲開發(fā)過程中所涉及的一系列技術(shù)。在這3 章中,涉及很多開源工具的使用,如Jsoup、HttpClient、HtmlCleaner、Fastjson、POI3 等。

          第 7 章

          本章利用具體的實(shí)戰(zhàn)案例,講解網(wǎng)絡(luò)爬蟲開發(fā)的流程。通過對本章的學(xué)習(xí),讀者可以輕松開發(fā)Java 網(wǎng)絡(luò)爬蟲。

          第 8 章

          針對一些復(fù)雜的頁面,如動態(tài)加載的頁面(執(zhí)行JavaScript 腳本),本章介紹了一款實(shí)用的工具——Selenium WebDriver。

          第 9 章

          本章重點(diǎn)介紹了3 種比較流行的Java 網(wǎng)絡(luò)爬蟲開源框架,即Crawler4j、WebCollector 和WebMagic。讀者可根據(jù)數(shù)據(jù)采集需求,自行開發(fā)支持多線程采集、斷點(diǎn)采集、代理切換等功能的網(wǎng)絡(luò)爬蟲項目。


          ? 博文菌●互動時間 ?

          Java、Python、Js、C、PHP、Shell、Ruby等等語言都可以實(shí)現(xiàn)爬蟲,你嘗試過哪種語言呢?歡迎在留言區(qū)與大家分享!


          主站蜘蛛池模板: 国产成人一区二区三区在线观看| 中文无码一区二区不卡αv | 国产美女精品一区二区三区| 亚洲国产欧美日韩精品一区二区三区 | 久久一区二区精品综合| 精品人妻无码一区二区三区蜜桃一 | 亚无码乱人伦一区二区| 亚洲国产日韩一区高清在线 | 一区二区传媒有限公司| 久久精品国产第一区二区三区 | 一区二区三区日韩| 免费一区二区三区| 成人免费视频一区二区| 福利视频一区二区牛牛| 国产激情一区二区三区在线观看 | ...91久久精品一区二区三区| 国产色情一区二区三区在线播放 | 久热国产精品视频一区二区三区| 3d动漫精品啪啪一区二区免费 | 鲁丝片一区二区三区免费| 国产精品一区在线观看你懂的| 亚洲第一区精品观看| 国产高清在线精品一区二区| 成人国产一区二区三区| 国产一区二区三区免费| 亚洲国产一区二区a毛片| 精品无码日韩一区二区三区不卡| 真实国产乱子伦精品一区二区三区| 一区二区免费电影| 中文字幕日韩人妻不卡一区| 波多野结衣的AV一区二区三区 | 麻豆精品人妻一区二区三区蜜桃 | 制服丝袜一区在线| 亚洲Av无码国产一区二区| 日本免费一区尤物| 久久久99精品一区二区| 久久99国产精一区二区三区| 久久精品亚洲一区二区三区浴池| 亚洲视频免费一区| 男人免费视频一区二区在线观看| 国产精品 一区 在线|