日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scrapy 下载器 中间件(Downloader Middleware)

發布時間:2024/7/23 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scrapy 下载器 中间件(Downloader Middleware) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

Scrapy 下載器中間件官方文檔:https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/downloader-middleware.html

官方 英文 文檔:http://doc.scrapy.org/en/latest/topics/downloader-middleware.html#topics-downloader-middleware

?

Scrapy 擴展中間件: 針對特定響應狀態碼,使用代理重新請求:https://www.cnblogs.com/my8100/p/scrapy_middleware_autoproxy.html

https://www.baidu.com/s?wd=中間件狀態碼不等于200重新請求

?

?

?

下載器中間件(Downloader Middleware)

?

下載器中間件是介于Scrapy的request/response處理的鉤子框架。 是用于全局修改Scrapy request和response的一個輕量、底層的系統。

用容易理解的話表述就是:更換代理IP,更換Cookies,更換User-Agent,自動重試 等。

?

1. 如果完全沒有中間件,爬蟲的流程如下圖所示。

2. 使用了中間件以后,爬蟲的流程如下圖所示。

?

?

激活下載器中間件

?

要激活下載器中間件組件,將其加入到 DOWNLOADER_MIDDLEWARES 設置中。 該設置是一個字典(dict),鍵為中間件類的路徑,值為其中間件的順序(order)。

這里是一個例子:

DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.CustomDownloaderMiddleware': 543, }

DOWNLOADER_MIDDLEWARES 設置會與 Scrapy 定義的 DOWNLOADER_MIDDLEWARES_BASE 設置合并(但不是覆蓋), 而后根據順序(order)進行排序,最后得到啟用中間件的有序列表: 第一個中間件是最靠近引擎的,最后一個中間件是最靠近下載器的。

關于如何分配中間件的順序請查看 DOWNLOADER_MIDDLEWARES_BASE 設置,而后根據您想要放置中間件的位置選擇一個值。 由于每個中間件執行不同的動作,您的中間件可能會依賴于之前(或者之后)執行的中間件,因此順序是很重要的。

如果您想禁止內置的(在 DOWNLOADER_MIDDLEWARES_BASE 中設置并默認啟用的)中間件, 您必須在項目的 DOWNLOADER_MIDDLEWARES 設置中定義該中間件,并將其值賦為 None 。 例如,如果您想要關閉user-agent中間件:

DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.CustomDownloaderMiddleware': 543,'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, }

最后,請注意,有些中間件需要通過特定的設置來啟用。更多內容請查看相關中間件文檔。

?

?

編寫您自己的下載器中間件

?

編寫下載器中間件十分簡單。每個中間件組件是一個定義了以下一個或多個方法的Python類:

class scrapy.downloadermiddlewares.DownloaderMiddleware

?

?

process_request(request, spider):

?

當每個 request 通過下載中間件時,該方法被調用。

參數:

  • request (Request 對象) – 處理的request
  • spider (Spider 對象) – 該request對應的spider

返回值:process_request() 必須返回其中之一:

  • 返回 None?。如果其返回 None ,Scrapy將繼續處理該request,執行其他的中間件的相應方法,直到合適的下載器處理函數(download handler)被調用, 該request被執行(其response被下載)。
  • 返回一個 Response 對象。如果其返回 Response 對象,Scrapy將不會調用 任何 其他的 process_request() 或 process_exception() 方法,或相應地下載函數; 其將返回該response。 已安裝的中間件的 process_response() 方法則會在每個response返回時被調用。
  • 返回一個 Request 對象。如果其返回 Request 對象,Scrapy則停止調用 process_request方法并重新調度返回的request。當新返回的request被執行后, 相應地中間件鏈將會根據下載的response被調用。
  • 或 raise IgnoreRequest 。如果其raise一個 IgnoreRequest 異常,則安裝的下載中間件的 process_exception() 方法會被調用。如果沒有任何一個方法處理該異常, 則request的errback(Request.errback)方法會被調用。如果沒有代碼處理拋出的異常, 則該異常被忽略且不記錄(不同于其他異常那樣)。

解釋:

?

?

?process_response(request, response, spider):

參數:

  • request (Request 對象) – response所對應的request
  • response (Response 對象) – 被處理的response
  • spider (Spider 對象) – response所對應的spider

返回值:process_request() 必須返回以下之一:

  • 返回一個 Response 對象。如果其返回一個 Response (可以與傳入的response相同,也可以是全新的對象), 該response會被在鏈中的其他中間件的 process_response() 方法處理。
  • 返回一個 Request 對象。如果其返回一個 Request 對象,則中間件鏈停止, 返回的request會被重新調度下載。處理類似于 process_request() 返回request所做的那樣。
  • 或 raise 一個 IgnoreRequest 異常。如果其拋出一個 IgnoreRequest 異常,則調用request的errback(Request.errback)。 如果沒有代碼處理拋出的異常,則該異常被忽略且不記錄(不同于其他異常那樣)。

解釋:

?

?

process_exception(request, exception, spider):

?

當下載處理器 ( download handler ) 或 process_request() ( 下載中間件 ) 拋出異常 ( 包括 IgnoreRequest 異常) 時, Scrapy 調用 process_exception() 。

參數:

  • request (是 Request 對象) – 產生異常的request
  • exception (Exception 對象) – 拋出的異常
  • spider (Spider 對象) – request對應的spider

返回值:process_exception() 應該返回以下之一:

  • 返回 None?。如果其返回 None ,Scrapy將會繼續處理該異常,接著調用已安裝的其他中間件的 process_exception() 方法,直到所有中間件都被調用完畢,則調用默認的異常處理。
  • 返回一個 Response 對象。如果其返回一個 Response 對象,則已安裝的中間件鏈的 process_response() 方法被調用。Scrapy將不會調用任何其他中間件的 process_exception() 方法。
  • 或者一個 Request 對象。如果其返回一個 Request 對象, 則返回的request將會被重新調用下載。這將停止中間件的 process_exception() 方法執行,就如返回一個response的那樣。

解釋:

?

?

from_crawler(cls, crawler):

?

If present, this classmethod is called to create a middleware instance from a Crawler. It must return a new instance of the middleware. Crawler object provides access to all Scrapy core components like settings and signals; it is a way for middleware to access them and hook its functionality into Scrapy.

Parameters:
crawler (Crawler object) – crawler that uses this middleware

scrapy 中的 from_crawler:https://www.jianshu.com/p/e9ec5d7b6204

解釋:

?

?

?

示例:代理中間件

?

在爬蟲開發中,更換代理IP是非常常見的情況,有時候每一次訪問都需要隨機選擇一個代理IP來進行。
中間件本身是一個Python的類,只要爬蟲每次訪問網站之前都先“經過”這個類,它就能給請求換新的代理IP,這樣就能實現動態改變代理。
在創建一個Scrapy工程以后,工程文件夾下會有一個 middlewares.py 文件,打開以后其內容如下圖所示。

Scrapy 自動生成的這個文件名稱為 middlewares.py,名字后面的 s 表示復數,說明這個文件里面可以放很多個中間件。可以看到有一個? SpiderMiddleware (爬蟲中間件)中間件 和 DownloaderMiddleware (下載中間件)中間件

?

在middlewares.py中添加下面一段代碼(可以在 下載中間件這個類 里面寫,也可以把 爬蟲中間件下載中間件 這兩個類刪了,自己寫個 下載中間件的類。推薦 自己單寫一個類 作為 下載中間件):

# -*- coding: utf-8 -*-# Define here the models for your spider middleware # # See documentation in: # https://doc.scrapy.org/en/latest/topics/spider-middleware.htmlimport random from scrapy.conf import settings from scrapy.utils.project import get_project_settingsclass ProxyMiddleware(object):def process_request(self, request, spider):proxy_1 = random.choice(settings['PROXIES']) # 方法 1proxy_2 = random.choice(get_project_settings()['PROXIES']) # 方法 2request.meta['proxy'] = proxy_1

打開 setting.py 添加 代理 ,并激活 這個代理中間件:

需要注意的是,代理IP是有類型的,需要先看清楚是 HTTP型 的代理IP還是 HTTPS型 的代理IP。

DOWNLOADER_MIDDLEWARES = {'test_spider.middlewares.ProxyMiddleware': 543,# 'test_spider.middlewares.Custom_B_DownloaderMiddleware': 643,# 'test_spider.middlewares.Custom_B_DownloaderMiddleware': None, }PROXIES = ['https://114.217.243.25:8118','https://125.37.175.233:8118','http://1.85.116.218:8118' ]

DOWNLOADER_MIDDLEWARES 其實就是一個字典,字典的Key就是用點分隔的中間件路徑,后面的數字表示這種中間件的順序。由于中間件是按順序運行的,因此如果遇到后一個中間件依賴前一個中間件的情況,中間件的順序就至關重要。
如何確定后面的數字應該怎么寫呢?最簡單的辦法就是從543開始,逐漸加一,這樣一般不會出現什么大問題。如果想把中間件做得更專業一點,那就需要知道Scrapy自帶中間件的順序,如圖下圖所示 (?DOWNLOADER_MIDDLEWARES )。

數字越小的中間件越先執行(數字越小,越靠近引擎,數字越大越靠近下載器,所以數字越小的,processrequest()優先處理;數字越大的,process_response()優先處理;若需要關閉某個中間件直接設為None即可),例如Scrapy自帶的第1個中間件RobotsTxtMiddleware,它的作用是首先查看settings.py中ROBOTSTXT_OBEY 這一項的配置是True還是False。如果是True,表示要遵守Robots.txt協議,它就會檢查將要訪問的網址能不能被運行訪問,如果不被允許訪問,那么直接就取消這一次請求,接下來的和這次請求有關的各種操作全部都不需要繼續了。
開發者自定義的中間件,會被按順序插入到Scrapy自帶的中間件中。爬蟲會按照從100~900的順序依次運行所有的中間件。直到所有中間件全部運行完成,或者遇到某一個中間件而取消了這次請求。

?

Scrapy 其實自帶了 UA 中間件(UserAgentMiddleware)、代理中間件(HttpProxyMiddleware)和重試中間件(RetryMiddleware)。所以,從“原則上”說,要自己開發這3個中間件,需要先禁用Scrapy里面自帶的這3個中間件。要禁用Scrapy的中間件,需要在settings.py里面將這個中間件的順序設為None:

DOWNLOADER_MIDDLEWARES = {'test_spider.middlewares.ProxyMiddleware': 543,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': None }PROXIES = ['https://114.217.243.25:8118','https://125.37.175.233:8118','http://1.85.116.218:8118' ]

為什么說“原則上”應該禁用呢?先查看Scrapy自帶的代理中間件的源代碼,如下圖所示:

從上圖可以看出,如果Scrapy發現這個請求已經被設置了代理,那么這個中間件就會什么也不做,直接返回。因此雖然Scrapy自帶的這個代理中間件順序為750,比開發者自定義的代理中間件的順序543大,但是它并不會覆蓋開發者自己定義的代理信息,所以即使不禁用系統自帶的這個代理中間件也沒有關系。

代理中間件的可用代理列表不一定非要寫在settings.py里面,也可以將它們寫到數據庫或者Redis中。一個可行的自動更換代理的爬蟲系統,應該有如下的3個功能。

  • 1. 有一個小爬蟲ProxySpider去各大代理網站爬取免費代理并驗證,將可以使用的代理IP保存到數據庫中。
  • 2. 在ProxyMiddlerware的process_request中,每次從數據庫里面隨機選擇一條代理IP地址使用。
  • 3. 周期性驗證數據庫中的無效代理,及時將其刪除。由于免費代理極其容易失效,因此如果有一定開發預算的話,建議購買專業代理機構的代理服務,高速而穩定。

?

scrapy 中對接 selenium

from scrapy.http import HtmlResponse from selenium import webdriver from selenium.common.exceptions import TimeoutException from gp.configs import *class ChromeDownloaderMiddleware(object):def __init__(self):options = webdriver.ChromeOptions()options.add_argument('--headless') # 設置無界面if CHROME_PATH:options.binary_location = CHROME_PATHif CHROME_DRIVER_PATH:self.driver = webdriver.Chrome(chrome_options=options, executable_path=CHROME_DRIVER_PATH) # 初始化Chrome驅動else:self.driver = webdriver.Chrome(chrome_options=options) # 初始化Chrome驅動def __del__(self):self.driver.close()def process_request(self, request, spider):try:print('Chrome driver begin...')self.driver.get(request.url) # 獲取網頁鏈接內容return HtmlResponse(url=request.url, body=self.driver.page_source, request=request, encoding='utf-8',status=200) # 返回HTML數據except TimeoutException:return HtmlResponse(url=request.url, request=request, encoding='utf-8', status=500)finally:print('Chrome driver end...')

?

?

示例:UA (user-agent) 中間件

?

Scrapy學習篇(十一)之設置隨機User-Agent:https://www.cnblogs.com/cnkai/p/7401343.html

開發UA中間件和開發代理中間件幾乎一樣,它也是從 settings.py 配置好的 UA 列表中隨機選擇一項,加入到請求頭中。代碼如下:

class UAMiddleware(object):def process_request(self, request, spider):ua = random.choice(settings['USER_AGENT_LIST'])request.headers['User-Agent'] = ua

比IP更好的是,UA不會存在失效的問題,所以只要收集幾十個UA,就可以一直使用。常見的UA如下:

USER_AGENT_LIST = ["Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5","Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7","Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5","Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0E)","Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100815 Minefield/4.0b4pre","Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )","Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)","Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a","Mozilla/2.02E (Win95; U)","Mozilla/3.01Gold (Win95; I)","Mozilla/4.8 [en] (Windows NT 5.1; U)","Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)","HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0","Mozilla/5.0 (Linux; U; Android 1.5; en-us; sdk Build/CUPCAKE) AppleWebkit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Mozilla/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build/CRB17) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Mozilla/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Mozilla/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build/cupcake) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Mozilla/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 FirePHP/0.3","Mozilla/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build/DRC79) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2","Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Mozilla/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build/SHOLS_U2_01.14.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2","Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522 (KHTML, like Gecko) Safari/419.3","Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2","Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13","Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2","Mozilla/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build/R1FA016) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Mozilla/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build/R1AA056) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1", ]

test_spider.py (使用 的是 scrapy-redis 的 RedisSpider,需要從 redis 讀取 url):

#!/usr/bin/python3 # -*- coding: utf-8 -*- # @Author : # @File : mao_yan_spider.py # @Software : PyCharm # @description : XXXfrom scrapy import Spider from scrapy_redis.spiders import RedisSpiderclass TestSpider(RedisSpider):name = 'test'redis_key = 'start_urls:{0}'.format(name)# start_urls = ['http://exercise.kingname.info/exercise_middleware_ua']def parse(self, response):print('response text : {0}'.format(response.text))pass

setting.py 配置 ():

test.py:

#!/usr/bin/python3 # -*- coding: utf-8 -*- # @Author : # @File : test_s.py # @Software : PyCharm # @description : XXXimport redis from scrapy import cmdlinedef add_test_task():r = redis.Redis(host='127.0.0.1', port=6379)for i in range(10):url = 'http://exercise.kingname.info/exercise_middleware_ua'r.lpush('start_urls:test', url)if __name__ == "__main__":add_test_task()cmdline.execute("scrapy crawl test".split())pass

運行 test.py 截圖:

可以看到 請求的 user-agent 是變化的。

from faker import Fakerclass UserAgent_Middleware():def process_request(self, request, spider):f = Faker()agent = f.firefox()request.headers['User-Agent'] = agent

?

?

Cookies 中間件

?

對于需要登錄的網站,可以使用Cookies來保持登錄狀態。那么如果單獨寫一個小程序,用Selenium持續不斷地用不同的賬號登錄網站,就可以得到很多不同的Cookies。由于Cookies本質上就是一段文本,所以可以把這段文本放在Redis里面。這樣一來,當Scrapy爬蟲請求網頁時,可以從Redis中讀取Cookies并給爬蟲換上。這樣爬蟲就可以一直保持登錄狀態。

以下面這個練習頁面為例:http://exercise.kingname.info/exercise_login_success

如果直接用Scrapy訪問,得到的是登錄界面的源代碼,如下圖所示。

現在,使用中間件,可以實現完全不改動這個loginSpider.py里面的代碼,就打印出登錄以后才顯示的內容。

首先開發一個小程序,通過Selenium登錄這個頁面,并將網站返回的Headers保存到Redis中。這個小程序的代碼如下圖所示。

這段代碼的作用是使用Selenium和ChromeDriver填寫用戶名和密碼,實現登錄練習頁面,然后將登錄以后的Cookies轉換為JSON格式的字符串并保存到Redis中。

接下來,再寫一個中間件,用來從Redis中讀取Cookies,并把這個Cookies給Scrapy使用:

class LoginMiddleware(object):def __init__(self):self.client = redis.StrictRedis()def process_request(self, request, spider):if spider.name == 'loginSpider':cookies = json.loads(self.client.lpop('cookies').decode())request.cookies = cookies

設置了這個中間件以后,爬蟲里面的代碼不需要做任何修改就可以成功得到登錄以后才能看到的HTML,如圖12-12所示。

如果有某網站的100個賬號,那么單獨寫一個程序,持續不斷地用Selenium和ChromeDriver或者Selenium 和PhantomJS登錄,獲取Cookies,并將Cookies存放到Redis中。爬蟲每次訪問都從Redis中讀取一個新的Cookies來進行爬取,就大大降低了被網站發現或者封鎖的可能性。

這種方式不僅適用于登錄,也適用于驗證碼的處理。

?

?

內置 下載中間件 參考手冊

?

本頁面介紹了Scrapy自帶的所有下載中間件。關于如何使用及編寫您自己的中間件,請參考 downloader middleware usage guide.

關于默認啟用的中間件列表(及其順序)請參考 DOWNLOADER_MIDDLEWARES_BASE 設置。

?

?

CookiesMiddleware

?

class scrapy.downloadermiddlewares.cookies.CookiesMiddleware

該中間件使得爬取需要cookie(例如使用session)的網站成為了可能。 其追蹤了web server發送的cookie,并在之后的request中發送回去, 就如瀏覽器所做的那樣。

以下設置可以用來配置cookie中間件:

  • COOKIES_ENABLED
  • COOKIES_DEBUG

每個 spider 多 cookie session

0.15 新版功能.

Scrapy 通過使用 cookiejar 作為 Request meta 的 key 來支持單 spider 追蹤多 cookie session。 默認情況下其使用一個 cookie jar(session),不過您可以傳遞一個標示符來使用多個。

例如 ( yield 的 每個 Request 都 有一個 meta={'cookiejar': i} ,cookiejar 這個字段的 值只是一個標識,只要不為 None 就行,通常 設置為一個整數 。例如 1,或者 True):

for i, url in enumerate(urls): yield scrapy.Request(url="http://www.example.com", meta={'cookiejar': i}, callback=self.parse_page)

需要注意的是 cookiejar meta key不是”黏性的(sticky)”。 您需要在之后的 每個 request 請求中接著傳遞。例如:

def parse_page(self, response):# do some processingreturn scrapy.Request("http://www.example.com/otherpage",meta={'cookiejar': response.meta['cookiejar']},callback=self.parse_other_page)

?

COOKIES_ENABLED

默認: True

是否啟用 cookies middleware。如果關閉,cookies 將不會發送給 web server。

COOKIES_DEBUG

默認: False

如果啟用,Scrapy將記錄所有在request(Cookie 請求頭)發送的cookies及response接收到的cookies(Set-Cookie 接收頭)。

下邊是啟用 COOKIES_DEBUG 的記錄的樣例:

2011-04-06 14:35:10-0300 [scrapy] INFO: Spider opened 2011-04-06 14:35:10-0300 [scrapy] DEBUG: Sending cookies to: <GET http://www.diningcity.com/netherlands/index.html>Cookie: clientlanguage_nl=en_EN 2011-04-06 14:35:14-0300 [scrapy] DEBUG: Received cookies from: <200 http://www.diningcity.com/netherlands/index.html>Set-Cookie: JSESSIONID=B~FA4DC0C496C8762AE4F1A620EAB34F38; Path=/Set-Cookie: ip_isocode=USSet-Cookie: clientlanguage_nl=en_EN; Expires=Thu, 07-Apr-2011 21:21:34 GMT; Path=/ 2011-04-06 14:49:50-0300 [scrapy] DEBUG: Crawled (200) <GET http://www.diningcity.com/netherlands/index.html> (referer: None) [...]

?

?

DefaultHeadersMiddleware

?

class scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware

該中間件設置 DEFAULT_REQUEST_HEADERS 指定的默認request header。

?

?

DownloadTimeoutMiddleware

?

class scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware

該中間件設置 DOWNLOAD_TIMEOUT 指定的request下載超時時間.

Note

You can also set download timeout per-request using download_timeout Request.meta key; this is supported even when DownloadTimeoutMiddleware is disabled.

?

?

HttpAuthMiddleware

?

class scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware

該中間件完成某些使用 Basic access authentication (或者叫HTTP認證)的spider生成的請求的認證過程。

在 spider 中啟用 HTTP 認證,請設置 spider 的 http_user 及 http_pass 屬性。

樣例:

from scrapy.spiders import CrawlSpiderclass SomeIntranetSiteSpider(CrawlSpider):http_user = 'someuser'http_pass = 'somepass'name = 'intranet.example.com'# .. rest of the spider code omitted ...

?

?

HttpCacheMiddleware

?

class scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware

該中間件為所有HTTP request及response提供了底層(low-level)緩存支持。 其由cache存儲后端及cache策略組成。

Scrapy提供了兩種HTTP緩存存儲后端:

  • Filesystem storage backend (默認值)
  • DBM storage backend

您可以使用 HTTPCACHE_STORAGE 設定來修改HTTP緩存存儲后端。 您也可以實現您自己的存儲后端。

Scrapy提供了兩種了緩存策略:

  • RFC2616策略
  • Dummy策略(默認值)

您可以使用 HTTPCACHE_POLICY 設定來修改HTTP緩存存儲后端。 您也可以實現您自己的存儲策略。

?

Dummy策略(默認值)

該策略不考慮任何HTTP Cache-Control指令。每個request及其對應的response都被緩存。 當相同的request發生時,其不發送任何數據,直接返回response。

Dummpy策略對于測試spider十分有用。其能使spider運行更快(不需要每次等待下載完成), 同時在沒有網絡連接時也能測試。其目的是為了能夠回放spider的運行過程, 使之與之前的運行過程一模一樣 。

使用這個策略請設置:

  • HTTPCACHE_POLICY 為 scrapy.extensions.httpcache.DummyPolicy

?

RFC2616策略

該策略提供了符合RFC2616的HTTP緩存,例如符合HTTP Cache-Control, 針對生產環境并且應用在持續性運行環境所設置。該策略能避免下載未修改的數據(來節省帶寬,提高爬取速度)。

實現了:

  • 當 no-store cache-control指令設置時不存儲response/request。

  • 當 no-cache cache-control指定設置時不從cache中提取response,即使response為最新。

  • 根據 max-age cache-control指令中計算保存時間(freshness lifetime)。

  • 根據 Expires 指令來計算保存時間(freshness lifetime)。

  • 根據response包頭的 Last-Modified 指令來計算保存時間(freshness lifetime)(Firefox使用的啟發式算法)。

  • 根據response包頭的 Age 計算當前年齡(current age)

  • 根據 Date 計算當前年齡(current age)

  • 根據response包頭的 Last-Modified 驗證老舊的response。

  • 根據response包頭的 ETag 驗證老舊的response。

  • 為接收到的response設置缺失的 Date 字段。

  • 支持request中cache-control指定的 max-stale

    通過該字段,使得spider完整支持了RFC2616緩存策略,但避免了多次請求下情況下的重驗證問題(revalidation on a request-by-request basis). 后者仍然需要HTTP標準進行確定.

    例子:

    在Request的包頭中添加 Cache-Control: max-stale=600 表明接受未超過600秒的超時時間的response.

    更多請參考: RFC2616, 14.9.3

目前仍然缺失:

  • Pragma: no-cache 支持 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1
  • Vary 字段支持 http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6
  • 當update或delete之后失效相應的response http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.10
  • ... 以及其他可能缺失的特性 ..

使用這個策略,設置:

  • HTTPCACHE_POLICY 為 scrapy.extensions.httpcache.RFC2616Policy

?

Filesystem storage backend (默認值)

文件系統存儲后端可以用于HTTP緩存中間件。

使用該存儲端,設置:

  • HTTPCACHE_STORAGE 為 scrapy.extensions.httpcache.FilesystemCacheStorage

每個request/response組存儲在不同的目錄中,包含下列文件:

  • request_body - the plain request body
  • request_headers - the request headers (原始HTTP格式)
  • response_body - the plain response body
  • response_headers - the request headers (原始HTTP格式)
  • meta - 以Python repr() 格式(grep-friendly格式)存儲的該緩存資源的一些元數據。
  • pickled_meta - 與 meta 相同的元數據,不過使用pickle來獲得更高效的反序列化性能。

目錄的名稱與request的指紋(參考 scrapy.utils.request.fingerprint)有關,而二級目錄是為了避免在同一文件夾下有太多文件 (這在很多文件系統中是十分低效的)。目錄的例子:

/path/to/cache/dir/example.com/72/72811f648e718090f041317756c03adb0ada46c7

?

DBM storage backend

0.13 新版功能.

同時也有 DBM 存儲后端可以用于HTTP緩存中間件。

默認情況下,其采用 anydbm 模塊,不過您也可以通過 HTTPCACHE_DBM_MODULE 設置進行修改。

使用該存儲端,設置:

  • HTTPCACHE_STORAGE 為 scrapy.extensions.httpcache.DbmCacheStorage

?

LevelDB storage backend

0.23 新版功能.

A LevelDB storage backend is also available for the HTTP cache middleware.

This backend is not recommended for development because only one process can access LevelDB databases at the same time, so you can’t run a crawl and open the scrapy shell in parallel for the same spider.

In order to use this storage backend:

  • set HTTPCACHE_STORAGE to scrapy.extensions.httpcache.LeveldbCacheStorage
  • install LevelDB python bindings like pip install leveldb

?

HTTPCache中間件設置

HttpCacheMiddleware 可以通過以下設置進行配置:

?

HTTPCACHE_ENABLED

0.11 新版功能.

默認: False

HTTP緩存是否開啟。

在 0.11 版更改: 在0.11版本前,是使用 HTTPCACHE_DIR 來開啟緩存。

?

HTTPCACHE_EXPIRATION_SECS

默認: 0

緩存的request的超時時間,單位秒。

超過這個時間的緩存request將會被重新下載。如果為0,則緩存的request將永遠不會超時。

在 0.11 版更改: 在0.11版本前,0的意義是緩存的request永遠超時。

?

HTTPCACHE_DIR

默認: 'httpcache'

存儲(底層的)HTTP緩存的目錄。如果為空,則HTTP緩存將會被關閉。 如果為相對目錄,則相對于項目數據目錄(project data dir)。更多內容請參考 默認的Scrapy項目結構 。

?

HTTPCACHE_IGNORE_HTTP_CODES

0.10 新版功能.

默認: []

不緩存設置中的HTTP返回值(code)的request。

?

HTTPCACHE_IGNORE_MISSING

默認: False

如果啟用,在緩存中沒找到的request將會被忽略,不下載。

?

HTTPCACHE_IGNORE_SCHEMES

0.10 新版功能.

默認: ['file']

不緩存這些URI標準(scheme)的response。

?

HTTPCACHE_STORAGE

默認: 'scrapy.extensions.httpcache.FilesystemCacheStorage'

實現緩存存儲后端的類。

?

HTTPCACHE_DBM_MODULE

0.13 新版功能.

默認: 'anydbm'

在 DBM存儲后端 的數據庫模塊。 該設定針對DBM后端。

?

HTTPCACHE_POLICY

0.18 新版功能.

默認: 'scrapy.extensions.httpcache.DummyPolicy'

實現緩存策略的類。

?

HTTPCACHE_GZIP

0.25 新版功能.

默認: False

如果啟用,scrapy將會使用gzip壓縮所有緩存的數據. 該設定只針對文件系統后端(Filesystem backend)有效。

?

?

HttpCompressionMiddleware

?

class scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware

該中間件提供了對壓縮(gzip, deflate)數據的支持。

HttpCompressionMiddleware Settings

COMPRESSION_ENABLED

默認: True

Compression Middleware(壓縮中間件)是否開啟。

?

?

ChunkedTransferMiddleware

?

class scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware

該中間件添加了對 chunked transfer encoding 的支持。

?

?

HttpProxyMiddleware

?

0.8 新版功能.

class scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware

該中間件提供了對request設置HTTP代理的支持。您可以通過在 Request 對象中設置 proxy 元數據來開啟代理。

類似于Python標準庫模塊 urllib 及 urllib2 ,其使用了下列環境變量:

  • http_proxy
  • https_proxy
  • no_proxy

您也可以針對每個請求設置 proxy 元數據, 其形式類似于 http://some_proxy_server:port.

?

?

RedirectMiddleware

?

class scrapy.downloadermiddlewares.redirect.RedirectMiddleware

該中間件根據 response 的狀態處理重定向的request。

通過該中間件的(被重定向的)request的url可以通過 Request.meta 的 redirect_urls 鍵找到。

RedirectMiddleware 可以通過下列設置進行配置(更多內容請參考設置文檔):

  • REDIRECT_ENABLED
  • REDIRECT_MAX_TIMES

如果 Request.meta 包含 dont_redirect 鍵,則該 request 將會被此中間件忽略。

如果想要處理一些 重定向狀態碼 在你的 spider 中,你可以 spider 的屬性 handle_httpstatus_list 列出。

例如,如果想要 重定向中間件 忽略 301 和 302 的 response(通過其他的狀態碼)你可以這樣寫:

class MySpider(CrawlSpider):handle_httpstatus_list = [301, 302]

Request.meta 的鍵 handle_httpstatus_list ? 能被用來指定 每個 request 的 response 的狀態碼應該被允許通過。

也可以設置 meta 的 key 為 handle_httpstatus_all? 值為 True 來允許 一個 請求的所有 response 通過

?

RedirectMiddleware settings

REDIRECT_ENABLED

0.13 新版功能.

默認: True

是否啟用Redirect中間件。

?

REDIRECT_MAX_TIMES

默認: 20

單個request被重定向的最大次數。

?

?

MetaRefreshMiddleware

?

class scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware

該中間件根據meta-refresh html標簽處理request重定向。

MetaRefreshMiddleware 可以通過以下設定進行配置 (更多內容請參考設置文檔)。

  • METAREFRESH_ENABLED
  • METAREFRESH_MAXDELAY

該中間件遵循 RedirectMiddleware 描述的 REDIRECT_MAX_TIMES 設定,dont_redirect 及 redirect_urls meta key。

MetaRefreshMiddleware settings

METAREFRESH_ENABLED

0.17 新版功能.

默認: True

Meta Refresh中間件是否啟用。

REDIRECT_MAX_METAREFRESH_DELAY

默認: 100

跟進重定向的最大 meta-refresh 延遲(單位:秒)。

?

?

RetryMiddleware

?

class scrapy.downloadermiddlewares.retry.RetryMiddleware

該中間件將重試可能由于臨時的問題,例如連接超時或者HTTP 500錯誤導致失敗的頁面。

爬取進程會收集失敗的頁面并在最后,spider爬取完所有正常(不失敗)的頁面后重新調度。 一旦沒有更多需要重試的失敗頁面,該中間件將會發送一個信號(retry_complete), 其他插件可以監聽該信號。

RetryMiddleware 可以通過下列設定進行配置 (更多內容請參考設置文檔):

  • RETRY_ENABLED
  • RETRY_TIMES
  • RETRY_HTTP_CODES

關于HTTP錯誤的考慮:

如果根據HTTP協議,您可能想要在設定 RETRY_HTTP_CODES 中移除400錯誤。 該錯誤被默認包括是由于這個代碼經常被用來指示服務器過載(overload)了。而在這種情況下,我們想進行重試。

如果 Request.meta 包含 dont_retry 鍵, 該request將會被本中間件忽略。

RetryMiddleware Settings

RETRY_ENABLED

0.13 新版功能.

默認: True

Retry Middleware是否啟用。

RETRY_TIMES

默認: 2

包括第一次下載,最多的重試次數

RETRY_HTTP_CODES

默認: [500, 502, 503, 504, 400, 408]

重試的response 返回值(code)。其他錯誤(DNS查找問題、連接失敗及其他)則一定會進行重試。

?

?

RobotsTxtMiddleware

?

class scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware

該中間件過濾所有robots.txt eclusion standard中禁止的request。

確認該中間件及 ROBOTSTXT_OBEY 設置被啟用以確保Scrapy尊重robots.txt。

警告

記住, 如果您在一個網站中使用了多個并發請求, Scrapy仍然可能下載一些被禁止的頁面。這是由于這些頁面是在robots.txt被下載前被請求的。 這是當前robots.txt中間件已知的限制,并將在未來進行修復。

?

?

DownloaderStats

?

class scrapy.downloadermiddlewares.stats.DownloaderStats

保存所有通過的request、response及exception的中間件。

您必須啟用 DOWNLOADER_STATS 來啟用該中間件。

?

?

UserAgentMiddleware

?

class scrapy.downloadermiddlewares.useragent.UserAgentMiddleware

用于覆蓋spider的默認user agent的中間件。

要使得spider能覆蓋默認的user agent,其 user_agent 屬性必須被設置。

?

?

AjaxCrawlMiddleware

?

class scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware

根據meta-fragment html標簽查找 ‘AJAX可爬取’ 頁面的中間件。查看 https://developers.google.com/webmasters/ajax-crawling/docs/getting-started 來獲得更多內容。

注解

即使沒有啟用該中間件,Scrapy仍能查找類似于 'http://example.com/!#foo=bar' 這樣的’AJAX可爬取’頁面。 AjaxCrawlMiddleware是針對不具有 '!#' 的URL,通常發生在’index’或者’main’頁面中。

AjaxCrawlMiddleware 設置

AJAXCRAWL_ENABLED

0.21 新版功能.

默認: False

AjaxCrawlMiddleware是否啟用。您可能需要針對 通用爬蟲 啟用該中間件。

?

HttpProxyMiddleware settings

HTTPPROXY_ENABLED

Default: True

Whether or not to enable the HttpProxyMiddleware.

HTTPPROXY_AUTH_ENCODING

Default: "latin-1"

The default encoding for proxy authentication on HttpProxyMiddleware.

?

?

?

?

總結

以上是生活随笔為你收集整理的Scrapy 下载器 中间件(Downloader Middleware)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

一本一本久久a久久精品牛牛影视 | 成人a毛片 | 色99色| 中文字幕视频一区二区 | 欧美日韩亚洲在线 | 91在线国内视频 | 99久久精品国产亚洲 | 国产日产欧美在线观看 | 久久丁香| 国产精品精品久久久 | 五月婷久| 九九免费在线看完整版 | 日韩视频 一区 | 精品久久久久一区二区国产 | 最近日本韩国中文字幕 | 久久久福利 | 新版资源中文在线观看 | 日韩欧美视频在线观看免费 | 9999亚洲| 国产精品男女视频 | 欧美在线aaa | 激情综合一区 | 一区二区高清在线 | 在线看av的网址 | 69精品在线 | 国产精品久久久久久久婷婷 | 色瓜| 91久久影院 | 日韩欧美电影在线观看 | 中文字幕在线观看视频免费 | 欧美精品xxx| 天天操天天曰 | 成人一级视频在线观看 | 色悠悠久久综合 | 91少妇精拍在线播放 | 九九久久国产 | 在线影院av | 久久九九免费视频 | 99在线视频播放 | www.色com | 亚州黄色一级 | 超碰在线公开 | 亚洲一区视频在线播放 | 国产成人黄色av | 激情丁香综合五月 | 精品免费视频. | 久久精品一区二区三区中文字幕 | 不卡的av在线 | 久久视频这里有久久精品视频11 | 亚洲 欧洲av | 国产精品永久久久久久久www | 国产无套一区二区三区久久 | 日本激情动作片免费看 | 亚洲四虎在线 | 亚洲成人动漫在线观看 | 香蕉视频一级 | 91麻豆精品国产91久久久使用方法 | 中文区中文字幕免费看 | 亚洲成人资源网 | 欧美日韩中 | 手机在线黄色网址 | 狠狠色噜噜狠狠狠狠 | 日韩欧美大片免费观看 | 国产精品久久久久久久久搜平片 | 99热精品在线| 99精品欧美一区二区蜜桃免费 | 亚洲免费av电影 | 国产不卡在线观看视频 | 草 免费视频| 国产在线欧美日韩 | 91成版人在线观看入口 | 国产91免费在线观看 | 久久精品日韩 | 在线观看国产v片 | 在线观看免费视频 | 99久久精品免费看国产一区二区三区 | 国产中的精品av小宝探花 | 久久网站最新地址 | 成人在线播放视频 | 五月天婷亚洲天综合网鲁鲁鲁 | 中文字幕国产精品 | 五月婷婷六月丁香 | 国产精品美女久久久久久久 | 久久99精品久久久久婷婷 | 人人澡人人爽欧一区 | a天堂一码二码专区 | 美女免费黄网站 | 69久久久久久久 | 亚洲精品美女在线观看播放 | 黄污在线看 | 国产成人一区三区 | 久久久电影 | 日韩精品一区二区不卡 | 激情视频在线高清看 | 国产在线观看国语版免费 | 国产裸体永久免费视频网站 | 综合婷婷久久 | 午夜视频免费播放 | 99r在线播放 | 国产成人高清 | www日韩视频| 亚洲精品字幕 | 九九九九热精品免费视频点播观看 | 久色婷婷 | 超碰在线官网 | 日韩免费电影在线观看 | 午夜国产一区 | 一本色道久久综合亚洲二区三区 | 亚洲成av人片在线观看无 | 日韩av成人在线观看 | 中文乱码视频在线观看 | 91网在线观看 | 欧美日韩激情视频8区 | 看片网站黄 | 国产精品免费视频久久久 | 激情av一区二区 | 手机成人在线电影 | 亚洲欧洲视频 | 在线看国产视频 | 国产视频不卡 | 日韩精品视频免费看 | 久99久精品 | 婷婷精品进入 | 97电院网手机版 | 91丨九色丨勾搭 | 国产精品第三页 | 麻豆国产精品永久免费视频 | 热热热热热色 | 亚洲美女视频在线 | 国产高清视频色在线www | 四月婷婷在线观看 | 深爱激情五月婷婷 | 天天天天天天操 | 欧美日韩一区二区视频在线观看 | 成年人在线看片 | 91久久一区二区 | 色多多视频在线观看 | 日韩在线观看影院 | 最新精品视频在线 | 最近日韩中文字幕中文 | 国产精品mv在线观看 | 久久任你操| 91免费网站在线观看 | 999久久久精品视频 日韩高清www | 美女视频黄是免费的 | 国产黄在线看 | 97免费在线观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 九九欧美 | 久久久久亚洲国产精品 | 99人成在线观看视频 | 中文字幕乱码电影 | 色婷婷六月天 | 中文字幕在线观看网站 | 国产91全国探花系列在线播放 | 久久蜜臀一区二区三区av | 久久99国产精品二区护士 | 亚洲视频电影在线 | 亚洲黄色区 | www.超碰97.com| 日本不卡123 | 成人午夜片av在线看 | 99国产成+人+综合+亚洲 欧美 | www国产亚洲 | 97av免费视频 | 国产麻豆电影 | 精品久久久久久久久久久久 | 国产资源在线观看 | 免费看的黄色录像 | 丰满少妇高潮在线观看 | 又黄又刺激视频 | 91精彩在线视频 | 日韩精品视频免费 | a v在线观看| 欧美精品视 | 亚洲免费视频观看 | 正在播放国产一区 | 久久精品免费播放 | 蜜臀久久99精品久久久酒店新书 | 国产黄色片免费观看 | av中文资源在线 | 日韩欧美精品一区二区三区经典 | 欧美日韩免费一区二区三区 | 精品久久久久久一区二区里番 | 91黄色免费看 | 九精品| 在线观看黄a| 国产成人免费 | 国产精品久久久一区二区三区网站 | 99久久久免费视频 | 在线播放av网址 | .国产精品成人自产拍在线观看6 | 国产a国产a国产a | 午夜精品久久久久久久久久久久久久 | av福利在线导航 | 久色小说 | 国产在线精品二区 | 国产一级特黄毛片在线毛片 | 天天干夜夜夜 | 人人插人人看 | www.日本色 | 少妇18xxxx性xxxx片 | 91亚洲精品久久久蜜桃网站 | 最新av在线播放 | 精品国产一区二区三区四 | 天天干国产 | 美女黄久久 | 久久婷婷丁香 | 一级免费观看 | 久久激情视频 | 91九色性视频 | 黄色毛片一级片 | 成人毛片100免费观看 | 精品久久电影 | 99精品久久只有精品 | 亚洲高清在线 | 91中文字幕永久在线 | 伊人天堂av | 国产麻豆精品一区 | 日韩欧美国产激情在线播放 | 午夜国产一区二区 | 超碰免费公开 | 九九免费在线看完整版 | 久久在现 | 久久免费99精品久久久久久 | 欧美 日韩 国产 中文字幕 | 美女精品国产 | 一区久久久 | 91精品久久久久久久久久入口 | 91中文在线观看 | 特级黄色电影 | 成 人 黄 色视频免费播放 | 亚洲精品乱码久久久久v最新版 | 在线看片视频 | 69国产盗摄一区二区三区五区 | 亚洲 精品在线视频 | 久久久久久久久爱 | 97偷拍视频 | 97成人在线 | 国产精品亚洲片夜色在线 | 黄色在线看网站 | 国产精品毛片久久久久久久久久99999999 | 天天操比 | 在线看成人片 | 国产在线2020 | 操操爽| 国产又黄又爽无遮挡 | 国产精品一区二区av | 91视频 - 88av| 日韩天天操 | 91久久偷偷做嫩草影院 | 欧美成人999| 久久久久久99精品 | 在线观看你懂的网址 | 四虎5151久久欧美毛片 | 日韩网| 欧美成天堂网地址 | 一区电影| 国产成人精品一区一区一区 | 国产99久久久国产精品成人免费 | 日韩美女黄色片 | 欧美精品二 | 成 人 黄 色 片 在线播放 | 美女视频是黄的免费观看 | 免费看一级特黄a大片 | 国产高清视频 | 久久网页 | 久久99国产精品自在自在app | 亚洲国产三级在线观看 | 免费a现在观看 | 亚洲爽爽网 | 99热国产在线| 国产精品一区二区无线 | 亚洲区色 | 欧美在线观看视频免费 | 一区二区视频免费在线观看 | 国产精品电影一区二区 | 国内外成人免费在线视频 | 黄污视频网站大全 | 激情综合色综合久久 | 国产永久网站 | 欧美大片aaa | 久草在线免费在线观看 | 99精品偷拍视频一区二区三区 | 最近免费在线观看 | 黄网站免费看 | 国产中文字幕视频 | 婷婷伊人五月 | 欧美激情操 | 亚洲国产999 | 97视频一区 | 毛片在线网 | 一级黄色在线免费观看 | 久草网免费 | 色老板在线 | 黄色网址在线播放 | 日本中文字幕系列 | 91九色porn在线资源 | 在线观看av国产 | 在线免费亚洲 | 成人黄色毛片 | 午夜视频在线观看一区 | 91丨porny丨九色 | 91chinese在线| 中文字幕亚洲在线观看 | 国产视频二区三区 | 久久综合欧美精品亚洲一区 | 日韩中文字幕在线不卡 | 成人av在线观 | 国产理论一区二区三区 | 天天综合久久综合 | 91精品一区在线观看 | 俺要去色综合狠狠 | 国产亚洲在线观看 | 亚洲国产午夜 | 911精品美国片911久久久 | 超碰97公开 | 国内久久 | 91精品对白一区国产伦 | www.午夜色.com| 91看片黄色 | 色五丁香| 日躁夜躁狠狠躁2001 | av在线免费播放网站 | 91九色在线视频 | 草免费视频| 久久视频在线看 | 怡春院av| 中文一二区 | 中文字幕二区在线观看 | 天堂在线视频中文网 | 国产999精品久久久久久 | 日本不卡123| 日韩精品免费一区二区在线观看 | 国产黄色片在线免费观看 | 丁香婷五月 | 久久久国产精品久久久 | 狠狠综合久久av | 国产成人精品av久久 | 日韩在线观看视频在线 | 在线黄色免费av | 国产淫片 | 亚洲少妇xxxx | 国产在线永久 | 91在线精品秘密一区二区 | 人人插人人玩 | 久草视频免费观 | 92国产精品久久久久首页 | 麻豆视频在线免费观看 | 欧美日韩一区二区三区不卡 | 精品国产三级 | av在线免费播放 | 久久久久电影 | 91精品视屏| 日日操天天操夜夜操 | 精品国自产在线观看 | 毛片a级片| 人人爽人人片 | 黄色三级免费网址 | 亚洲更新最快 | 久久成人在线 | 久久精品美女视频 | 天天鲁天天干天天射 | 片网址| 国产精品 中文在线 | 日本不卡一区二区三区在线观看 | 亚洲午夜久久久久久久久电影网 | 免费看三片 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 丁香综合网 | 亚洲视频久久久久 | av三级av | 免费看一级特黄a大片 | 高清有码中文字幕 | 天天干天天操天天拍 | 嫩草av在线| 日韩成人免费在线 | 91亚洲狠狠婷婷综合久久久 | 亚洲日本黄色 | 免费观看www7722午夜电影 | 操碰av| 国产不卡在线观看视频 | 欧美极度另类性三渗透 | 在线黄色av电影 | 激情大尺度视频 | av性在线| 成人免费视频网址 | 国产精品免费观看国产网曝瓜 | 婷婷色综合网 | 99精品视频观看 | 91麻豆精品国产91久久久使用方法 | 99久久精品国产一区二区成人 | 久久超碰在线 | 国产视频久 | 亚洲一二三区精品 | 日本高清中文字幕有码在线 | 狠狠久久婷婷 | 亚洲人久久 | 黄色一区三区 | 日韩精品一区二区三区中文字幕 | www免费看片com | 国产色拍 | 热久精品| 国产专区视频在线 | 免费国产在线观看 | 中午字幕在线观看 | 欧美日韩不卡一区二区 | 日本久久久久久久久久 | 久久国产区| 欧美一区二区三区在线看 | 成人av午夜 | 91爱爱免费观看 | 久久综合九色综合久久久精品综合 | 日日弄天天弄美女bbbb | 91av蜜桃| 国产一区免费在线观看 | 中文字幕字幕中文 | 又黄又爽又色无遮挡免费 | 日韩成片 | 91九色porn在线资源 | 中文视频一区二区 | 免费色视频网站 | 亚洲男男gaygay无套同网址 | av一二三区| 亚洲精品在线观看视频 | 91精品欧美 | 97理论片| 国产午夜精品一区二区三区 | 色视频在线看 | 欧美午夜剧场 | 日韩高清av | 午夜少妇av | 在线观看中文字幕视频 | 国产高清视频免费观看 | 久久er99热精品一区二区三区 | 九九亚洲精品 | 天天草网站 | 欧美一区二区精品在线 | 久草免费新视频 | 伊人色综合网 | 久久免费看视频 | 免费大片av | 亚洲精品久久久久999中文字幕 | 黄色三级免费看 | 99av国产精品欲麻豆 | 在线日韩中文 | 五月婷婷综合网 | 日韩免费观看高清 | 免费看片网站91 | 中文字幕色在线 | 丝袜一区在线 | 久久天| 欧美伦理电影一区二区 | 国产视频精品网 | 久久人人97超碰精品888 | 欧美人交a欧美精品 | 国产精品video | 在线观看 国产 | 99成人在线视频 | 91成人亚洲 | 国产午夜一区二区 | 日韩欧美网址 | 精品一区二区三区久久久 | 国产精品中文在线 | 免费在线黄色av | 久久久久中文字幕 | 日韩欧美一区二区在线播放 | 不卡国产视频 | 香蕉网在线观看 | 中文字幕久久网 | 欧美成人亚洲 | 久久精品视频18 | 婷婷视频在线播放 | 9在线观看免费高清完整版 玖玖爱免费视频 | 午夜精品一区二区三区在线视频 | 久久一区二区三区国产精品 | 日日爱夜夜爱 | 色噜噜日韩精品一区二区三区视频 | 欧美成人91 | 国产小视频免费在线观看 | 黄色免费观看网址 | japanesexxxhd奶水 91在线精品一区二区 | 激情小说 五月 | 中文字幕2021 | 97色婷婷 | 久久久久久久亚洲精品 | 2019精品手机国产品在线 | 中文av在线免费观看 | 国产精品美女www爽爽爽视频 | 国产在线视频一区二区三区 | 久久久国产精品一区二区三区 | 久久免费黄色大片 | 国产精品福利午夜在线观看 | 日本精品视频在线观看 | 国产精品美女999 | 九九热只有这里有精品 | 黄污视频网站大全 | 日韩精品2区 | 国产在线色视频 | 天天激情在线 | 91免费在线看片 | 超碰99在线 | 91在线视频免费91 | 国产国语在线 | 五月婷婷视频在线 | 天天爱天天射天天干天天 | 9999精品| 久久久久国产精品视频 | 天天色官网 | 国产免费xvideos视频入口 | 亚洲精区二区三区四区麻豆 | 中文字幕文字幕一区二区 | 亚洲一级片在线观看 | 97在线精品 | 色91在线| 色综合咪咪久久网 | 久久免费视频在线观看30 | 精品久久久999 | 亚洲精品动漫成人3d无尽在线 | 免费网站在线观看成人 | 日韩精品一区二区三区在线视频 | 精品久久久久_ | 亚洲作爱 | 免费观看一级特黄欧美大片 | 91一区啪爱嗯打偷拍欧美 | 日日夜夜91 | 国产亚洲人成网站在线观看 | 四虎国产视频 | 久久综合九色综合久久久精品综合 | 激情欧美日韩一区二区 | 免费下载高清毛片 | 婷婷色六月天 | 国产精品黄色在线观看 | 国产精品99久久久久久久久 | 亚洲色图激情文学 | 国产精品视频在线看 | 欧美精品亚洲二区 | 天天曰视频 | 久久99精品久久久久久 | 国产精品久久久久久a | 亚洲精品黄网站 | 欧美午夜久久 | 免费三级黄色 | 亚洲九九精品 | 成年免费在线视频 | 久久国产日韩 | 17婷婷久久www | 国产探花在线看 | 五月婷婷一级片 | 日韩一区二区免费播放 | 不卡的av在线播放 | 色综合久久中文字幕综合网 | 国产精品无av码在线观看 | 狠狠操狠狠操 | 国产精品久久人 | 免费三级黄色 | av看片网| 欧美激情视频久久 | 久久精品视频一 | 日韩在线三区 | 日韩久久激情 | 激情丁香 | 欧美三级高清 | 欧美性猛片 | 91自拍视频在线观看 | 亚洲黄色免费在线看 | 免费色视频| 四虎影视4hu4虎成人 | 99热只有精品在线观看 | 伊人干综合 | 免费看片成年人 | 日韩有码专区 | 国产成人免费高清 | 99久久精品无码一区二区毛片 | 国产二区av | 成人app在线免费观看 | 亚洲三级视频 | 亚洲爱爱视频 | 久久99精品国产麻豆婷婷 | 日韩一区在线播放 | 欧美日韩在线第一页 | 午夜精品久久久久久中宇69 | 亚洲国产小视频在线观看 | 久久夜夜爽 | 91亚洲影院 | 亚洲在线网址 | 天天人人 | 国产精品久久久久久久久久久久午夜 | 免费视频一区 | 九色视频网址 | 少妇搡bbbb搡bbb搡69 | 欧美大片大全 | 国产精品久久久久久久久久东京 | 久久首页 | 亚洲激情在线播放 | 久久久久久久av | 天天色天天上天天操 | 久久精品人 | 国产精品视频你懂的 | 在线综合 亚洲 欧美在线视频 | 在线欧美小视频 | 91最新在线视频 | 久久国产精品免费一区 | 9999亚洲 | 国产精品久久久久9999吃药 | 亚洲高清av在线 | 中文字幕在线视频精品 | 99精品热 | 日韩视频在线不卡 | 911国产在线观看 | 特级西西444www大精品视频免费看 | 中文字幕在线观看免费高清完整版 | 成人午夜剧场在线观看 | 国产美女精品在线 | 日韩精品视 | 亚洲精品国产免费 | av电影在线观看完整版一区二区 | 日韩高清成人在线 | 97夜夜澡人人双人人人喊 | 国产爽视频 | 天天玩天天干天天操 | 99精彩视频在线观看免费 | 2019天天干夜夜操 | www免费在线观看 | 欧美日韩二区三区 | 日韩高清网站 | 日韩福利在线观看 | 欧美色操| 亚洲欧美久久 | 最近中文字幕久久 | 成人网大片| 久草国产视频 | 久久国产成人午夜av影院潦草 | 一本色道久久综合亚洲二区三区 | 中文在线a∨在线 | 在线观看免费一级片 | 看黄色.com| 精品1区2区 | 日韩a欧美 | 国产精品视频久久 | 日韩激情第一页 | 六月丁香社区 | 六月丁香伊人 | 亚洲免费在线看 | 久久精品国产精品亚洲精品 | 97视频在线观看播放 | 国产91精品一区二区麻豆亚洲 | 久久在线免费观看视频 | 91专区在线观看 | 最新国产在线 | 99热最新| 激情五月婷婷综合网 | 97人人爽人人 | 国产精品不卡一区 | 中文字幕av最新更新 | av超碰在线| 国产精品视频全国免费观看 | 18国产精品白浆在线观看免费 | a级片韩国| 麻豆成人在线观看 | 久久综合色综合88 | 日本h视频在线观看 | 色综合久久久久综合体桃花网 | 国产精品video爽爽爽爽 | 欧美激情综合网 | 国产黄色av| av中文字幕在线免费观看 | 中文字幕在线播放一区二区 | 五月开心婷婷 | 久久午夜网 | 99精品视频在线免费观看 | 亚洲黄色免费网站 | 福利一区二区在线 | 免费在线日韩 | 国产一区二区精品在线 | 亚色视频在线观看 | 伊人天天狠天天添日日拍 | 国产亚洲精品bv在线观看 | www色,com | 亚洲国产欧美一区二区三区丁香婷 | 亚洲国产精品激情在线观看 | 欧美 高跟鞋交 xxxxhd | 国产精品11 | 玖玖999| 欧美日韩国内在线 | 97精品国产aⅴ | 99视频在线免费 | 中文字幕在线视频网站 | 正在播放国产精品 | 永久免费毛片在线观看 | 免费观看www小视频的软件 | 天天干天天干天天干天天干天天干天天干 | 狠狠干干 | 91精品国产综合久久婷婷香蕉 | 成年人视频在线免费观看 | 夜夜躁狠狠躁日日躁视频黑人 | 国产精品黄色在线观看 | 欧美日韩久久不卡 | 国产电影一区二区三区四区 | 国产成人精品一区二区三区 | 91九色最新 | 三级av免费看 | 最近中文字幕高清字幕免费mv | a级黄色片视频 | 涩五月婷婷 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 免费人成网ww44kk44 | 中文免费 | 中文字幕在线不卡国产视频 | 97热在线观看 | 精品免费视频 | 夜夜夜夜夜夜操 | 日韩免费高清在线观看 | 亚洲香蕉在线观看 | 国产亚洲视频系列 | 香蕉在线播放 | 午夜国产福利在线 | 国产99一区视频免费 | 激情综合中文娱乐网 | 777久久久 | 亚洲精品一区二区三区高潮 | 99久久精品一区二区成人 | 91尤物国产尤物福利在线播放 | 国产黄色av | 午夜精品久久久久99热app | 久久专区| 久久伊99综合婷婷久久伊 | 一区二区三区国产欧美 | 欧美精品一区二区免费 | 欧美人交a欧美精品 | 久久久免费看视频 | 久久久久亚洲精品国产 | 亚洲成aⅴ人片久久青草影院 | 中文字幕一区二区三区在线观看 | 亚洲视频网站在线观看 | 免费久久99精品国产婷婷六月 | 午夜三级理论 | 久久午夜色播影院免费高清 | 天天天天色综合 | 亚洲综合在线一区二区三区 | 天天做综合网 | av综合站| 成人h电影| 色欧美88888久久久久久影院 | 中文字幕色在线 | 亚洲精品毛片一级91精品 | 欧美激情第28页 | 日韩网站一区 | 欧美日韩在线视频免费 | 午夜av影院 | 亚洲国产精久久久久久久 | 美女黄频免费 | 国产亚洲精品久久久久久 | 韩国精品一区二区三区六区色诱 | 在线免费性生活片 | 91九色在线播放 | 国产原创av在线 | 国产精品久久久久久久久久久久 | 日本精品视频一区二区 | 久久免费资源 | 自拍超碰在线 | 亚洲精品视频观看 | 欧美日韩综合在线观看 | 免费观看全黄做爰大片国产 | 黄色免费网站 | 久久久精品在线观看 | 亚洲亚洲精品在线观看 | 视频三区 | 久久久久久久久久伊人 | 在线观看一 | 亚洲成av人片一区二区梦乃 | 国产精品久久久久久吹潮天美传媒 | 黄色软件视频网站 | 黄色小说在线免费观看 | 精品毛片久久久久久 | 国产精品视频免费在线观看 | 国产免费国产 | 天天爽夜夜爽精品视频婷婷 | 九九欧美| 日韩欧美视频 | www五月婷婷 | 亚洲成av人片在线观看www | 在线综合 亚洲 欧美在线视频 | 欧美成人在线免费 | av日韩av| 国产91对白在线 | 91cn国产在线 | 亚洲天天在线日亚洲洲精 | 综合网久久 | 麻豆视频免费播放 | 奇米网8888| 成人午夜片av在线看 | 国产精品第二页 | 毛片的网址 | 欧美精品被 | 免费看的黄色小视频 | 国内视频1区 | 成人国产网站 | 在线观看涩涩 | 国产精品1000| 久久久久久久久久影视 | 丁香激情综合久久伊人久久 | 久久艹人人 | 激情婷婷综合网 | 日韩精品一区二区三区免费观看视频 | 区一区二区三区中文字幕 | 人人草人 | 玖玖视频 | 激情五月av | 天天操天天干天天 | 狠狠干.com | 国产亚洲永久域名 | 免费国产亚洲视频 | 综合网在线视频 | 在线观看午夜av | 亚洲精品乱码久久久久久蜜桃91 | 91av福利视频 | 97视频在线免费播放 | 国产精品久久久久久久久毛片 | 激情婷婷av | 五月天激情综合 | 欧美怡红院 | 久久国产区 | 国产亚洲精品成人av久久ww | 狠狠色综合网站久久久久久久 | 成年人黄色av | 黄a网站 | 五月在线| 99免费视频 | 精品99999| 国产99久久 | 国产精品大片在线观看 | 91久久国产自产拍夜夜嗨 | 亚洲最新视频在线 | 国产黄色在线看 | 亚洲免费在线播放视频 | 欧美在线18 | 一区二区三区在线免费 | 91三级在线观看 | 国产第一福利 | 最新av在线免费观看 | 欧美成人a在线 | 国产美女视频免费观看的网站 | 欧美最新大片在线看 | 美女福利视频 | 日本少妇视频 | 国产午夜精品av一区二区 | 日日夜精品| 国产 在线 日韩 | 正在播放国产一区 | 国产一二区视频 | 婷婷六月综合亚洲 | 全黄色一级片 | 欧美日本国产在线观看 | 99视频在线免费看 | www.亚洲视频.com| 欧美一级片免费播放 | 国产免费大片 | 综合婷婷丁香 | aⅴ视频在线 | 色婷婷激情四射 | 欧美日韩久久久 | h视频在线看 | 国产精品久久亚洲 | 欧美日韩国产在线精品 | 探花视频在线观看免费版 | www国产在线| 久久免费观看少妇a级毛片 久久久久成人免费 | 国产成人精品a | 国产黄色在线观看 | 久久免费成人精品视频 | 99久久超碰中文字幕伊人 | 91av99| 伊人六月 | 超碰国产在线播放 | 又色又爽又黄 | 在线观看视频在线 | 精品久久久免费 | 日韩欧美在线视频一区二区 | 99久久www免费 | 人人草人| 中文字幕最新精品 | 美国三级黄色大片 | 国产69精品久久app免费版 | 成人免费视频观看 | 91免费观看| 免费男女羞羞的视频网站中文字幕 | 91av亚洲| 91亚洲狠狠婷婷综合久久久 | 91精品影视| 亚洲精品国偷拍自产在线观看蜜桃 | 一区二区精品久久 | 久久久蜜桃一区二区 | 国产九九九视频 | 日韩午夜电影 | 中文字幕av全部资源www中文字幕在线观看 | 欧美性网站 | 国产91精品高清一区二区三区 | 91网在线 | 国产网红在线 | 日韩高清dvd | 国内精品久久久久久久久久久 | 99精品欧美一区二区蜜桃免费 | 精品一区二区在线观看 | 五月婷在线观看 | wwwwwww黄| 精品视频久久 | 亚洲va在线va天堂 | 国产又粗又猛又爽 | 久久精品一二区 | 91精品久久久久久久99蜜桃 | 免费观看黄色av | 99日精品| av观看免费在线 | 成人精品一区二区三区电影免费 | 国产成人一区二区三区电影 | 超碰在线人人草 | 国产精品网址在线观看 | 黄色成人免费电影 | 国产亚洲精品av | 亚洲精品在线播放视频 | 91亚洲国产成人 | 国产一级性生活 | 黄色三级在线看 | 91精品久久久久 | 成年人天堂com | 亚洲精品男女 | 粉嫩av一区二区三区四区在线观看 | 精品在线观看免费 | 午夜三级在线 | 日韩在线| 日本韩国精品一区二区在线观看 | 99久久精品国 | 在线观看视频精品 | 中文字幕免费成人 | 狠狠操导航 | 国产三级精品在线 | 国产91学生粉嫩喷水 | 99热超碰 | 日韩欧美一区二区不卡 | 一区二区三区在线观看 | 久艹视频在线免费观看 | sesese图片| 亚洲精品在线视频播放 | 欧美成人aa | 亚洲一区二区三区精品在线观看 | 97超碰资源总站 | 久久无码av一区二区三区电影网 | 在线观看成人一级片 | v片在线看 | 亚洲片在线观看 | 精产嫩模国品一二三区 | 国产高清在线观看 | 91av网址| 亚洲免费永久精品国产 | www.av免费| 五月天综合| 国产一级免费片 | 日韩一区二区三免费高清在线观看 | 最近2019好看的中文字幕免费 | 国产在线视频资源 | 精品毛片在线 | 中文不卡视频在线 | 人人爽人人香蕉 | av中文字幕在线看 | 欧美a免费 | 精品国产一区二区三区噜噜噜 | 亚洲 中文 在线 精品 | 中文在线免费观看 | 青草视频在线免费 | 久久不见久久见免费影院 | 日日操网站 | 天天射天天艹 | 国产乱对白刺激视频不卡 | 免费视频91蜜桃 | 香蕉视频导航 | 日韩精品一区二区久久 | 97成人精品视频在线播放 | 久久艹艹 | 日韩精品免费一区二区 | 中文字幕一区二区三区久久 | 精品夜夜嗨av一区二区三区 | 久久久久亚洲精品成人网小说 | 国产一级淫片在线观看 | 六月丁香在线视频 | 国产午夜不卡 | 四虎国产精品免费观看视频优播 | 日本久久久精品视频 | 国产亚洲精品久久久久动 | 久久久久久视频 | 99一级片| 日韩va在线观看 | 欧美精品免费在线观看 | 激情综合网天天干 | 国产精品免费在线 | 国产高清免费在线播放 | 精品久久网 | 91污污|