久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

springBoot+webMagic實現網站爬蟲的實例代碼

瀏覽:2日期:2023-05-17 16:18:09

前端時間公司項目需要抓取各類數據,py玩的不6,只好研究Java爬蟲方案,做一個總結。

開發環境:

springBoot 2.2.6、jdk1.8。

1、導入依賴

<!--WebMagic核心包--> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.3</version> <!--這里可以去掉WebMagic自帶的日志(因為打印的很多。。。。)--><!-- <exclusions>--><!-- <exclusion>--><!-- <groupId>org.slf4j</groupId>--><!-- <artifactId>slf4j-log4j12</artifactId>--><!-- </exclusion>--><!-- </exclusions>--> </dependency> <!--WebMagic擴展--> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-extension</artifactId> <version>0.7.3</version> </dependency> <!--WebMagic對布隆過濾器的支持--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>16.0</version> </dependency>

話不多說,直接上代碼。

基礎案例

下面代碼說明以一個類似列表的頁面為例

package com.crawler.project.proTask;import com.alibaba.fastjson.JSONObject;import org.springframework.scheduling.annotation.Scheduled;import us.codecraft.webmagic.Page;import us.codecraft.webmagic.Site;import us.codecraft.webmagic.Spider;import us.codecraft.webmagic.processor.PageProcessor;import us.codecraft.webmagic.scheduler.BloomFilterDuplicateRemover;import us.codecraft.webmagic.scheduler.QueueScheduler;import us.codecraft.webmagic.selector.Selectable;import java.util.List;public class TaskProcessor implements PageProcessor { /* * 此方法為爬蟲業務實現 * */ @Override public void process(Page page) { //1、爬蟲任務獲取到一個page 解析page上的列表 List<Selectable> list = page.getHtml().css('css selector').nodes(); if (list.size() > 0){//說明為列表頁面、需要解析列表中每個元素的鏈接,存入待獲取page隊列中 for (Selectable selectable : list) { //遍歷集合,將每個元素鏈接存入待獲取page隊列中 page.addTargetRequest(selectable.links().toString()); } //同時將下一頁的url存入隊列中 page.addTargetRequest('下一頁的url'); }else { //此時為列表中單個元素對應的詳情頁 //在自定義方法中處理詳細頁,獲取需要的數據進行處理。 handle(page); } } private void handle(Page page) { //例如 處理后的數據為一個JSONObject對象 JSONObject tmp = new JSONObject(); //將這個tmp交由自定義的TaskPipline類處理,若未自定義Pipline并設置到Spider參數中,框架會默認將tmp打印到控制臺。 page.putField('obj',tmp); } /* * 此方法為配置爬蟲過程的一些參數 * */ private Site site = Site.me() .setCharset('UTF-8') .setTimeOut(60 * 1000) .setRetrySleepTime(60 * 1000) .setCycleRetryTimes(5); @Override public Site getSite() { return site; } /* 設置定時任務,執行爬蟲任務 * */ @Scheduled(initialDelay = 1 * 1000,fixedDelay = 2 * 1000) public void process(){ System.out.println('開始執行爬蟲抓取任務'); Spider.create(new TaskProcessor())//注意這里的類名要和當前類名對應 .addUrl('起始頁url') .addPipeline(new TaskPipeline()) //此處課自定義 數據處理類 (在handle()方法中有); .setScheduler(new QueueScheduler().setDuplicateRemover(new BloomFilterDuplicateRemover(100000))) .thread(3)//此處設置線程數量(不宜過多,最好和列表頁中列表元素數量一致) .run(); }}

package com.crawler.project.proTask;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import us.codecraft.webmagic.ResultItems;import us.codecraft.webmagic.Task;import us.codecraft.webmagic.pipeline.Pipeline;public class TaskPipeline implements Pipeline { @Override public void process(ResultItems resultItems, Task task) { if (resultItems.getAll() .size() > 0){ Object obj = resultItems.getAll().get('obj'); JSONObject jsonObject = JSON.parseObject(obj.toString()); //獲取到JSONObject對象下面可進行自定義的業務處理。 } }}

特殊情況一

需根據鏈接下載圖片或文件

eg:在上面說到的詳情頁中含有iframe。

1、首先獲取iframe的src

//獲得iframe的src (這里要注意獲得的src是絕對路徑還是相對路徑,相對路徑需要拼接主站點url)String src = html.css('css selector', 'src').toString();//采用jsoup解析Document document = Jsoup.parse(new URL(src),1000);//獲得需要的元素Element ele = document.select('css selector').last();//獲取需要下載的文件的鏈接String downUrl = ele.attr('href');//根據鏈接下載文件 返回一個文件的名稱String fileName = downloadFile(downUrl);

//通過url下載文件public String downloadFile(String fileUrl) throws FileNotFoundException{ try{ URL httpUrl = new URL(fileUrl); String fileName = UUID.randomUUID().toString() + '.mp3'; File file = new File(this.STATIC_FILEPATH + fileName); System.out.println('============保存文件方法被調用==============='); FileUtils.copyURLToFile(httpUrl,file); return fileName; }catch (Exception e){ e.printStackTrace(); return null; }}

特殊情況二

有些https站點 無法直接使用WebMagic默認的下載器下載,此時我們可以根據站點ssl類型修改下載器。

在項目中創建一個包用于存放自定義(修改)的下載器類

(!!!摘自webMagic框架中HttpClientDownloader,基于此類修改!!!)

/*此方法中需要傳入一個自定義的生成器(HttpClientGenerator)*/package com.crawler.project.spider_download;import org.apache.commons.io.IOUtils;import org.apache.http.HttpResponse;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import us.codecraft.webmagic.Page;import us.codecraft.webmagic.Request;import us.codecraft.webmagic.Site;import us.codecraft.webmagic.Task;import us.codecraft.webmagic.downloader.AbstractDownloader;import us.codecraft.webmagic.downloader.HttpClientRequestContext;import us.codecraft.webmagic.downloader.HttpUriRequestConverter;import us.codecraft.webmagic.proxy.Proxy;import us.codecraft.webmagic.proxy.ProxyProvider;import us.codecraft.webmagic.selector.PlainText;import us.codecraft.webmagic.utils.CharsetUtils;import us.codecraft.webmagic.utils.HttpClientUtils;import java.io.IOException;import java.nio.charset.Charset;import java.util.HashMap;import java.util.Map;/** * The http downloader based on HttpClient. * * @author code4crafter@gmail.com <br> * @since 0.1.0 */public class HttpClientDownloader extends AbstractDownloader { private Logger logger = LoggerFactory.getLogger(getClass()); private final Map<String, CloseableHttpClient> httpClients = new HashMap<String, CloseableHttpClient>(); //自定義的生成器(HttpClientGenerator)注意導入的應為自定義的HttpClientGenerator類,而不是WebMagic依賴中的HttpClientGenerator類。 private HttpClientGenerator httpClientGenerator = new HttpClientGenerator(); private HttpUriRequestConverter httpUriRequestConverter = new HttpUriRequestConverter(); private ProxyProvider proxyProvider; private boolean responseHeader = true; public void setHttpUriRequestConverter(HttpUriRequestConverter httpUriRequestConverter) { this.httpUriRequestConverter = httpUriRequestConverter; } public void setProxyProvider(ProxyProvider proxyProvider) { this.proxyProvider = proxyProvider; } private CloseableHttpClient getHttpClient(Site site) { if (site == null) { return httpClientGenerator.getClient(null); } String domain = site.getDomain(); CloseableHttpClient httpClient = httpClients.get(domain); if (httpClient == null) { synchronized (this) { httpClient = httpClients.get(domain); if (httpClient == null) { httpClient = httpClientGenerator.getClient(site); httpClients.put(domain, httpClient); } } } return httpClient; } @Override public Page download(Request request, Task task) { if (task == null || task.getSite() == null) { throw new NullPointerException('task or site can not be null'); } CloseableHttpResponse httpResponse = null; CloseableHttpClient httpClient = getHttpClient(task.getSite()); Proxy proxy = proxyProvider != null ? proxyProvider.getProxy(task) : null; HttpClientRequestContext requestContext = httpUriRequestConverter.convert(request, task.getSite(), proxy); Page page = Page.fail(); try { httpResponse = httpClient.execute(requestContext.getHttpUriRequest(), requestContext.getHttpClientContext()); page = handleResponse(request, request.getCharset() != null ? request.getCharset() : task.getSite().getCharset(), httpResponse, task); onSuccess(request); logger.info('downloading page success {}', request.getUrl()); return page; } catch (IOException e) { logger.warn('download page {} error', request.getUrl(), e); onError(request); return page; } finally { if (httpResponse != null) { //ensure the connection is released back to pool EntityUtils.consumeQuietly(httpResponse.getEntity()); } if (proxyProvider != null && proxy != null) { proxyProvider.returnProxy(proxy, page, task); } } } @Override public void setThread(int thread) { httpClientGenerator.setPoolSize(thread); } protected Page handleResponse(Request request, String charset, HttpResponse httpResponse, Task task) throws IOException { byte[] bytes = IOUtils.toByteArray(httpResponse.getEntity().getContent()); String contentType = httpResponse.getEntity().getContentType() == null ? '' : httpResponse.getEntity().getContentType().getValue(); Page page = new Page(); page.setBytes(bytes); if (!request.isBinaryContent()){ if (charset == null) { charset = getHtmlCharset(contentType, bytes); } page.setCharset(charset); page.setRawText(new String(bytes, charset)); } page.setUrl(new PlainText(request.getUrl())); page.setRequest(request); page.setStatusCode(httpResponse.getStatusLine().getStatusCode()); page.setDownloadSuccess(true); if (responseHeader) { page.setHeaders(HttpClientUtils.convertHeaders(httpResponse.getAllHeaders())); } return page; } private String getHtmlCharset(String contentType, byte[] contentBytes) throws IOException { String charset = CharsetUtils.detectCharset(contentType, contentBytes); if (charset == null) { charset = Charset.defaultCharset().name(); logger.warn('Charset autodetect failed, use {} as charset. Please specify charset in Site.setCharset()', Charset.defaultCharset()); } return charset; }}

然后在自定義的HttpClientGenerator類中修改有關ssl的參數

(!!!摘自webMagic框架中HttpClientGenerator,基于此類修改!!!)

/*自定義的HttpClientGenerator生成器*/package com.sealion_crawler.project.spider_download;import org.apache.http.HttpException;import org.apache.http.HttpRequest;import org.apache.http.HttpRequestInterceptor;import org.apache.http.client.CookieStore;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import org.apache.http.config.SocketConfig;import org.apache.http.conn.socket.ConnectionSocketFactory;import org.apache.http.conn.socket.PlainConnectionSocketFactory;import org.apache.http.conn.ssl.DefaultHostnameVerifier;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.impl.client.*;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.impl.cookie.BasicClientCookie;import org.apache.http.protocol.HttpContext;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import us.codecraft.webmagic.Site;import us.codecraft.webmagic.downloader.CustomRedirectStrategy;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import java.io.IOException;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.Map;/** * @author code4crafter@gmail.com <br> * @since 0.4.0 */public class HttpClientGenerator { private transient Logger logger = LoggerFactory.getLogger(getClass()); private PoolingHttpClientConnectionManager connectionManager; public HttpClientGenerator() { Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create() .register('http', PlainConnectionSocketFactory.INSTANCE) .register('https', buildSSLConnectionSocketFactory()) .build(); connectionManager = new PoolingHttpClientConnectionManager(reg); connectionManager.setDefaultMaxPerRoute(100); } /* 此方法中設置ssl有關參數。 */ private SSLConnectionSocketFactory buildSSLConnectionSocketFactory() { try { return new SSLConnectionSocketFactory(createIgnoreVerifySSL(), new String[]{'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2'}, null, new DefaultHostnameVerifier()); // 優先繞過安全證書 } catch (KeyManagementException e) { logger.error('ssl connection fail', e); } catch (NoSuchAlgorithmException e) { logger.error('ssl connection fail', e); } return SSLConnectionSocketFactory.getSocketFactory(); } private SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException { // 實現一個X509TrustManager接口,用于繞過驗證,不用修改里面的方法 X509TrustManager trustManager = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return null; } }; /* 下面為當前框架默認參數 SSLContext sc = SSLContext.getInstance('SSLv3'); 可修改為需要的ssl參數類型 */ SSLContext sc = SSLContext.getInstance('TLS'); sc.init(null, new TrustManager[] { trustManager }, null); return sc; } public HttpClientGenerator setPoolSize(int poolSize) { connectionManager.setMaxTotal(poolSize); return this; } public CloseableHttpClient getClient(Site site) { return generateClient(site); } private CloseableHttpClient generateClient(Site site) { HttpClientBuilder httpClientBuilder = HttpClients.custom(); httpClientBuilder.setConnectionManager(connectionManager); if (site.getUserAgent() != null) { httpClientBuilder.setUserAgent(site.getUserAgent()); } else { httpClientBuilder.setUserAgent(''); } if (site.isUseGzip()) { httpClientBuilder.addInterceptorFirst(new HttpRequestInterceptor() { public void process( final HttpRequest request, final HttpContext context) throws HttpException, IOException { if (!request.containsHeader('Accept-Encoding')) { request.addHeader('Accept-Encoding', 'gzip'); } } }); } //解決post/redirect/post 302跳轉問題 httpClientBuilder.setRedirectStrategy(new CustomRedirectStrategy()); SocketConfig.Builder socketConfigBuilder = SocketConfig.custom(); socketConfigBuilder.setSoKeepAlive(true).setTcpNoDelay(true); socketConfigBuilder.setSoTimeout(site.getTimeOut()); SocketConfig socketConfig = socketConfigBuilder.build(); httpClientBuilder.setDefaultSocketConfig(socketConfig); connectionManager.setDefaultSocketConfig(socketConfig); httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(site.getRetryTimes(), true)); generateCookie(httpClientBuilder, site); return httpClientBuilder.build(); } private void generateCookie(HttpClientBuilder httpClientBuilder, Site site) { if (site.isDisableCookieManagement()) { httpClientBuilder.disableCookieManagement(); return; } CookieStore cookieStore = new BasicCookieStore(); for (Map.Entry<String, String> cookieEntry : site.getCookies().entrySet()) { BasicClientCookie cookie = new BasicClientCookie(cookieEntry.getKey(), cookieEntry.getValue()); cookie.setDomain(site.getDomain()); cookieStore.addCookie(cookie); } for (Map.Entry<String, Map<String, String>> domainEntry : site.getAllCookies().entrySet()) { for (Map.Entry<String, String> cookieEntry : domainEntry.getValue().entrySet()) { BasicClientCookie cookie = new BasicClientCookie(cookieEntry.getKey(), cookieEntry.getValue()); cookie.setDomain(domainEntry.getKey()); cookieStore.addCookie(cookie); } } httpClientBuilder.setDefaultCookieStore(cookieStore); }}

好了,到這里 基于WebMagic框架 實現爬蟲、包括jsoup的使用總結就到這里的。

到此這篇關于springBoot+webMagic實現網站爬蟲的實例代碼的文章就介紹到這了,更多相關springBoot webMagic 爬蟲內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 激情久久av一区av二区av三区 | 亚洲一区免费视频 | 久久三区 | 国产精品日韩专区 | 天天玩天天操天天射 | 亚洲成人一区 | 亚洲一区二区视频在线观看 | 免费观看一级淫片 | 久久这里只有精品免费 | 开操网 | 国产精品久久久久9999鸭 | 高清av网站| 国产xvideos免费视频播放 | 综合一区二区三区 | 一区二区三区国产 | 91精品久久久久久久久久久 | 亚洲精品久久久久久国产精华液 | 日本黄色大片免费观看 | 成人国产精品色哟哟 | 在线中文字幕视频 | 中文字幕精品视频在线观看 | 久久久久久久国产精品 | 国产自产才c区 | 久久草在线视频 | 欧美午夜在线观看 | 在线播放亚洲 | 在线视频亚洲 | 狠狠撸在线视频 | 日韩视频三区 | 亚州成人| 美女主播精品视频一二三四 | 国产精品欧美一区二区三区 | 欧美成人精品在线 | av黄色一级| 久久久久久久成人 | 久久国产美女 | 欧美日韩亚洲一区 | 成人日韩 | 免费黄色小片 | 亚洲中国字幕 | www.久久久 | 欧美日韩一区二区视频在线观看 | 中文字幕一区二区三区四区 | 手机看片169 | 91av视频在线观看 | m豆传媒在线链接观看 | 日日鲁鲁 | 在线免费毛片 | 国产综合精品视频 | 欧美电影一区 | 国产日韩视频在线播放 | 日本成人高清视频 | av免费网站| 久久成人精品 | 免费成人在线网站 | 91免费观看 | 亚洲一区二区视频在线观看 | 免费成人毛片 | 看免费的毛片 | 九色精品 | av天空| 日本免费视频在线观看 | 国产一级免费 | 日韩电影免费在线观看中文字幕 | 中文字幕亚洲一区二区三区 | 亚洲成人av | 欧美精品一区二区三区免费视频 | 91精品久久 | 自拍偷拍亚洲欧洲 | 天堂一区 | 久久国产精品免费一区二区三区 | 欧美精品在线看 | 久久三区 | 婷婷国产在线观看 | 91精品国产综合久久久久久丝袜 | 成人免费视频 | 欧美激情精品久久久久久 | 正在播放亚洲 | 日韩视频在线免费观看 | 日韩综合网 | 日韩精品一区在线 | 一本岛在线视频 | 欧美大片在线看免费观看 | 99爱视频 | 91久久久精品视频 | 亚洲一区二区三区久久久 | 久久综合久久综合久久综合 | 日韩一区二区在线观看 | 91国在线高清视频 | 国产精品91久久久久 | 一区二区在线看 | 国产三级久久久久 | 久久久999精品视频 99国产精品久久久久久久 | 日韩成人一区二区 | 日日操视频 | 亚洲高清不卡视频 | 九九免费精品视频 | 免费观看在线午夜影视 | 国产精品毛片一区二区三区 | 国产亚洲欧美一区 | 久久网页 | 九九热欧美 | 国产高清精品一区二区三区 | 日日摸夜夜添夜夜添亚洲女人 | 在线免费黄色 | 日韩在线播放一区 | 91精品久久久久久久久久久 | 成人在线观 | 男人av网| 久久九 | 天天操,夜夜操 | av一级在线观看 | 真实国产露脸乱 | 91精品欧美久久久久久动漫 | 久久精品视频在线播放 | 国产精品中文字幕在线 | 99爱爱视频 | 成人亚洲视频在线观看 | 国产精品一区二 | 国产偷自视频区视频 | av一区二区三区四区 | 欧美一区成人 | 一本大道综合伊人精品热热 | 国产在线色 | 精品人人| 久久亚洲国产视频 | 免费毛片一区二区三区久久久 | 亚洲国产精品成人 | 中文字幕精品一区久久久久 | 欧美日本亚洲 | porn一区| 成人精品一区二区三区中文字幕 | 午夜影院在线 | 无码一区二区三区视频 | 天堂精品久久 | 国产午夜精品一区二区三区 | 北条麻妃国产九九九精品小说 | av大片网 | 国产成人精品一区二 | 亚洲精品成人 | 最新av中文字幕 | 成人免费视频网站在线观看 | 免费观看a视频 | 久久69精品久久久久久久电影好 | 亚洲视频在线免费观看 | 亚洲国产精品一区二区第一页 | 久久久精品日本 | 国产欧美一区二区视频 | 国产欧美精品一区二区三区四区 | 国产人成精品一区二区三 | 在线免费av观看 | 亚洲 自拍 另类 欧美 丝袜 | 亚洲免费视频大全 | 中文字幕在线一区 | 欧美视频区| 午夜激情免费看 | 国产成在线观看免费视频 | 成人午夜精品一区二区三区 | 亚洲精品国品乱码久久久久 | 国内精品一区二区 | 午夜激情视频在线观看 | 久久久久久久久久久久福利 | 国内精品亚洲 | 999久久久国产999久久久 | 久久人人av | 久久99视频 | 天天干天天摸 | 国产成人精品久久二区二区91 | 91久色| 天天综合天天色 | jlzzjlzz国产精品久久 | 91中文在线观看 | 欧美一区亚洲二区 | 亚洲精品aaa | 欧美精品欧美极品欧美激情 | 久久人爽| 日韩精品在线一区 | 一区二区精品 | 插插射啊爱视频日a级 | 久久亚洲天堂 | 91在线资源 | 美女天堂网| 久久精品国产一区 | 成人在线免费小视频 | 在线观看理论电影 | 特级黄一级播放 | 久久久久久久久一区二区三区 | 国产在线激情 | 久久国产一区二区 | 天堂在线中文 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 国产福利在线视频 | 一区二区中文 | 凹凸日日摸日日碰夜夜爽孕妇 | 国产一区二区三区在线视频 | 波多野结衣一区二 | 国产97在线 | 亚洲 | 欧美午夜视频在线观看 | 综合久久综合久久 | 欧美日韩三级 | 国产精品日产欧美久久久久 | 成人免费精品 | 久久久久久国产精品mv | 91一区二区 | 爱福利视频 | 国产精品久热 | 亚洲欧美一区二区三区在线 | 亚洲精品久久久狠狠狠爱 | 欧美精品www | 久久成人久久爱 | 午夜激情视频 | 欧美日韩亚洲国产 | 三级视频在线 | 精品久久久久久国产三级 | 一区二区三区视频 | 青青草精品 | 欧洲一区在线 | 九九热在线免费视频 | 欧美区国产区 | 午夜专区 | 国久久久 | 可以在线观看的黄色 | 久久久久久电影 | 一级a性色生活片久久毛片 夜夜视频 | av解说在线精品 | 狠狠干狠狠操 | 中文字幕网在线 | 四虎新网站 | 91在线免费观看 | 亚洲天堂第一页 | 久久综合一区二区三区 | 一区二区久久 | 黄色一级免费观看 | 亚洲日韩欧美一区二区在线 | 一区二区三区国产 | 日韩精品在线视频观看 | 久久免费视频观看 | 一区二区在线免费观看 | 久久女同互慰一区二区三区 | 精品一区二区三区视频 | 日韩一区二区三区在线观看 | 久热精品在线 | 婷婷久久综合 | 99视频只有精品 | 中文字幕免费看 | www.亚洲 | 欧美激情国产日韩精品一区18 | 亚洲欧美在线一区 | 91在线看视频 | 中文字幕综合在线 | 色婷婷综合网 | 亚洲成人二区 | 国产成人久久 | 欧美一区二区三 | 精品国产一区二区三区久久久蜜臀 | 香蕉大人久久国产成人av | 久久久久一区二区 | 国产片网站 | 欧美精品区| 人人草天天草 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 九九热这里 | 久久爱综合 | 黄色高清视频在线观看 | 亚洲码欧美码一区二区三区 | 成人在线精品视频 | 国产99久 | 久久久久久国产精品 | 亚洲成人三区 | 久久久在线| chinese中国真实乱对白 | 黄色毛片av | 久草色视频在线观看 | 日本综合久久 | 亚洲天堂一区 | 久久男人天堂 | 亚洲午夜精品 | 国产一区在线免费观看 | 久久一级 | 4hu网站 | 日韩精品视频在线 | 九九成人| 欧美日韩在线一区二区 | 一级毛片aaaaaa免费看 | 国产欧美一区二区精品性色 | 亚洲 中文 欧美 日韩 在线观看 | 国产精品丝袜视频 | 欧美一区二区三区 | 中文字幕日韩欧美 | 国产精品久久久久久久久久 | 日本黄色a级 | 国产成人精品一区二区三区视频 | 免费看毛片的网站 | 国产午夜精品一区二区三区 | 国产精品日韩欧美一区二区三区 | 日本特黄特色aaa大片免费 | 日韩在线大片 | 亚洲永久免费视频 | yy6080久久伦理一区二区 | 国产精品极品美女在线观看免费 | 成人精品福利视频 | 久久久精品一区二区 | 久热精品在线视频 | 久久精品中文 | 国产xnxx| 热re99久久精品国产99热 | 亚洲综合在线一区二区 | 国产精品视频一区二区三区 | 欧美精品网 | 免费在线h | 国产网站在线播放 | 国产精品自拍av | 久久精品二区亚洲w码 | 黄色高清视频在线观看 | 欧美精品一二三 | 天天操网址 | 天天在线综合 | 中文视频一区 | 欧美在线观看一区 | 亚洲免费在线观看 | 国产精品久久久av | 欧美与黑人午夜性猛交久久久 | 成人免费高清 | 九九免费精品视频 | 天天摸天天操 | 国产精品久久久av | 黄色毛片观看 | 伊人激情网 | 一区小视频 | 国产精品入口久久 | 最近免费中文字幕大全免费版视频 | av资源中文在线天堂 | 在线亚洲欧美 | 国产91精品一区二区绿帽 | 999在线观看视频 | 欧美一级在线观看 | 亚洲免费视频在线观看 | 爱爱视频网站 | 精品久久久久久久 | 美女毛片免费看 | 中文av在线播放 | 国产精品二区三区 | 精品视频久久久 | 成人免费毛片aaaaaa片 | 精品国产乱码久久久久久久软件 | 狠狠伊人 | 国产精品二区三区 | 国产精品久久久久久中文字 | 成人av免费在线 | 精品一区二区三区久久 | 日韩免费在线 | 一区二区三区国产好的精 | 欧美黄 片免费观看 | 国产一区二区在线视频观看 | 久久二| jizzjizz亚洲中国少妇 | 91精品国产92 | 国产免费一级特黄录像 | 色婷婷av久久久久久久 | 欧美激情a∨在线视频播放 成人免费共享视频 | 午夜精品一区二区三区四区 | 欧洲精品在线观看 | 欧美一级黄色片免费看 | 99精品视频免费 | 国产日韩精品一区二区 | 欧美a区 | 久久久久久亚洲 | 久久亚洲美女 | av在线免费观看网站 | 91久久久久 | 成人网电影 | 午夜男人的天堂 | 91免费看片 | 国产欧美在线视频 | 国产精品久久久久久久久久妇女 | 国产精品无码久久久久 | 国产精品久久久久免费a∨ 欧洲精品一区 | 天天干夜夜拍 | 国产精品久久久 | 欧美亚洲一区二区三区 | 国产另类ts人妖一区二区 | 天天干夜夜爽 | 精品久久久久久久久久久久久久 | 免费的一级视频 | 亚洲精品福利在线 | 国产欧美一区二区精品性色 | 精品国偷自产国产一区 | 在线欧美日韩 | 亚洲视频综合 | h片免费| www.夜夜骑 | 久久久一区二区三区 | 一区日韩 | 日韩精品免费视频 | 亚洲欧美日韩在线 | 日本不卡免费新一二三区 | 亚洲 欧美 日韩在线 | 中国1级黄色片 | 亚洲狠狠爱一区二区三区 | 欧美一区二区激情三区 | 国产成人在线一区 | 国产96视频 | 爱爱爱av | 国产精品久久久久久久午夜片 | 中文字幕日韩欧美一区二区三区 | 99国产视频 | 日本 欧美 三级 高清 视频 | 黄色一级免费电影 | 在线观看免费av的网址 | 国产一区精品视频 | 山岸逢花在线 | 久久精品视频在线播放 | 亚洲www.| 黄色国产在线看 | 中文字幕在线观看av | 国产在线第一页 | 99精品一区二区三区 | 国产片侵犯亲女视频播放 | 91精品久久| 国产日韩在线播放 | 一区二区中文 | 欧美成人精品一区二区三区 | 成人国产精品色哟哟 | 亚洲a视频 | 成人免费毛片高清视频 | 中文字幕在线观看av | 亚洲 欧美 精品 | 一区二区三区在线播放 | 午夜精品久久久久久久久久久久 | 欧美一区二区三区电影 | 极品久久| www.国产| 久久久精品亚洲 | 中文字幕91 | 91色在线观看 | 日本欧美国产 | 伊人成人222 | 成人一级黄色大片 | 久久成人国产视频 | 中文字幕在线第一页 | 中文字幕乱码亚洲精品一区 | 青草久操| 国产.com| 亚洲在线观看免费视频 | 日韩一级片 | 久久精品二区 | 在线观看国产wwwa级羞羞视频 | av成人免费 | 日韩2020狼一二三 | 中文字幕日韩欧美 | 在线观看黄 | 免费国产一区二区 | 一区二区手机在线 | 日韩欧美视频一区 | 国产xxxx成人精品免费视频频 | 久久亚洲一区二区三区四区五区高 | 一区二区国产在线 | 亚洲精品在线免费观看视频 | 久在线视频播放免费视频 | 亚洲国产精品麻豆 | 成人精品二区 | 久久久2o19精品 | 成年人在线看 | 日韩一区二区在线播放 | 亚洲高清视频在线观看 | 久热av中文字幕 | 亚洲乱码二区 | 中文字幕观看 | 久色91 | 久久久久久久 | 国产精品久久久久久中文字 | 精品亚洲一区二区三区 | 三级在线免费 | 久久精品视频免费观看 | 久久久久久久国产 | 在线视频a | 久久亚洲天堂 | 国产伦精品一区二区三区四区视频 | 精品久久99 | 在线免费av观看 | 专干老肥女人88av | 中文字幕 国产精品 | a级片视频在线观看 | 日本免费视频 | 日本欧美久久久久免费播放网 | 日韩中出 | 欧美成年黄网站色视频 | 欧美日韩在线精品 | 嫩草视频网 | 久久精品亚洲一区二区 | 亚洲一区二区福利 | 欧美女优在线视频 | 亚洲精品二区 | 99热国产在线观看 | 久久精品亚洲精品国产欧美kt∨ | 成人日韩| 国产精品久久久久久久7电影 | 日本久久网站 | 国产三级黄色毛片 | 国产午夜久久 | 天久久 | 一级片在线观看视频 | 欧美成人精品 | 欧美精品一区二区三区中文字幕 | 久久免费视频观看 | 黄色官网在线观看 | 欧美99热| 久久免费在线观看 | 欧美在线a| 亚洲精品久久久久久久久久久 | 色伊人网| 国产精品伦理 | 欧美三级在线视频 | 国产精品一二区 | 欧美日韩国产一区二区三区不卡 | 久久久国产一区二区三区四区小说 | 日本亚洲欧美 | 久久精品小视频 | 91av免费| 不卡一区二区三区四区 | 天天干夜操 | 国产女人爽到高潮免费视频 | 久久国产精品99国产 | 青青久久av北条麻妃海外网 | 免费看爱爱视频 | 国产高清免费 | 99综合 | 国产精品久久久久久久久久久小说 | 午夜剧院官方 | 中文字幕日韩一区二区 | 精品一区二区电影 | 欧美午夜寂寞影院 | 亚洲免费在线观看 | 国产免费一区二区三区最新不卡 | 免费三片在线观看网站 | 亚洲成人三级 | 久久国产一区二区 | 欧美精品国产精品 | 国外成人在线视频网站 | 日韩精品1区 | 亚洲xx站 | 亚洲欧美日韩另类精品一区二区三区 | 亚洲午夜精品a | 午夜免费影视 | 99亚洲视频 | 国产精品无码久久久久 | 欧美午夜精品久久久久久蜜 | 午夜色电影 | 亚洲精品一 | 亚洲精品成人悠悠色影视 | 日本亚洲最大的色成网站www | 欧美日韩一区免费 | 久久精品中文字幕 | 日韩精品一二三区 | 日本不卡高字幕在线2019 | 九九久久精品 | 久久久影院 | 日韩欧美精品一区二区三区 | 久久久久国产一区二区三区 | 国产精品视频一 | 日韩在线视频一区 | 亚洲美女视频 | 91精品国产综合久久久久久丝袜 | 国产激情免费 | 激情综合色综合久久综合 | 一区二区三区影视 | 欧美精品一区二区三区在线 | 91亚洲国产 | 亚洲国产精品成人 | 欧美日韩免费一区二区三区 | 亚洲精品电影在线一区 | 黄篇网址 | 日韩一区二区三区在线 | а_天堂中文最新版地址 | 99热在线精品播放 | 亚洲视频一区二区三区四区 | 国产精品久久久久久久久免费软件 | 久久久久久免费毛片精品 | 三级网站视频 | 日本福利视频免费观看 | 国产午夜精品久久久久免费视高清 | 国产午夜精品一区二区三区视频 | 337p日本粉嫩噜噜噜 | 涩涩导航| 午夜家庭影院 | 国产成人一区二区 | 天天草天天干 | 亚洲第一区在线 | 一级特黄网站 | 成人动慢| 日韩视频在线观看视频 | 久久久精品一区 | 国产精品乱码一区二区三区 | 久久r免费视频 | 日韩午夜影院 | 日韩精品一二三区 | 国产精品女教师av久久 | www.精品| 久久综合伊人 | 国产96在线观看 | 亚洲h | 一二三区在线 | 色婷婷一区二区三区四区 | 亚洲成人久久久 | 激情久久久久 | 麻豆av一区 | 免费亚洲成人 | 国产乱码精品一区二区三区av | 国产在线视频网 | 色在线播放| a级片在线观看 | 国产亚洲一区二区三区在线观看 | 国产精品久久 | 米奇影视7777| 99久久久无码国产精品 |