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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Scrapy 学习笔记(-)

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scrapy 学习笔记(-) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Scrapy


?

Scrapy 是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 其可以應用在數據挖掘,信息處理或存儲歷史數據等一系列的程序中。其最初是為了頁面抓取 (更確切來說, 網絡抓取 )所設計的, 也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。Scrapy用途廣泛,可以用于數據挖掘、監測和自動化測試。

Scrapy 使用了 Twisted異步網絡庫來處理網絡通訊。整體架構大致如下

 

Scrapy主要包括了以下組件:

  • 引擎(Scrapy)
    用來處理整個系統的數據流處理, 觸發事務(框架核心)
  • 調度器(Scheduler)
    用來接受引擎發過來的請求, 壓入隊列中, 并在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什么, 同時去除重復的網址
  • 下載器(Downloader)
    用于下載網頁內容, 并將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的)
  • 爬蟲(Spiders)
    爬蟲是主要干活的, 用于從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
  • 項目管道(Pipeline)
    負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析后,將被發送到項目管道,并經過幾個特定的次序處理數據。
  • 下載器中間件(Downloader Middlewares)
    位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
  • 爬蟲中間件(Spider Middlewares)
    介于Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
  • 調度中間件(Scheduler Middewares)
    介于Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。

Scrapy運行流程大概如下:

    1. 引擎從調度器中取出一個鏈接(URL)用于接下來的抓取
    2. 引擎把URL封裝成一個請求(Request)傳給下載器
    3. 下載器把資源下載下來,并封裝成應答包(Response)
    4. 爬蟲解析Response
    5. 解析出實體(Item),則交給實體管道進行進一步的處理
    6. 解析出的是鏈接(URL),則把URL交給調度器等待抓取

?


?

一、安裝:

Linux:pip3 install scrapyWindows:1、直接安裝:pip3 install scrapy2、可能報錯(需要安裝twisted):2.1、下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted2.2、進入下載目錄,執行 pip3 install Twisted?17.1.0?cp35?cp35m?win_amd64.whl3、 安裝pywin32:pip install pywin32

?

二、基本使用?

?2.1、基本命令

1. scrapy startproject 項目名稱- 在當前目錄中創建中創建一個項目文件(類似于Django)2. scrapy genspider [-t template] <name> <domain>- 創建爬蟲應用如:scrapy gensipider -t basic oldboy oldboy.comscrapy gensipider -t xmlfeed autohome autohome.com.cnPS:查看所有命令:scrapy gensipider -l查看模板命令:scrapy gensipider -d 模板名稱3. scrapy list- 展示爬蟲應用列表4. scrapy crawl 爬蟲應用名稱- 運行單獨爬蟲應用

?

?2.2、項目結構以及爬蟲應用簡介

project_name/scrapy.cfgproject_name/__init__.pyitems.pypipelines.pysettings.pyspiders/__init__.py爬蟲1.py爬蟲2.py爬蟲3.py

文件說明:

  • scrapy.cfg ?項目的主配置信息。(真正爬蟲相關的配置信息在settings.py文件中)
  • items.py ? ?設置數據存儲模板,用于結構化數據,如:Django的Model
  • pipelines ? ?數據處理行為,如:一般結構化的數據持久化
  • settings.py 配置文件,如:遞歸的層數、并發數,延遲下載等
  • spiders ? ? ?爬蟲目錄,如:創建文件,編寫爬蟲規則

?注意:一般創建爬蟲文件時,以網站域名命名

import scrapyclass XiaoHuarSpider(scrapy.spiders.Spider):name = "xiaohuar"                            # 爬蟲名稱 *****allowed_domains = ["xiaohuar.com"]  # 允許的域名start_urls = ["http://www.xiaohuar.com/hua/",   # 其實URL
    ]def parse(self, response):# 訪問起始URL并獲取結果后的回調函數
import scrapy
from scrapy.selector import HtmlXPathSelector
from scrapy.http.request import Requestclass DigSpider(scrapy.Spider):# 爬蟲應用的名稱,通過此名稱啟動爬蟲命令name = "dig"# 允許的域名allowed_domains = ["chouti.com"]# 起始URLstart_urls = ['http://dig.chouti.com/',]has_request_set = {}def parse(self, response):print(response.url)hxs = HtmlXPathSelector(response)page_list = hxs.select('//div[@id="dig_lcpage"]//a[re:test(@href, "/all/hot/recent/\d+")]/@href').extract()for page in page_list:page_url = 'http://dig.chouti.com%s' % pagekey = self.md5(page_url)if key in self.has_request_set:passelse:self.has_request_set[key] = page_urlobj = Request(url=page_url, method='GET', callback=self.parse)yield obj@staticmethoddef md5(val):import hashlibha = hashlib.md5()ha.update(bytes(val, encoding='utf-8'))key = ha.hexdigest()return key
demo

執行此爬蟲文件,則在終端進入項目目錄執行如下命令:

scrapy crawl dig --nolog  # --nolog:不顯示日志

對于上述代碼重要之處在于:

  • Request是一個封裝用戶請求的類,在回調函數中yield該對象表示繼續訪問
  • HtmlXpathSelector用于結構化HTML代碼并提供選擇器功能

?

yield scrapy.Request(url, callback=self.parse)

解析:

因為使用的yield,而不是return。parse函數將會被當做一個生成器使用。scrapy會逐一獲取parse方法中生成的結果,并判斷該結果是一個什么樣的類型。如果是request則加入爬取隊列,如果是item類型則使用pipeline處理,其他類型則返回錯誤信息。具體見源代碼
 

?2.3、url去重

scrapy下的request中init自帶參數:

 

其中有個參數:dont_filter = False , scrapy默認使用 scrapy.dupefilter.RFPDupeFilter 進行去重,具體可進源碼(RFPDupeFilter?)查看,相關配置:

DUPEFILTER_CLASS = 'scrapy.dupefilter.RFPDupeFilter'
DUPEFILTER_DEBUG = False
JOBDIR = "保存范文記錄的日志路徑,如:/root/"  # 最終路徑為 /root/requests.seen

?

我們自己自定義去重操作,這樣能更靈活的操作數據,比如將已訪問的url 存進內存、數據庫、文件、緩存等,更換方式靈活

1)首先,我們要自定義url去重的類:RepeatFilter? , 在setting.py中將scrapy默認去重的路徑改成我們自定義的路徑:

# setting.py
DUPEFILTER_CLASS = 'scrapy.dupefilter.RepeatFilter'

?

2)然后再新建dupefilter.py文件,在該py文件中自定義RepeatFilter類, 重寫RFPDupeFilter 類的幾個方法:

  • def from_settings(cls, settings) : 會定義成類方法,默認調用的第一個方法就是這個方法,作用:實例化RepeatFilter
  • def request_seen(self, request) : 檢查當前請求是否被訪問過,返回True表示訪問過 ,返回False表示未訪問過
  • def open(self) : 開始爬取請求時調用
  • def close(self, reason) : 結束爬蟲爬取時調用
  • def log(self, request, spider) : 日志記錄

?調用順序:1、from_settings 方法 → 2、init 方法 → 3、open 方法 → 4、request_seen 方法 →5、close 方法

# dupefilter.py/RepeatFilter
class RepeatFilter(object):def __init__(self):self.visited_url = set()@classmethoddef from_settings(cls, settings):"""初始化時,調用:param settings: :return: """return cls()def request_seen(self, request):"""檢測當前請求是否已經被訪問過:param request: :return: True表示已經訪問過;False表示未訪問過"""if request.url in self.visited_url:return Trueself.visited_url.add(request.url)return Falsedef open(self):"""開始爬去請求時,調用:return: """print('open replication')def close(self, reason):"""結束爬蟲爬取時,調用:param reason: :return: """print('close replication')def log(self, request, spider):"""記錄日志:param request: :param spider: :return: """print('repeat', request.url)

?

2.4、pipelines相關?

?scrapy中items將數據格式化,之后傳遞給pipelines處理,

通過下述yield方法,即可將items數據傳遞到pipelines中,執行pipelines中?各類下的?process_item 方法,進行數據持久化處理 ,執行優先級由setting中注冊(ITEM_PIPELINES)配置的數據決定,數值越小越先執行

yield item_example  #此語句一執行,就會跳到pipelines.py下的類中執行其中的方法,比如 process_item方法:數據做持久化時調用 ,open_spider方法:爬蟲開始爬取數據時調用的

?

pipelines相關類是在pipelines.py中編寫的,要使pipelines.py下的類能正常運行,需要在setting中將需要用到的類注冊進去,如:

#pipelines.py/ArticleImagePipeline類class ArticleImagePipeline(ImagesPipeline):def item_completed(self, results, item, info):if "front_image_url" in item:for ok, value in results:image_file_path = value["path"]item["front_image_path"] = image_file_pathreturn item  #return item:會將item交個下個類繼續處理,如不想讓其他類處理,則需手動報異常:Raise DropItem(),表示丟棄item,不再被其他類處理

?

setting中注冊:

ITEM_PIPELINES = {'ArticleSpider.pipelines.ArticleImagePipeline': 2, # 自定義ArticleImagePipeline ,需配置好管道路徑
}

?

?pipelines中的類,也有幾個方法,有點類似上述去重的類:

  • def process_item(self, item, spider) :操作并進行持久化時調用
  • def from_crawler(cls, crawler) :初始化時調用,用于讀取setting信息及實例化pipelines對象
  • def open_spider(self,spider) :爬蟲開始執行時調用
  • def close_spider(self,spider) :爬蟲結束時調用

 


?

2.5、cookie相關

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http.response.html import HtmlResponse
from scrapy.http import Request
from scrapy.http.cookies import CookieJarclass ChoutiSpider(scrapy.Spider):name = "chouti"allowed_domains = ["chouti.com"]start_urls = ('http://www.chouti.com/',)def start_requests(self):url = 'http://dig.chouti.com/'yield Request(url=url, callback=self.login, meta={'cookiejar': True})def login(self, response):print(response.headers.getlist('Set-Cookie'))req = Request(url='http://dig.chouti.com/login',method='POST',headers={'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},body='phone=8613121758648&password=woshiniba&oneMonth=1',callback=self.check_login,meta={'cookiejar': True})yield reqdef check_login(self, response):print(response.text)
處理cookie

?

# -*- coding: utf-8 -*-
import scrapy
import sys
import io
from scrapy.http import Request
from scrapy.selector import Selector, HtmlXPathSelector
from ..items import ChoutiItemsys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
from scrapy.http.cookies import CookieJar
class ChoutiSpider(scrapy.Spider):name = "chouti"allowed_domains = ["chouti.com",]start_urls = ['http://dig.chouti.com/']cookie_dict = Nonedef parse(self, response):cookie_obj = CookieJar()cookie_obj.extract_cookies(response,response.request)self.cookie_dict = cookie_obj._cookies  # cookie# 帶上用戶名密碼+cookieyield Request(url="http://dig.chouti.com/login",method='POST',body = "phone=8615131255089&password=woshiniba&oneMonth=1",headers={'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8"},cookies=cookie_obj._cookies,callback=self.check_login)def check_login(self,response):print(response.text)yield Request(url="http://dig.chouti.com/",callback=self.good)def good(self,response):id_list = Selector(response=response).xpath('//div[@share-linkid]/@share-linkid').extract()for nid in id_list:print(nid)url = "http://dig.chouti.com/link/vote?linksId=%s" % nidyield Request(url=url,method="POST",cookies=self.cookie_dict,callback=self.show)# page_urls = Selector(response=response).xpath('//div[@id="dig_lcpage"]//a/@href').extract()# for page in page_urls:#     url = "http://dig.chouti.com%s" % page#     yield Request(url=url,callback=self.good)def show(self,response):print(response.text)
示例:自動登錄抽屜并批量點贊

?


?2.6、Scrapy框架擴展, 自定義擴展利用信號在指定位置注冊制定操作

?Scrapy框架擴展,scrapy提供一些擴展(鉤子)可以供自定義操作,setting.py中:

EXTENSIONS = {'scrapy.extensions.telnet.TelnetConsole': None,
}

我們進入TelnetConsole 源碼中,通過重寫init方法、from_crawler方法,可以自定義我們的鉤子

  

? 

scrapy.signals中提供多種信號狀態,可供我們自定義擴展鉤子時使用:
engine_started = object()  # 引擎開始時
engine_stopped = object()  # 引擎結束時
spider_opened = object()  # 爬蟲開始時
spider_idle = object()    # 
spider_closed = object()   # 爬蟲結束時
spider_error = object()   # 爬蟲錯誤時
request_scheduled = object()   # request給到調度器時
request_dropped = object()  # request丟棄時
response_received = object()  # response接收時
response_downloaded = object()   # response下載時
item_scraped = object()  # item執行時
item_dropped = object()  # item丟棄時

?

自定義鉤子:

新建?extensions.py文件 ,創建類?MyExtension

from scrapy import signalsclass MyExtension(object):def __init__(self, value):self.value = value@classmethoddef from_crawler(cls, crawler):val = crawler.settings.getint('MMMM')ext = cls(val)crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened)crawler.signals.connect(ext.spider_closed, signal=signals.spider_closed)return extdef spider_opened(self, spider):print('open')def spider_closed(self, spider):print('close')

?

setting.py中注冊:?

EXTENSIONS = {# 'scrapy.extensions.telnet.TelnetConsole': None,'articlespider.extensions.MyExtend': 300,
}

?

2.7、setting.py配置:?

# -*- coding: utf-8 -*-# Scrapy settings for step8_king project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     http://doc.scrapy.org/en/latest/topics/settings.html
#     http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
#     http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html# 1. 爬蟲名稱
BOT_NAME = 'step8_king'# 2. 爬蟲應用路徑
SPIDER_MODULES = ['step8_king.spiders']
NEWSPIDER_MODULE = 'step8_king.spiders'# Crawl responsibly by identifying yourself (and your website) on the user-agent
# 3. 客戶端 user-agent請求頭
# USER_AGENT = 'step8_king (+http://www.yourdomain.com)'# Obey robots.txt rules
# 4. 禁止爬蟲配置
# ROBOTSTXT_OBEY = False# Configure maximum concurrent requests performed by Scrapy (default: 16)
# 5. 并發請求數
# CONCURRENT_REQUESTS = 4# Configure a delay for requests for the same website (default: 0)
# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
# 6. 延遲下載秒數
# DOWNLOAD_DELAY = 2# The download delay setting will honor only one of:
# 7. 單域名訪問并發數,并且延遲下次秒數也應用在每個域名
# CONCURRENT_REQUESTS_PER_DOMAIN = 2
# 單IP訪問并發數,如果有值則忽略:CONCURRENT_REQUESTS_PER_DOMAIN,并且延遲下次秒數也應用在每個IP
# CONCURRENT_REQUESTS_PER_IP = 3# Disable cookies (enabled by default)
# 8. 是否支持cookie,cookiejar進行操作cookie
# COOKIES_ENABLED = True
# COOKIES_DEBUG = True# Disable Telnet Console (enabled by default)
# 9. Telnet用于查看當前爬蟲的信息,操作爬蟲等...
#    使用telnet ip port ,然后通過命令操作
# TELNETCONSOLE_ENABLED = True
# TELNETCONSOLE_HOST = '127.0.0.1'
# TELNETCONSOLE_PORT = [6023,]# 10. 默認請求頭
# Override the default request headers:
# DEFAULT_REQUEST_HEADERS = {
#     'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#     'Accept-Language': 'en',
# }# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
# 11. 定義pipeline處理請求
# ITEM_PIPELINES = {
#    'step8_king.pipelines.JsonPipeline': 700,
#    'step8_king.pipelines.FilePipeline': 500,
# }# 12. 自定義擴展,基于信號進行調用
# Enable or disable extensions
# See http://scrapy.readthedocs.org/en/latest/topics/extensions.html
# EXTENSIONS = {
#     # 'step8_king.extensions.MyExtension': 500,
# }# 13. 爬蟲允許的最大深度,可以通過meta查看當前深度;0表示無深度
# DEPTH_LIMIT = 3# 14. 爬取時,0表示深度優先Lifo(默認);1表示廣度優先FiFo# 后進先出,深度優先
# DEPTH_PRIORITY = 0
# SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleLifoDiskQueue'
# SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.LifoMemoryQueue'
# 先進先出,廣度優先# DEPTH_PRIORITY = 1
# SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue'
# SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue'# 15. 調度器隊列
# SCHEDULER = 'scrapy.core.scheduler.Scheduler'
# from scrapy.core.scheduler import Scheduler# 16. 訪問URL去重
# DUPEFILTER_CLASS = 'step8_king.duplication.RepeatUrl'# Enable and configure the AutoThrottle extension (disabled by default)
# See http://doc.scrapy.org/en/latest/topics/autothrottle.html"""
17. 自動限速算法from scrapy.contrib.throttle import AutoThrottle自動限速設置1. 獲取最小延遲 DOWNLOAD_DELAY2. 獲取最大延遲 AUTOTHROTTLE_MAX_DELAY3. 設置初始下載延遲 AUTOTHROTTLE_START_DELAY4. 當請求下載完成后,獲取其"連接"時間 latency,即:請求連接到接受到響應頭之間的時間5. 用于計算的... AUTOTHROTTLE_TARGET_CONCURRENCYtarget_delay = latency / self.target_concurrencynew_delay = (slot.delay + target_delay) / 2.0 # 表示上一次的延遲時間new_delay = max(target_delay, new_delay)new_delay = min(max(self.mindelay, new_delay), self.maxdelay)slot.delay = new_delay
"""# 開始自動限速
# AUTOTHROTTLE_ENABLED = True
# The initial download delay
# 初始下載延遲
# AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
# 最大下載延遲
# AUTOTHROTTLE_MAX_DELAY = 10
# The average number of requests Scrapy should be sending in parallel to each remote server
# 平均每秒并發數
# AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0# Enable showing throttling stats for every response received:
# 是否顯示
# AUTOTHROTTLE_DEBUG = True# Enable and configure HTTP caching (disabled by default)
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings"""
18. 啟用緩存目的用于將已經發送的請求或相應緩存下來,以便以后使用from scrapy.downloadermiddlewares.httpcache import HttpCacheMiddlewarefrom scrapy.extensions.httpcache import DummyPolicyfrom scrapy.extensions.httpcache import FilesystemCacheStorage
"""
# 是否啟用緩存策略
# HTTPCACHE_ENABLED = True# 緩存策略:所有請求均緩存,下次在請求直接訪問原來的緩存即可
# HTTPCACHE_POLICY = "scrapy.extensions.httpcache.DummyPolicy"
# 緩存策略:根據Http響應頭:Cache-Control、Last-Modified 等進行緩存的策略
# HTTPCACHE_POLICY = "scrapy.extensions.httpcache.RFC2616Policy"# 緩存超時時間
# HTTPCACHE_EXPIRATION_SECS = 0# 緩存保存路徑
# HTTPCACHE_DIR = 'httpcache'# 緩存忽略的Http狀態碼
# HTTPCACHE_IGNORE_HTTP_CODES = []# 緩存存儲的插件
# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'"""
19. 代理,需要在環境變量中設置from scrapy.contrib.downloadermiddleware.httpproxy import HttpProxyMiddleware方式一:使用默認os.environ{http_proxy:http://root:woshiniba@192.168.11.11:9999/https_proxy:http://192.168.11.11:9999/}方式二:使用自定義下載中間件def to_bytes(text, encoding=None, errors='strict'):if isinstance(text, bytes):return textif not isinstance(text, six.string_types):raise TypeError('to_bytes must receive a unicode, str or bytes ''object, got %s' % type(text).__name__)if encoding is None:encoding = 'utf-8'return text.encode(encoding, errors)class ProxyMiddleware(object):def process_request(self, request, spider):PROXIES = [{'ip_port': '111.11.228.75:80', 'user_pass': ''},{'ip_port': '120.198.243.22:80', 'user_pass': ''},{'ip_port': '111.8.60.9:8123', 'user_pass': ''},{'ip_port': '101.71.27.120:80', 'user_pass': ''},{'ip_port': '122.96.59.104:80', 'user_pass': ''},{'ip_port': '122.224.249.122:8088', 'user_pass': ''},]proxy = random.choice(PROXIES)if proxy['user_pass'] is not None:request.meta['proxy'] = to_bytes("http://%s" % proxy['ip_port'])encoded_user_pass = base64.encodestring(to_bytes(proxy['user_pass']))request.headers['Proxy-Authorization'] = to_bytes('Basic ' + encoded_user_pass)print "**************ProxyMiddleware have pass************" + proxy['ip_port']else:print "**************ProxyMiddleware no pass************" + proxy['ip_port']request.meta['proxy'] = to_bytes("http://%s" % proxy['ip_port'])DOWNLOADER_MIDDLEWARES = {'step8_king.middlewares.ProxyMiddleware': 500,}""""""
20. Https訪問Https訪問時有兩種情況:1. 要爬取網站使用的可信任證書(默認支持)DOWNLOADER_HTTPCLIENTFACTORY = "scrapy.core.downloader.webclient.ScrapyHTTPClientFactory"DOWNLOADER_CLIENTCONTEXTFACTORY = "scrapy.core.downloader.contextfactory.ScrapyClientContextFactory"2. 要爬取網站使用的自定義證書DOWNLOADER_HTTPCLIENTFACTORY = "scrapy.core.downloader.webclient.ScrapyHTTPClientFactory"DOWNLOADER_CLIENTCONTEXTFACTORY = "step8_king.https.MySSLFactory"# https.pyfrom scrapy.core.downloader.contextfactory import ScrapyClientContextFactoryfrom twisted.internet.ssl import (optionsForClientTLS, CertificateOptions, PrivateCertificate)class MySSLFactory(ScrapyClientContextFactory):def getCertificateOptions(self):from OpenSSL import cryptov1 = crypto.load_privatekey(crypto.FILETYPE_PEM, open('/Users/wupeiqi/client.key.unsecure', mode='r').read())v2 = crypto.load_certificate(crypto.FILETYPE_PEM, open('/Users/wupeiqi/client.pem', mode='r').read())return CertificateOptions(privateKey=v1,  # pKey對象certificate=v2,  # X509對象verify=False,method=getattr(self, 'method', getattr(self, '_ssl_method', None)))其他:相關類scrapy.core.downloader.handlers.http.HttpDownloadHandlerscrapy.core.downloader.webclient.ScrapyHTTPClientFactoryscrapy.core.downloader.contextfactory.ScrapyClientContextFactory相關配置DOWNLOADER_HTTPCLIENTFACTORYDOWNLOADER_CLIENTCONTEXTFACTORY""""""
21. 爬蟲中間件class SpiderMiddleware(object):def process_spider_input(self,response, spider):'''下載完成,執行,然后交給parse處理:param response: :param spider: :return: '''passdef process_spider_output(self,response, result, spider):'''spider處理完成,返回時調用:param response::param result::param spider::return: 必須返回包含 Request 或 Item 對象的可迭代對象(iterable)'''return resultdef process_spider_exception(self,response, exception, spider):'''異常調用:param response::param exception::param spider::return: None,繼續交給后續中間件處理異常;含 Response 或 Item 的可迭代對象(iterable),交給調度器或pipeline'''return Nonedef process_start_requests(self,start_requests, spider):'''爬蟲啟動時調用:param start_requests::param spider::return: 包含 Request 對象的可迭代對象'''return start_requests內置爬蟲中間件:'scrapy.contrib.spidermiddleware.httperror.HttpErrorMiddleware': 50,'scrapy.contrib.spidermiddleware.offsite.OffsiteMiddleware': 500,'scrapy.contrib.spidermiddleware.referer.RefererMiddleware': 700,'scrapy.contrib.spidermiddleware.urllength.UrlLengthMiddleware': 800,'scrapy.contrib.spidermiddleware.depth.DepthMiddleware': 900,"""
# from scrapy.contrib.spidermiddleware.referer import RefererMiddleware
# Enable or disable spider middlewares
# See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {# 'step8_king.middlewares.SpiderMiddleware': 543,
}"""
22. 下載中間件class DownMiddleware1(object):def process_request(self, request, spider):'''請求需要被下載時,經過所有下載器中間件的process_request調用:param request::param spider::return:None,繼續后續中間件去下載;Response對象,停止process_request的執行,開始執行process_responseRequest對象,停止中間件的執行,將Request重新調度器raise IgnoreRequest異常,停止process_request的執行,開始執行process_exception'''passdef process_response(self, request, response, spider):'''spider處理完成,返回時調用:param response::param result::param spider::return:Response 對象:轉交給其他中間件process_responseRequest 對象:停止中間件,request會被重新調度下載raise IgnoreRequest 異常:調用Request.errback'''print('response1')return responsedef process_exception(self, request, exception, spider):'''當下載處理器(download handler)或 process_request() (下載中間件)拋出異常:param response::param exception::param spider::return:None:繼續交給后續中間件處理異常;Response對象:停止后續process_exception方法Request對象:停止中間件,request將會被重新調用下載'''return None默認下載中間件{'scrapy.contrib.downloadermiddleware.robotstxt.RobotsTxtMiddleware': 100,'scrapy.contrib.downloadermiddleware.httpauth.HttpAuthMiddleware': 300,'scrapy.contrib.downloadermiddleware.downloadtimeout.DownloadTimeoutMiddleware': 350,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 500,'scrapy.contrib.downloadermiddleware.defaultheaders.DefaultHeadersMiddleware': 550,'scrapy.contrib.downloadermiddleware.redirect.MetaRefreshMiddleware': 580,'scrapy.contrib.downloadermiddleware.httpcompression.HttpCompressionMiddleware': 590,'scrapy.contrib.downloadermiddleware.redirect.RedirectMiddleware': 600,'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware': 700,'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 750,'scrapy.contrib.downloadermiddleware.chunked.ChunkedTransferMiddleware': 830,'scrapy.contrib.downloadermiddleware.stats.DownloaderStats': 850,'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 900,}"""
# from scrapy.contrib.downloadermiddleware.httpauth import HttpAuthMiddleware
# Enable or disable downloader middlewares
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
# DOWNLOADER_MIDDLEWARES = {
#    'step8_king.middlewares.DownMiddleware1': 100,
#    'step8_king.middlewares.DownMiddleware2': 500,
# }
setting.py

?

2.8、scrapy配置之自動限速以及緩存?

"""
17. 自動限速算法from scrapy.contrib.throttle import AutoThrottle自動限速設置1. 獲取最小延遲 DOWNLOAD_DELAY2. 獲取最大延遲 AUTOTHROTTLE_MAX_DELAY3. 設置初始下載延遲 AUTOTHROTTLE_START_DELAY4. 當請求下載完成后,獲取其"連接"時間 latency,即:請求連接到接受到響應頭之間的時間5. 用于計算的... AUTOTHROTTLE_TARGET_CONCURRENCYtarget_delay = latency / self.target_concurrencynew_delay = (slot.delay + target_delay) / 2.0 # 表示上一次的延遲時間new_delay = max(target_delay, new_delay)new_delay = min(max(self.mindelay, new_delay), self.maxdelay)slot.delay = new_delay
"""# 開始自動限速
# AUTOTHROTTLE_ENABLED = True
# The initial download delay
# 初始下載延遲
# AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
# 最大下載延遲
# AUTOTHROTTLE_MAX_DELAY = 10
# The average number of requests Scrapy should be sending in parallel to each remote server
# 平均每秒并發數
# AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
setting.py 動態限速

?

"""
18. 啟用緩存目的用于將已經發送的請求或相應緩存下來,以便以后使用from scrapy.downloadermiddlewares.httpcache import HttpCacheMiddlewarefrom scrapy.extensions.httpcache import DummyPolicyfrom scrapy.extensions.httpcache import FilesystemCacheStorage
"""
# 是否啟用緩存策略
# HTTPCACHE_ENABLED = True# 緩存策略:所有請求均緩存,下次在請求直接訪問原來的緩存即可
# HTTPCACHE_POLICY = "scrapy.extensions.httpcache.DummyPolicy"
# 緩存策略:根據Http響應頭:Cache-Control、Last-Modified 等進行緩存的策略
# HTTPCACHE_POLICY = "scrapy.extensions.httpcache.RFC2616Policy"# 緩存超時時間
# HTTPCACHE_EXPIRATION_SECS = 0# 緩存保存路徑
# HTTPCACHE_DIR = 'httpcache'# 緩存忽略的Http狀態碼
# HTTPCACHE_IGNORE_HTTP_CODES = []# 緩存存儲的插件
# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
緩存

?

?

 


?

?

2.9、scrapy之默認代理及擴展代理

"""
19. 代理,需要在環境變量中設置from scrapy.contrib.downloadermiddleware.httpproxy import HttpProxyMiddleware方式一:使用默認os.environ{http_proxy:http://root:woshiniba@192.168.11.11:9999/https_proxy:http://192.168.11.11:9999/}方式二:使用自定義下載中間件def to_bytes(text, encoding=None, errors='strict'):if isinstance(text, bytes):return textif not isinstance(text, six.string_types):raise TypeError('to_bytes must receive a unicode, str or bytes ''object, got %s' % type(text).__name__)if encoding is None:encoding = 'utf-8'return text.encode(encoding, errors)class ProxyMiddleware(object):def process_request(self, request, spider):PROXIES = [{'ip_port': '111.11.228.75:80', 'user_pass': ''},{'ip_port': '120.198.243.22:80', 'user_pass': ''},{'ip_port': '111.8.60.9:8123', 'user_pass': ''},{'ip_port': '101.71.27.120:80', 'user_pass': ''},{'ip_port': '122.96.59.104:80', 'user_pass': ''},{'ip_port': '122.224.249.122:8088', 'user_pass': ''},]proxy = random.choice(PROXIES)if proxy['user_pass'] is not None:request.meta['proxy'] = to_bytes("http://%s" % proxy['ip_port'])encoded_user_pass = base64.encodestring(to_bytes(proxy['user_pass']))request.headers['Proxy-Authorization'] = to_bytes('Basic ' + encoded_user_pass)print "**************ProxyMiddleware have pass************" + proxy['ip_port']else:print "**************ProxyMiddleware no pass************" + proxy['ip_port']request.meta['proxy'] = to_bytes("http://%s" % proxy['ip_port'])DOWNLOADER_MIDDLEWARES = {'step8_king.middlewares.ProxyMiddleware': 500,}"""
View Code

?

?


2.10、scrapy之自定義https證書

"""
20. Https訪問Https訪問時有兩種情況:1. 要爬取網站使用的可信任證書(默認支持)DOWNLOADER_HTTPCLIENTFACTORY = "scrapy.core.downloader.webclient.ScrapyHTTPClientFactory"DOWNLOADER_CLIENTCONTEXTFACTORY = "scrapy.core.downloader.contextfactory.ScrapyClientContextFactory"2. 要爬取網站使用的自定義證書DOWNLOADER_HTTPCLIENTFACTORY = "scrapy.core.downloader.webclient.ScrapyHTTPClientFactory"DOWNLOADER_CLIENTCONTEXTFACTORY = "step8_king.https.MySSLFactory"# https.pyfrom scrapy.core.downloader.contextfactory import ScrapyClientContextFactoryfrom twisted.internet.ssl import (optionsForClientTLS, CertificateOptions, PrivateCertificate)class MySSLFactory(ScrapyClientContextFactory):def getCertificateOptions(self):from OpenSSL import cryptov1 = crypto.load_privatekey(crypto.FILETYPE_PEM, open('/Users/wupeiqi/client.key.unsecure', mode='r').read())v2 = crypto.load_certificate(crypto.FILETYPE_PEM, open('/Users/wupeiqi/client.pem', mode='r').read())return CertificateOptions(privateKey=v1,  # pKey對象certificate=v2,  # X509對象verify=False,method=getattr(self, 'method', getattr(self, '_ssl_method', None)))其他:相關類scrapy.core.downloader.handlers.http.HttpDownloadHandlerscrapy.core.downloader.webclient.ScrapyHTTPClientFactoryscrapy.core.downloader.contextfactory.ScrapyClientContextFactory相關配置DOWNLOADER_HTTPCLIENTFACTORYDOWNLOADER_CLIENTCONTEXTFACTORY"""
View Code

?

2.11、?scrapy之爬蟲中間件

?1)下載中間件

"""
22. 下載中間件class DownMiddleware1(object):def process_request(self, request, spider):'''請求需要被下載時,經過所有下載器中間件的process_request調用:param request::param spider::return:None,繼續后續中間件去下載;Response對象,停止process_request的執行,開始執行process_responseRequest對象,停止中間件的執行,將Request重新調度器raise IgnoreRequest異常,停止process_request的執行,開始執行process_exception'''passdef process_response(self, request, response, spider):'''spider處理完成,返回時調用:param response::param result::param spider::return:Response 對象:轉交給其他中間件process_responseRequest 對象:停止中間件,request會被重新調度下載raise IgnoreRequest 異常:調用Request.errback'''print('response1')return responsedef process_exception(self, request, exception, spider):'''當下載處理器(download handler)或 process_request() (下載中間件)拋出異常:param response::param exception::param spider::return:None:繼續交給后續中間件處理異常;Response對象:停止后續process_exception方法Request對象:停止中間件,request將會被重新調用下載'''return None默認下載中間件{'scrapy.contrib.downloadermiddleware.robotstxt.RobotsTxtMiddleware': 100,'scrapy.contrib.downloadermiddleware.httpauth.HttpAuthMiddleware': 300,'scrapy.contrib.downloadermiddleware.downloadtimeout.DownloadTimeoutMiddleware': 350,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 500,'scrapy.contrib.downloadermiddleware.defaultheaders.DefaultHeadersMiddleware': 550,'scrapy.contrib.downloadermiddleware.redirect.MetaRefreshMiddleware': 580,'scrapy.contrib.downloadermiddleware.httpcompression.HttpCompressionMiddleware': 590,'scrapy.contrib.downloadermiddleware.redirect.RedirectMiddleware': 600,'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware': 700,'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 750,'scrapy.contrib.downloadermiddleware.chunked.ChunkedTransferMiddleware': 830,'scrapy.contrib.downloadermiddleware.stats.DownloaderStats': 850,'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 900,}"""
View Code

?

2)爬蟲中間件

"""
21. 爬蟲中間件class SpiderMiddleware(object):def process_spider_input(self,response, spider):'''下載完成,執行,然后交給parse處理:param response: :param spider: :return: '''passdef process_spider_output(self,response, result, spider):'''spider處理完成,返回時調用:param response::param result::param spider::return: 必須返回包含 Request 或 Item 對象的可迭代對象(iterable)'''return resultdef process_spider_exception(self,response, exception, spider):'''異常調用:param response::param exception::param spider::return: None,繼續交給后續中間件處理異常;含 Response 或 Item 的可迭代對象(iterable),交給調度器或pipeline'''return Nonedef process_start_requests(self,start_requests, spider):'''爬蟲啟動時調用:param start_requests::param spider::return: 包含 Request 對象的可迭代對象'''return start_requests內置爬蟲中間件:'scrapy.contrib.spidermiddleware.httperror.HttpErrorMiddleware': 50,'scrapy.contrib.spidermiddleware.offsite.OffsiteMiddleware': 500,'scrapy.contrib.spidermiddleware.referer.RefererMiddleware': 700,'scrapy.contrib.spidermiddleware.urllength.UrlLengthMiddleware': 800,'scrapy.contrib.spidermiddleware.depth.DepthMiddleware': 900,"""
View Code

?

轉載于:https://www.cnblogs.com/Eric15/articles/9733824.html

總結

以上是生活随笔為你收集整理的Scrapy 学习笔记(-)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

欧美少妇bbwhd| av在线影片 | 成 人 黄 色 视频免费播放 | 毛片网站观看 | 久久久精品久久 | 日韩精品免费在线 | a级成人毛片 | 综合国产视频 | 国产涩图 | 中文字幕av在线播放 | 精品国产网址 | 成全在线视频免费观看 | 午夜视频一区二区 | 亚洲一级国产 | 久久理论电影 | 免费观看9x视频网站在线观看 | 91九色最新地址 | 天天操天天色天天射 | 永久免费看av | 99久久er热在这里只有精品66 | 中文字幕成人在线观看 | 国精产品999国精产品视频 | 午夜婷婷网 | 婷婷丁香激情五月 | 特级毛片aaa | 91专区在线观看 | 91在线区 | 四虎国产免费 | 日韩有码专区 | 国内视频 | 精品久久久久一区二区国产 | 国产视频 亚洲精品 | 精品国产99| 国产一区二区在线观看免费 | 国产一区二区在线影院 | 在线欧美最极品的av | 99热在线看 | 99久久免费看 | 欧美日韩国产精品久久 | 精品久久久久一区二区国产 | 久久久久久久久久久网 | 精品免费视频 | 国产精品麻豆一区二区三区 | 8x8x在线观看视频 | 一区二区三区视频网站 | 91av久久| 国产高清福利在线 | 91成人精品在线 | 五月婷婷狠狠 | 丰满少妇一级片 | 亚洲成av人片在线观看香蕉 | 久久国产视频网站 | 欧美一级视频一区 | 午夜精品一区二区三区视频免费看 | 最新av免费 | 四季av综合网站 | 最新久久久 | 色综合色综合色综合 | 在线亚洲精品 | 国产精品网址在线观看 | 久久精品视频4 | 亚洲美女精品视频 | 久久这里只有精品首页 | 成人中文字幕在线观看 | 99久久精品久久久久久动态片 | 成片免费观看视频999 | 亚洲精品国产精品国自产 | 五月婷婷激情 | 日韩欧美在线不卡 | 91av99| 日韩爱爱网站 | 国产视频在线观看免费 | 日韩欧美视频一区二区三区 | 在线观看黄色国产 | 91精彩视频在线观看 | 正在播放国产一区 | 24小时日本在线www免费的 | 精产嫩模国品一二三区 | 精品美女在线观看 | 久99久久| 91尤物国产尤物福利在线播放 | 午夜黄色影院 | 五月天欧美精品 | 一本一本久久a久久 | 国产五月婷婷 | 草久在线 | 日本黄色a级大片 | 久久伦理 | 欧美日韩在线观看不卡 | 青青草视频精品 | 精品亚洲男同gayvideo网站 | 日韩手机在线 | 午夜精品福利在线 | 午夜视频一区二区 | av三级av | 亚洲精品国产视频 | 国产成人在线观看 | 特级毛片在线 | www久久九| 91精品黄色 | 97在线免费观看视频 | 国产一区视频在线播放 | 日日夜夜精品视频天天综合网 | 欧美久久久影院 | 综合久久影院 | 亚洲欧美日韩中文在线 | 国产老妇av | 伊人五月天 | 日韩精品在线免费播放 | 91亚色视频在线观看 | 国产精品日韩高清 | 九九激情视频 | 国产97视频在线 | 久久96国产精品久久99软件 | 国产不卡视频在线播放 | 成人午夜免费剧场 | 正在播放国产一区 | 精品国产aⅴ一区二区三区 在线直播av | 在线观看免费av网站 | 欧美性猛片, | 久久午夜鲁丝片 | 日日夜夜国产 | 六月天综合网 | 伊人狠狠 | 免费看色视频 | 婷婷久久婷婷 | 成 人 黄 色 视频 免费观看 | 日韩成片 | 激情视频久久 | 欧美一区二区在线刺激视频 | 色999在线 | 欧亚日韩精品一区二区在线 | 日韩欧美中文 | 91丨九色丨国产在线观看 | 天天激情天天干 | 久久这里只有精品久久 | 伊人色**天天综合婷婷 | 国精产品满18岁在线 | 日韩电影黄色 | 韩国av免费在线 | 黄色视屏免费在线观看 | 欧美精品在线观看 | www.大网伊人 | 狠狠色狠狠色综合系列 | 国产精品99在线观看 | 一区二区三区在线观看免费视频 | 久久综合色一综合色88 | 久久精品视频2 | 欧美国产一区二区 | 精品视频免费在线 | 超碰97国产精品人人cao | 人人澡av | 久草精品视频在线播放 | 综合激情网... | 人人看黄色 | 天天天干天天天操 | 国产一区视频在线观看免费 | 亚洲欧洲中文日韩久久av乱码 | 婷婷去俺也去六月色 | 欧美成年网站 | 国产精品一区二区三区99 | 国产日韩欧美综合在线 | 国内精品久久久久久久97牛牛 | 狠狠做深爱婷婷综合一区 | www.色五月| 欧美精彩视频在线观看 | 欧美成a人片在线观看久 | 色视频国产直接看 | 婷婷色中文字幕 | 免费久久久 | 久久99国产精品久久99 | 成人国产精品电影 | 国产精品久久一卡二卡 | 欧美另类调教 | 免费成人av在线看 | 国产精品video | 免费成人短视频 | 精品一区二区三区久久 | 九九天堂 | 天天综合亚洲 | 最近中文字幕免费av | 97碰在线视频 | www.色午夜,com| 网站在线观看日韩 | 成人在线播放视频 | 亚州精品成人 | 日韩在线色视频 | 成年人免费在线观看网站 | 九月婷婷综合网 | 免费国产在线观看 | 人人超碰在线 | 中文字幕电影一区 | zzijzzij日本成熟少妇 | 精品久久精品久久 | 日韩av影视 | 黄色三级在线 | 国产美女在线精品免费观看 | 欧美大片aaa | 丝袜少妇在线 | 丁香一区二区 | 超碰在线色 | 一区二区中文字幕在线观看 | 国产亚洲一区二区在线观看 | 日韩欧美视频在线免费观看 | 人人射av | 欧美日性视频 | 国内免费的中文字幕 | 国产一区二区精品 | 久久精品视频中文字幕 | 国产人成一区二区三区影院 | 美州a亚洲一视本频v色道 | 99在线热播精品免费99热 | 99精品观看 | 午夜美女福利 | 在线天堂中文在线资源网 | 国产一级不卡毛片 | av线上免费观看 | 999久久a精品合区久久久 | 天堂在线免费视频 | 色午夜 | 国内外激情视频 | 日日麻批40分钟视频免费观看 | www.久久色.com | 久热色超碰 | 免费视频二区 | 91中文字幕视频 | 欧美一级日韩免费不卡 | 九九九九九国产 | av中文字幕网 | 国产精品18久久久久久久久 | 91视频a| 成人久久18免费网站 | 激情五月婷婷综合 | 久久艹艹 | 99视频免费看 | 国产精品毛片一区二区 | 欧美久久久久久久久久久 | 在线免费视频 你懂得 | 亚洲成av人影院 | 成人av网址大全 | 黄色在线视频网址 | 伊人婷婷激情 | 久久精品爱视频 | 国产精国产精品 | 国产五月色婷婷六月丁香视频 | 国产特级毛片aaaaaaa高清 | 免费不卡中文字幕视频 | 欧洲精品视频一区 | 伊人影院在线观看 | 国产高清在线精品 | 最近中文字幕完整高清 | 成人在线视频免费观看 | 超碰在线观看av.com | 最近2019年日本中文免费字幕 | 免费精品国产va自在自线 | 天天色天天艹 | 日本精品视频免费 | 日韩电影中文,亚洲精品乱码 | av电影一区二区三区 | 超碰国产在线 | 精品天堂av| 99综合电影在线视频 | 久久理论电影 | 免费久久99精品国产 | h动漫中文字幕 | 国产成人久久精品亚洲 | 国产一区二区不卡视频 | 欧美黄色成人 | 国产一区高清在线观看 | 国产91免费在线观看 | 免费看色网站 | 日本中文在线播放 | 日日夜夜天天久久 | 国产护士hd高朝护士1 | 在线中文日韩 | 欧美精品免费在线观看 | 99热在线这里只有精品 | 国产一区在线免费观看 | 免费国产在线精品 | 成人久久视频 | 91av蜜桃| 粉嫩av一区二区三区入口 | 五月天中文字幕mv在线 | 中文久草| 亚洲黄色三级 | 久久综合中文字幕 | 国产五月色婷婷六月丁香视频 | 91视频 - 114av | 免费看黄20分钟 | 伊人亚洲综合网 | 天天艹天天 | 亚洲综合欧美精品电影 | 激情亚洲综合在线 | 精品久久在线 | 欧美视频二区 | 成人免费影院 | 欧美日本啪啪无遮挡网站 | 手机版av在线 | 视频一区在线播放 | 天天操天天色天天射 | 一区二区视频在线看 | 97精品超碰一区二区三区 | 欧美日韩国产页 | 91精品播放 | 亚洲天堂网在线视频观看 | 正在播放久久 | 亚洲三级国产 | 亚洲精品美女在线观看播放 | 国产精品久久网 | 2019中文在线观看 | 亚洲砖区区免费 | 国产h片在线观看 | 欧美疯狂性受xxxxx另类 | 国产成人av | 超碰97在线看 | 99福利影院| 99中文视频在线 | 国产精品免费麻豆入口 | 国产精品成人一区二区 | 日日夜夜免费精品视频 | 国产色区| 天天性天天草 | 亚洲精品在线观 | 天天操月月操 | 免费av视屏 | 精品在线亚洲视频 | 香蕉视频国产在线观看 | 国产香蕉视频在线播放 | 国产国语在线 | 日韩在线色 | 日日麻批40分钟视频免费观看 | 国产在线中文字幕 | 免费在线观看不卡av | 日韩精品视频久久 | 九九九热精品 | 久草视频免费在线播放 | 免费av视屏 | 免费网站污 | 视频在线观看入口黄最新永久免费国产 | 欧美一级电影在线观看 | 天天操天天干天天摸 | 五月激情久久久 | 成年人视频在线免费观看 | 成人av在线影视 | 日韩激情小视频 | 97在线观视频免费观看 | 日韩在线不卡 | 久久久精品99 | 麻豆国产视频下载 | 国产精品综合久久 | 亚洲激情网站免费观看 | 日韩在观看线 | 97成人啪啪网| 有码视频在线观看 | 久久精品—区二区三区 | 国产精品中文久久久久久久 | 午夜精品福利影院 | 国产精品久久久久久久久久99 | 国产视频网站在线观看 | 在线黄色免费 | 91麻豆精品国产91久久久久久久久 | 一本到在线 | 成人羞羞免费 | 国产视频久久久 | 美女精品| 国产色在线观看 | 色停停五月天 | 激情黄色av| 少妇性bbb搡bbb爽爽爽欧美 | 久久国产福利 | 欧美午夜精品久久久久 | 月丁香婷婷 | 久久色网站 | 一 级 黄 色 片免费看的 | 欧美日韩在线免费视频 | 成人av在线看 | 国产精品手机在线 | 国产日产av| 久久专区 | av天天澡天天爽天天av | 精品亚洲va在线va天堂资源站 | 在线观看视频免费大全 | 中文字幕日韩精品有码视频 | 亚洲欧美成人网 | 成人精品久久 | 亚洲免费观看视频 | 激情视频免费在线观看 | 麻豆av电影| 91网免费看 | 91精品视频免费在线观看 | 久草视频在线免费播放 | 成片人卡1卡2卡3手机免费看 | 中国一级片视频 | 夜夜躁狠狠躁 | 国产精品久久久久久久久久久久午夜片 | 福利一区二区 | 正在播放 久久 | 亚洲人成人天堂h久久 | 97成人免费视频 | 亚洲a色| 亚洲精品视频第一页 | 国内小视频在线观看 | 久久久午夜视频 | 99这里只有久久精品视频 | 久久久久亚洲a | 黄色网址a | 成人h在线播放 | 美女久久精品 | 91麻豆文化传媒在线观看 | 久久午夜鲁丝片 | 久久精品第一页 | 四虎成人精品永久免费av九九 | 91麻豆精品国产91久久久久 | 久久久999免费视频 日韩网站在线 | 91久久国产露脸精品国产闺蜜 | 久久国产麻豆 | 福利精品在线 | 久久这里精品视频 | 色网站视频 | 一区二区视频在线免费观看 | 狠狠久久婷婷 | 免费亚洲视频在线观看 | 久久久久久黄色 | 亚洲人在线视频 | 四虎国产精品永久在线国在线 | 久久久久亚洲精品中文字幕 | 日韩精品在线看 | 欧美激情视频在线免费观看 | 免费视频成人 | 国产精品久久久久久久7电影 | 91精品国产一区 | 亚洲视频一 | 国产aaa免费视频 | 欧美日韩在线看 | 九九有精品 | 亚洲区另类春色综合小说校园片 | 色5月婷婷| 国产综合91 | 在线看一区二区 | 高清一区二区 | 日本精品一| 中文字幕人成一区 | av三级在线看 | 精品免费久久久久 | 日韩欧美一区二区三区在线 | 国产资源av | 人人澡人人添人人爽一区二区 | 久久激情电影 | 久久久久日本精品一区二区三区 | 麻豆精品国产传媒 | 亚洲精品视频在线免费播放 | 色综合亚洲精品激情狠狠 | 91手机在线看片 | 98精品国产自产在线观看 | 国产日韩欧美在线观看视频 | 久久av免费 | 久久,天天综合 | 国产伦精品一区二区三区四区视频 | 亚洲精品在线观看视频 | 91香蕉国产在线观看软件 | 国产色视频123区 | av千婊在线免费观看 | 国产精品久久久久久久久久不蜜月 | 国语黄色片 | 日韩免费观看av | 91在线精品观看 | 国产在线不卡一区 | 日韩精品一区不卡 | av中文电影 | 欧美性色网站 | 91av资源网 | 最新av免费在线 | 一级大片在线观看 | 亚洲精品视频免费看 | 精品一区二区在线免费观看 | 美女视频久久久 | 在线观看视频免费大全 | 国产成人一区二区三区在线观看 | 91麻豆精品久久久久久 | 99热精品久久 | 日本巨乳在线 | av最新资源 | 国产精品video | 99999精品| 99热这里只有精品国产首页 | 国产九九九九九 | www.香蕉视频在线观看 | 精品国产1区二区 | 国产色综合天天综合网 | 一区二区三区高清不卡 | 精品五月天| 欧美一二在线 | 亚洲国产精品va在线看 | 久草在线综合网 | 久久人人添人人爽添人人88v | 国产精彩视频一区 | 黄色91在线| 中文字幕一区在线观看视频 | 91手机视频 | 亚洲国产大片 | 在线观看91 | 性色av免费看 | 六月丁香婷婷网 | 免费a现在观看 | 欧美激情视频一区二区三区 | 超碰在线免费97 | 国产精品久久久久久久久久久杏吧 | 亚洲日本中文字幕在线观看 | 成人av电影免费观看 | 久久久久成人免费 | 日韩3区 | 久久亚洲综合色 | 亚洲视频免费在线观看 | 国产视频中文字幕在线观看 | 亚洲热久久 | 久久久久久久国产精品影院 | 青青草国产免费 | 国内精品久久久久影院优 | 久久夜视频 | 中文字幕在线不卡国产视频 | 狠狠操狠狠干天天操 | 国产精品21区 | 国产成人精品一区二区三区福利 | 中文字幕精品一区二区三区电影 | 亚洲成人资源在线观看 | 久久九九网站 | 久久久久99精品成人片三人毛片 | a在线视频v视频 | av免费看网站 | 中文字幕第 | 国产免费观看久久黄 | 97在线播放视频 | 亚洲精品国产麻豆 | 欧美91片 | 久久久www成人免费毛片 | 91高清不卡 | 超碰人人在线 | 国产精品久久麻豆 | 久久久高清一区二区三区 | 青青河边草手机免费 | 日韩av在线看 | 亚洲九九九在线观看 | 8090yy亚洲精品久久 | 97国产一区| 婷婷五综合 | 黄色网大全 | 全黄网站 | 开心色停停 | 国产精品专区在线 | 波多野结衣电影久久 | 在线看片成人 | 99热最新 | 九九在线视频 | 激情综合久久 | 国内精品久久久久久久影视麻豆 | 国产精成人品免费观看 | 91av电影在线| 日韩在线一区二区免费 | 久99精品 | 在线观看va | 夜夜操狠狠操 | 97色婷婷成人综合在线观看 | 国产视频一二区 | 久久久久激情视频 | 99久精品视频 | 久草五月| 欧美视频99| 少妇性色午夜淫片aaaze | 久久久久久久久久网站 | 久久这里只有精品首页 | 日本69hd| 免费av影视 | 五月婷婷激情综合网 | 天天拍天天色 | 日韩欧美xxxx | 毛片一区二区 | www久久久久 | 精品夜夜嗨av一区二区三区 | 在线免费观看羞羞视频 | 日韩精品一区在线观看 | 黄色三级久久 | 国产剧情一区二区 | 丁香六月婷婷激情 | 99视频在线观看一区三区 | 在线黄色观看 | 国产一区在线播放 | 亚洲国产精品久久久久婷婷884 | 久久久久久久久久久久电影 | 成人av资源在线 | 欧美精品视 | av在线免费在线 | 日本女人在线观看 | 国产精品久久 | 婷婷伊人综合亚洲综合网 | 在线观看中文字幕亚洲 | 婷婷丁香社区 | 久草在线视频首页 | 国产性xxxx | 国产黄色视| 亚洲成av片人久久久 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 在线精品视频免费播放 | 久久国产区| 久久综合欧美精品亚洲一区 | 激情五月婷婷综合网 | 国产韩国日本高清视频 | 婷婷综合伊人 | 美女视频免费精品 | 在线精品视频免费观看 | 黄色软件视频大全免费下载 | 九九九九免费视频 | 久久午夜精品 | 91影视成人 | 久久精品79国产精品 | 国外成人在线视频网站 | 一区二区三区日韩在线观看 | 91人人视频在线观看 | 久热av| 亚洲最新合集 | 黄色a三级| 中文av一区二区 | 国产精品久久久av久久久 | 国产精品网站一区二区三区 | 美女网站视频一区 | 免费韩国av | 亚洲精品久久久蜜桃直播 | 天天干天天做天天操 | 91网在线 | 天堂视频中文在线 | 精品免费视频. | 日日综合 | 欧美日韩国产mv | 国产三级精品在线 | 国产精品毛片一区二区在线 | 欧美性做爰猛烈叫床潮 | 91日韩在线播放 | 五月激情综合婷婷 | 在线观看一级 | 人人艹视频 | 超碰在线观看av | 国产在线一线 | 日本黄色免费观看 | 欧美日韩在线视频免费 | 黄色小网站免费看 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 欧美极品xxxxx | 久久精品波多野结衣 | 欧美激情片在线观看 | 免费观看成人网 | 日韩视频一二三区 | 三级午夜片 | 亚洲精品网站 | 在线视频 91 | 日韩av线观看 | 成人午夜剧场在线观看 | 在线免费观看的av | 成人午夜毛片 | 91最新视频在线观看 | 成人影视免费 | 狠狠精品| 91精品国产福利 | 亚洲国产精品成人av | 国产一区二区综合 | 国产精品一区二区果冻传媒 | 综合av在线 | 国产麻豆果冻传媒在线观看 | 亚洲开心激情 | 97视频免费在线看 | 欧美色噜噜噜 | 久久九精品| 狠狠久久综合 | 精品婷婷 | 天堂av最新网址 | 最新日韩在线观看视频 | av成人在线观看 | 日韩精品在线一区 | 91欧美在线| 天天干天天操天天干 | 蜜桃视频精品 | 在线看片一区 | 色婷婷综合久色 | 亚洲春色成人 | 欧美电影在线观看 | 国产又粗又硬又爽视频 | 制服丝袜一区二区 | 91精品视频免费看 | 日韩电影久久 | 国产三级在线播放 | 少妇精69xxtheporn| 国产精品破处视频 | 精品一区二区久久久久久久网站 | 国产精选在线观看 | 成年人免费电影 | 91自拍视频在线观看 | 久久免费播放视频 | av看片网址 | 久久精品久久精品 | 国产艹b视频 | 国产亚洲视频中文字幕视频 | av在线官网 | 日日干天天射 | 成人久久久精品国产乱码一区二区 | 91污在线观看 | 免费三级av | 精品国产乱码久久久久久三级人 | 久久黄色网址 | 日b黄色片| 美女露久久 | 精品a在线 | 超碰在线日本 | 亚洲视频久久 | 欧美成人精品在线 | 亚洲精品视频在线免费播放 | 99国产精品视频免费观看一公开 | 99久久精品无免国产免费 | 欧美色综合久久 | 91免费的视频在线播放 | 99久久影视| 人人狠狠综合久久亚洲婷 | 青青河边草观看完整版高清 | 亚洲五月婷 | 国产日韩在线看 | 一区二区丝袜 | 欧美 日韩 国产 中文字幕 | 成 人 a v天堂 | 天天射夜夜爽 | 久久一本综合 | 亚洲乱码精品久久久久 | 久久综合色天天久久综合图片 | 日韩精品无 | 国产精品色在线 | 国产精品第一页在线 | 黄色大全免费网站 | 高潮久久久 | 天天操比 | 国产精品美女www爽爽爽视频 | 国产一级片在线播放 | 日韩二区三区在线 | 中文字幕免费高清在线观看 | 日本在线中文 | 91九色视频观看 | 波多野结衣视频一区 | 亚洲视频在线视频 | 国产香蕉视频在线观看 | 99c视频高清免费观看 | 在线视频 一区二区 | 亚洲激情视频在线观看 | 国产拍在线| 日韩中文字幕a | 欧美在线视频日韩 | 日韩大片在线免费观看 | 在线观看的av | 久久久国际精品 | 免费观看性生交大片3 | 欧美激情第28页 | 狠狠88综合久久久久综合网 | 精品视频一区在线 | 免费在线色 | 亚洲精品中文在线观看 | 97超碰人人澡 | 天天弄天天操 | 久久9999久久| 国产96在线 | 国产小视频免费在线网址 | 最新中文字幕在线观看视频 | 久久免费视频在线观看6 | 成年人精品 | 97国产大学生情侣酒店的特点 | 人人精品久久 | 伊人婷婷综合 | 免费网站污 | 精品免费国产一区二区三区四区 | 日韩影视在线观看 | 在线观看精品黄av片免费 | 久久爱资源网 | 国产精品一区二区三区电影 | 亚洲精品色视频 | 精品久久久久久亚洲综合网站 | 综合网在线视频 | 国产免费观看久久黄 | 日韩美在线 | 久久久久免费 | 手机在线黄色网址 | 国产精品麻豆果冻传媒在线播放 | 在线视频一区观看 | av最新资源| 天天射天天干天天插 | 天天射天天爱天天干 | 久久久99精品免费观看app | 成人sm另类专区 | 亚洲精品乱码久久久久久写真 | 伊香蕉大综综综合久久啪 | 日韩视频免费观看高清完整版在线 | 操操操日日日干干干 | 天天亚洲| 亚洲午夜久久久影院 | 国产成人av一区二区三区在线观看 | 日韩免费观看一区二区 | 亚洲九九 | 另类五月激情 | 久久精品视频免费播放 | 91av在| 中字幕视频在线永久在线观看免费 | 超碰97在线资源 | 国产流白浆高潮在线观看 | 日本电影黄色 | 免费在线看成人av | 亚洲视频一级 | 精品嫩模福利一区二区蜜臀 | 人人盈棋牌 | 973理论片235影院9 | 香蕉视频4aa | 日本久热 | 久久久久久久国产精品影院 | www日日| 国产在线观看免 | 亚洲精品网址在线观看 | 国产在线a | 成人在线电影观看 | 亚洲天堂色婷婷 | 九九热在线观看 | 91中文字幕在线播放 | 国产一区二区三区免费在线 | 国产老太婆免费交性大片 | 久av电影| 婷婷丁香狠狠爱 | 国产精品麻豆视频 | 欧美成人h版电影 | 国产色a在线观看 | 在线播放你懂 | 青青河边草免费直播 | 在线免费av播放 | 夜又临在线观看 | 日韩在线观看 | 久操视频在线 | 天天天在线综合网 | 国产视频一区二区在线播放 | 午夜精品一区二区三区在线播放 | 久久久久久久久久亚洲精品 | 天天干 天天摸 天天操 | 亚洲精品看片 | 一级片观看 | 国产一级大片在线观看 | 国产九九九九九 | 国内精品久久久久影院日本资源 | 最近最新最好看中文视频 | 国产伦精品一区二区三区在线 | 久久黄色网页 | 香蕉网在线播放 | 久久婷婷久久 | 在线视频欧美精品 | 午夜影视一区 | 国产精品黄色影片导航在线观看 | 国产精品久久久久久麻豆一区 | 99久久精品国产系列 | 99精品视频在线观看 | 久久精品亚洲 | 9999亚洲 | 日日夜夜艹| 偷拍福利视频一区二区三区 | 人人爽人人插 | 国产精品精品国产婷婷这里av | 国产精品免费在线观看视频 | 日韩免费在线观看网站 | 成人网444ppp | 日本 在线 视频 中文 有码 | 深夜成人av | 亚州日韩中文字幕 | 亚洲视频在线看 | 四虎影视成人永久免费观看亚洲欧美 | 97精品国产97久久久久久免费 | 亚洲va欧美va国产va黑人 | 亚洲永久精品在线 | 亚洲午夜精品一区二区三区电影院 | 久久久婷 | 九九免费精品视频 | 久久公开免费视频 | 亚洲在线不卡 | 视频一区二区免费 | 综合久久久久久 | av怡红院 | 456免费视频 | 欧美成人xxxx | 亚洲成人精品国产 | 五月婷婷激情网 | 国产在线观看二区 | 中文字幕一区三区 | 免费在线黄网 | 国产成人久久av977小说 | 天天操天天谢 | 99在线精品视频在线观看 | 亚洲资源一区 | 久久久久国产成人精品亚洲午夜 | 久久婷婷精品 | 国产黄色在线观看 | 五月天六月婷 | 国产精品久久久久一区二区三区 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 欧美福利精品 | 69视频在线 | 日本精品一区二区三区在线观看 | 免费高清在线一区 | 日韩视频在线一区 | 久久精品视频3 | 亚洲乱码国产乱码精品天美传媒 | 亚洲天天综合网 | 在线三级av | 深夜激情影院 | 精品国产一区二区三区av性色 | 日韩久久久久久久久久久久 | 亚洲激情在线观看 | 国产精品视频不卡 | 欧美日韩亚洲第一 | 超碰免费久久 | 欧美激情精品久久久 | 婷婷色在线资源 | 天堂av影院 | 超碰公开在线 | 99久久视频| 色网站黄 | 人人插人人玩 | 最新国产视频 | 亚洲成色777777在线观看影院 | 在线视频观看91 | 欧美性黄网官网 | 天天干天天干天天干 | 97色在线观看免费视频 | 黄色a一级片| 久久久久久97三级 | 日韩成人黄色 | 中文字幕第一页在线视频 | 国产精品99免视看9 国产精品毛片一区视频 | 亚洲男人天堂2018 | 国产区欧美 | 色视频在线观看免费 | 日本动漫做毛片一区二区 | 国产精品久久久久久吹潮天美传媒 | 在线观看完整版免费 | 久久高清av| 国产精品情侣视频 | 99成人免费视频 | 中文字幕在线观看一区 | 亚洲首页| 国产精品精品久久久 | 网站在线观看你们懂的 | 午夜国产福利视频 | 免费观看国产成人 | 色是在线视频 | 国产一级高清视频 | 精品福利国产 | 亚洲天堂网站视频 | 狠狠色丁香婷综合久久 | 色综合久久88色综合天天免费 | 五月香视频在线观看 | 在线观看理论 | 久久午夜色播影院免费高清 | 免费观看性生活大片 | www亚洲精品 | 精品国产一区二区三区久久 | 五月婷婷欧美 | 欧美综合在线视频 | 免费亚洲精品视频 | 欧美性生爱 | 久久少妇免费视频 | 国产成在线观看免费视频 | 91在线观看黄 | 亚洲精品高清在线观看 | 天天做天天干 | 高清av免费看 | 久久免费视频6 | 热99在线视频 | 日韩在线字幕 | 激情视频免费观看 | 亚洲国产视频直播 | 久久久久久久久久久久久9999 | 麻豆成人小视频 | 日韩高清在线一区 | 91夫妻视频 | 亚洲自拍偷拍色图 | 91视频午夜| 亚洲毛片在线观看. | 日韩亚洲在线观看 | 国产精品美女www爽爽爽视频 | 成人黄色大片网站 | 91免费国产在线观看 | 国产偷v国产偷∨精品视频 在线草 | www.五月天激情 | 欧美亚洲另类在线视频 | 午夜少妇 | 亚洲视频在线观看网站 | 中国美女一级看片 | 日韩精品高清视频 | 手机av在线网站 | 四虎精品成人免费网站 | 黄色av一区二区 | www色片 | 日本动漫做毛片一区二区 | 美女视频黄网站 |