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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 框架 之 Scrapy 爬虫(二)

發布時間:2023/12/20 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 框架 之 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運行流程大概如下:

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

    Linux:pip3 install scrapyWindows:a. pip3 install wheelb. 下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twistedc. 進入下載目錄,執行 pip3 install Twisted?17.1.0?cp35?cp35m?win_amd64.whld. pip3 install scrapye. 下載并安裝pywin32:https://sourceforge.net/projects/pywin32/files/

    二、基本使用

    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.項目結構以及爬蟲應用簡介

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

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

    爬蟲1.py

    import scrapyclass XiaoHuarSpider(scrapy.spiders.Spider):name = "spidername" # 爬蟲名稱 *****allowed_domains = ["spider.com"] # 允許的域名start_urls = ["http://www.flepeng.com/", # 起始URL]def parse(self, response):# 訪問起始URL并獲取結果后的回調函數

    關于windows編碼

    import sys,os sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

    3.?小試牛刀

    import scrapy from scrapy.selector import HtmlXPathSelector # 新版的好像已經棄用,使用Selector from scrapy.http.request import Requestclass DigSpider(scrapy.Spider):name = "dig" # 爬蟲應用的名稱,通過命令啟動爬蟲時,使用此參數allowed_domains = ["chouti.com"] # 允許的域名start_urls = ['http://dig.chouti.com/',] # 起始URLhas_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 not in self.has_request_set: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

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

    scrapy crawl dig?--nolog # nolog 表示不打印日志

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

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

    4. 選擇器

    xpath的路徑表達式:

    表達式

    描述
    nodename選取此節點的所有子節點。
    /從根節點選取。
    //從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。
    .選取當前節點。
    ..選取當前節點的父節點。
    @選取屬性。

    在下面的表格中,列出了一些路徑表達式以及表達式的結果:

    路徑表達式結果
    bookstore選取 bookstore 元素的所有子節點。
    /bookstore

    選取根元素 bookstore。

    注釋:假如路徑起始于正斜杠( / ),則此路徑始終代表到某元素的絕對路徑!

    bookstore/book選取屬于 bookstore 的子元素的所有 book 元素。
    //book選取所有 book 子元素,而不管它們在文檔中的位置。
    bookstore//book選擇屬于 bookstore 元素的后代的所有 book 元素,而不管它們位于 bookstore 之下的什么位置。
    //@lang選取名為 lang 的所有屬性。
    #!/usr/bin/env python # -*- coding:utf-8 -*- from?scrapy.selector?import?Selector, HtmlXPathSelector # 新版好像已棄,使用Selector,用法和這個一樣 from?scrapy.http?import?HtmlResponse html?=?"""<!DOCTYPE html> <html><head lang="en"><meta charset="UTF-8"><title></title></head><body><ul><li class="item-"><a id='i1' href="link.html">first item</a></li><li class="item-0"><a id='i2' href="llink.html">first item</a></li><li class="item-1"><a href="llink2.html">second item<span>vv</span></a></li></ul><div><a href="llink2.html">second item</a></div></body> </html> """response?=?HtmlResponse(url='http://example.com', body=html,encoding='utf-8') # hxs = HtmlXPathSelector(response) # print(hxs) # hxs = Selector(response=response).xpath('//a') # 從根目錄下查找所有 a 元素 # print(hxs) # hxs = Selector(response=response).xpath('//a[2]') # print(hxs) # hxs = Selector(response=response).xpath('//a[@id]') # print(hxs) # hxs = Selector(response=response).xpath('//a[@id="i1"]') # print(hxs) # hxs = Selector(response=response).xpath('//a[@href="link.html"][@id="i1"]') # print(hxs) # hxs = Selector(response=response).xpath('//a[contains(@href, "link")]') # print(hxs) # hxs = Selector(response=response).xpath('//a[starts-with(@href, "link")]') # print(hxs) # hxs = Selector(response=response).xpath('//a[re:test(@id, "i\d+")]') # print(hxs) # hxs = Selector(response=response).xpath('//a[re:test(@id, "i\d+")]/text()').extract() # print(hxs) # hxs = Selector(response=response).xpath('//a[re:test(@id, "i\d+")]/@href').extract() # print(hxs) # hxs = Selector(response=response).xpath('/html/body/ul/li/a/@href').extract() # print(hxs) # hxs = Selector(response=response).xpath('//body/ul/li/a/@href').extract_first() # print(hxs) # ul_list = Selector(response=response).xpath('//body/ul/li') # for item in ul_list: #???? v = item.xpath('./a/span') #???? # 或 #???? # v = item.xpath('a/span') #???? # 或 #???? # v = item.xpath('*/a/span') #???? print(v)

    示例:自動登陸抽屜并點贊

    # -*- coding: utf-8 -*- import scrapy from scrapy.selector import HtmlXPathSelector from scrapy.http.request import Request from scrapy.http.cookies import CookieJar from scrapy import FormRequestclass ChouTiSpider(scrapy.Spider):# 爬蟲應用的名稱,通過此名稱啟動爬蟲命令name = "chouti"# 允許的域名allowed_domains = ["chouti.com"]cookie_dict = {}has_request_set = {}def start_requests(self):url = 'http://dig.chouti.com/'# return [Request(url=url, callback=self.login)]yield Request(url=url, callback=self.login)def login(self, response):cookie_jar = CookieJar()cookie_jar.extract_cookies(response, response.request)for k, v in cookie_jar._cookies.items():for i, j in v.items():for m, n in j.items():self.cookie_dict[m] = n.valuereq = Request(url='http://dig.chouti.com/login',method='POST',headers={'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},body='phone=8615131255089&password=pppppppp&oneMonth=1',cookies=self.cookie_dict,callback=self.check_login)yield reqdef check_login(self, response):req = Request(url='http://dig.chouti.com/',method='GET',callback=self.show,cookies=self.cookie_dict,dont_filter=True)yield reqdef show(self, response):# print(response)hxs = HtmlXPathSelector(response)news_list = hxs.select('//div[@id="content-list"]/div[@class="item"]')for new in news_list:# temp = new.xpath('div/div[@class="part2"]/@share-linkid').extract()link_id = new.xpath('*/div[@class="part2"]/@share-linkid').extract_first()yield Request(url='http://dig.chouti.com/link/vote?linksId=%s' %(link_id,),method='POST',cookies=self.cookie_dict,callback=self.do_favor)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' % pageimport hashlibhash = hashlib.md5()hash.update(bytes(page_url,encoding='utf-8'))key = hash.hexdigest()if key in self.has_request_set:passelse:self.has_request_set[key] = page_urlyield Request(url=page_url,method='GET',callback=self.show)def do_favor(self, response):print(response.text)

    ?處理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)

    注意:settings.py中設置DEPTH_LIMIT = 1來指定“遞歸”的層數。

    5. 格式化處理 pipelines

    上述實例只是簡單的處理,所以在parse方法中直接處理。如果對于想要獲取更多的數據處理,則可以利用Scrapy的items將數據格式化,然后統一交由pipelines來處理。

    spiders/xiahuar.py

    import scrapy from scrapy.selector import HtmlXPathSelector from scrapy.http.request import Request from scrapy.http.cookies import CookieJar from scrapy import FormRequestclass XiaoHuarSpider(scrapy.Spider):name = "xiaohuar"allowed_domains = ["xiaohuar.com"]start_urls = ["http://www.xiaohuar.com/list-1-1.html",]# setting 中的配置pipelines# custom_settings = {# 'ITEM_PIPELINES':{# 'spider1.pipelines.JsonPipeline': 100# }# }has_request_set = {}def parse(self, response):# 分析頁面# 找到頁面中符合規則的內容(校花圖片),保存# 找到所有的a標簽,再訪問其他a標簽,一層一層的搞下去hxs = HtmlXPathSelector(response)items = hxs.select('//div[@class="item_list infinite_scroll"]/div')for item in items:src = item.select('.//div[@class="img"]/a/img/@src').extract_first()name = item.select('.//div[@class="img"]/span/text()').extract_first()school = item.select('.//div[@class="img"]/div[@class="btns"]/a/text()').extract_first()url = "http://www.xiaohuar.com%s" % srcfrom ..items import XiaoHuarItemobj = XiaoHuarItem(name=name, school=school, url=url)yield objurls = hxs.select('//a[re:test(@href, "http://www.xiaohuar.com/list-1-\d+.html")]/@href')for url in urls:key = self.md5(url)if key in self.has_request_set:passelse:self.has_request_set[key] = urlreq = Request(url=url,method='GET',callback=self.parse)yield req@staticmethoddef md5(val):import hashlibha = hashlib.md5()ha.update(bytes(val, encoding='utf-8'))key = ha.hexdigest()return key

    items

    import scrapyclass XiaoHuarItem(scrapy.Item):name = scrapy.Field()school = scrapy.Field()url = scrapy.Field()

    pipelines

    import json import os import requestsclass JsonPipeline(object):def __init__(self):self.file = open('xiaohua.txt', 'w')def process_item(self, item, spider):v = json.dumps(dict(item), ensure_ascii=False)self.file.write(v)self.file.write('\n')self.file.flush()return itemclass FilePipeline(object):def __init__(self):if not os.path.exists('imgs'):os.makedirs('imgs')def process_item(self, item, spider):response = requests.get(item['url'], stream=True)file_name = '%s_%s.jpg' % (item['name'], item['school'])with open(os.path.join('imgs', file_name), mode='wb') as f:f.write(response.content)return item

    settings

    ITEM_PIPELINES = {'spider1.pipelines.JsonPipeline': 100,'spider1.pipelines.FilePipeline': 300, } # 后面的整數值,確定了他們運行的順序,item按數字從低到高的順序,通過pipeline,通常將這些數字定義在0-1000范圍內。

    對于pipeline可以做更多,如下:

    自定義pipeline格式

    from scrapy.exceptions import DropItemclass CustomPipeline(object):def __init__(self,v):self.value = vdef process_item(self, item, spider):# 運行pipeline時會調用此函數,操作并進行持久化# return表示會被后續的pipeline繼續處理return item# 表示將item丟棄,不會被后續pipeline處理# raise DropItem()@classmethoddef from_crawler(cls, crawler):# 初始化時候,用于創建pipeline對象val = crawler.settings.getint('MMMM')return cls(val)def open_spider(self,spider):# 爬蟲開始執行時,調用print('000000')def close_spider(self,spider):# 爬蟲關閉時,被調用print('111111')

    6.中間件

    爬蟲中間件

    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

    下載器中間件

    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

    7. 自定制命令

    • 在spiders同級創建任意目錄,如:commands
    • 在其中創建 crawlall.py 文件 (此處文件名就是自定義的命令)

    crawlall.py

    from scrapy.commands import ScrapyCommand from scrapy.utils.project import get_project_settingsclass Command(ScrapyCommand):requires_project = Truedef syntax(self): # 命令的參數return '[options]'def short_desc(self): # 命令的描述return 'Runs all of the spiders'def run(self, args, opts):spider_list = self.crawler_process.spiders.list()for name in spider_list:self.crawler_process.crawl(name, **opts.__dict__)self.crawler_process.start()
    • 在settings.py 中添加配置 COMMANDS_MODULE = '項目名稱.目錄名稱'
    • 在項目目錄執行命令:scrapy crawlall?

    單個爬蟲

    import sys from scrapy.cmdline import executeif __name__ == '__main__':execute(["scrapy","github","--nolog"])

    8. 自定義擴展

    自定義擴展時,利用信號在指定位置注冊制定操作

    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')

    9. 避免重復訪問

    scrapy默認使用 scrapy.dupefilter.RFPDupeFilter 進行去重,相關配置有:

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

    自定義URL去重操作

    class RepeatUrl: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)

    10.其他

    settings

    # -*- 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, # }

    此文為轉載https://www.cnblogs.com/wupeiqi/articles/6229292.html

    總結

    以上是生活随笔為你收集整理的Python 框架 之 Scrapy 爬虫(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    亚洲免费不卡 | 国产精品99免费看 | 日本大片免费观看在线 | 欧美肥妇free | 国产 欧美 在线 | 久久综合精品一区 | 99精品在线 | 国产一区二区在线视频观看 | 日韩av高清 | 免费成人黄色 | 亚洲免费精品一区二区 | 日韩天堂在线观看 | 欧美一区,二区 | 久99久精品视频免费观看 | 亚洲免费不卡 | 成人av影视 | 欧美午夜久久久 | 欧美少妇的秘密 | 狠狠躁夜夜躁人人爽视频 | 精品在线99 | 日韩综合视频在线观看 | 91麻豆精品久久久久久 | 精品视频999 | 日本特黄一级 | 午夜视频在线观看一区二区三区 | 麻豆成人小视频 | 国产 日韩 中文字幕 | 在线看片日韩 | 久久成年人网站 | 久久免费视频国产 | 久草在线这里只有精品 | 亚洲天天摸日日摸天天欢 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产99久久久欧美黑人 | 国产一区二区视频在线播放 | 一区二区三区福利 | 国产精品久久久久一区二区国产 | 综合激情| 日韩aⅴ视频 | 精品日韩在线一区 | 欧美在一区 | 伊人电影在线观看 | 欧美性色综合网站 | 久久优| 婷婷婷国产在线视频 | 视频一区二区在线观看 | 国产中文在线视频 | 久久午夜色播影院免费高清 | 亚洲第一区精品 | 丁香激情综合 | 国产精品欧美久久久久三级 | 久久精品国产亚洲精品2020 | 日韩亚洲精品电影 | 少妇精品久久久一区二区免费 | 激情在线网址 | 干综合网 | 狠狠操狠狠插 | 欧美有色| 久久97超碰 | 色香蕉在线视频 | 日韩在线欧美在线 | 国产资源av| 狠狠色噜噜狠狠 | 狠狠色婷婷丁香六月 | 91麻豆精品91久久久久同性 | 欧美日韩91 | 99在线视频播放 | 99久久精| 美女视频黄频大全免费 | 国产综合在线视频 | 国产精品成人av久久 | 99久久久久免费精品国产 | 丁香国产视频 | 亚洲国产精品一区二区久久,亚洲午夜 | 97视频一区 | 免费在线观看av的网站 | 免费看国产一级片 | 日本一区二区三区视频在线播放 | 欧美日韩伦理在线 | 免费高清看电视网站 | av一区在线 | 久久丁香| 亚洲在线色 | 成全在线视频免费观看 | 韩国av永久免费 | a在线一区 | 亚洲精品动漫成人3d无尽在线 | 美国人与动物xxxx | 一本—道久久a久久精品蜜桃 | 免费亚洲视频 | 曰韩在线 | 欧美激情精品久久久久久免费 | 久久免费美女视频 | 久久久久久久久久久网站 | 久久精品国产免费看久久精品 | 99在线精品视频观看 | 天天草天天干天天射 | 国产精品久久久久久久久久 | 精品免费99久久 | 亚洲精品资源在线 | 久草免费福利在线观看 | 成人中文字幕+乱码+中文字幕 | 亚洲欧美日韩一级 | 久久一区二区三区国产精品 | 久久 精品一区 | 亚洲国产资源 | 国内精品国产三级国产aⅴ久 | 天堂av官网 | 在线一区二区三区 | 日本三级全黄少妇三2023 | 国产精品av久久久久久无 | 一本一本久久a久久精品综合 | 人人舔人人射 | 超碰大片| 欧美日韩高清一区二区 | 最近高清中文字幕在线国语5 | 欧美日韩高清在线 | 国产精品一区二区久久精品爱微奶 | 国产精品一区二区在线免费观看 | 亚洲欧美怡红院 | 国产福利专区 | 久久久久久久综合色一本 | 成年人视频在线 | 精品视频 | 婷婷色网视频在线播放 | 久久激情片 | 黄色不卡av | 正在播放一区二区 | 国产视频在线一区二区 | 一二区精品 | 久久香蕉电影 | 91探花系列在线播放 | 亚洲国产精品va在线看黑人动漫 | 一区二区不卡在线观看 | 在线免费黄色毛片 | 天天干天天做 | 亚洲日本中文字幕在线观看 | 91一区二区三区在线观看 | 欧美色图一区 | 亚洲涩涩网 | 丁香婷婷成人 | 91精品在线播放 | 国产免码va在线观看免费 | 99精品视频免费全部在线 | 深夜免费小视频 | 91免费国产在线观看 | 免费a视频 | 九九在线视频免费观看 | 成人久久久久 | 国产午夜精品一区二区三区 | 日韩在线视频线视频免费网站 | 最近更新中文字幕 | 天天干天天操天天 | 久久久久伊人 | 午夜精品久久久久 | 永久黄网站色视频免费观看w | 97超碰在线免费观看 | 九九综合在线 | 日韩在线三级 | 久久首页| 国产精品美女久久 | 久久成人国产精品一区二区 | 在线观看a视频 | 欧美精品国产精品 | 欧美一进一出抽搐大尺度视频 | 激情视频一区二区三区 | 国产中文字幕视频 | 九色视频网 | 最新国产精品久久精品 | 青草视频在线看 | 午夜在线观看一区 | 精品人人人 | 在线观看一区二区精品 | 97色婷婷人人爽人人 | 日韩黄色软件 | 日韩一区二区三区在线观看 | 色综合久久久久久久久五月 | 在线视频日韩 | 久久国产精品99国产精 | 国产在线看| 国产成人精品久久 | 精品亚洲视频在线观看 | 五月婷婷丁香综合 | 欧美精品一区二区免费 | 成人午夜性影院 | 国产成人精品久久久 | 国产精品一区二区av日韩在线 | 91丨九色丨蝌蚪丨老版 | 国产视频不卡 | 婷婷五月情 | 中文字幕在线观 | 在线精品亚洲 | 天天插综合网 | 日韩在线观 | 一区二区三区在线免费观看视频 | 亚洲精品男人的天堂 | 国产免费a | 欧美激情综合五月色丁香小说 | 啪啪动态视频 | 久久91久久久久麻豆精品 | 日日干夜夜骑 | 瑞典xxxx性hd极品 | 少妇bbb | 一区二区视频电影在线观看 | 日韩免费中文字幕 | 久久亚洲欧美日韩精品专区 | 精品女同一区二区三区在线观看 | 日韩av中文在线观看 | 精品免费99久久 | 免费三级a| 91精品啪啪 | 国产在线中文字幕 | 国产亚洲一区二区三区 | 一区二区不卡在线观看 | 午夜av激情 | 奇米影视999 | 亚洲精品456在线播放乱码 | 99视频免费播放 | 高清有码中文字幕 | 激情影音 | 99精品国产一区二区三区不卡 | 免费黄色激情视频 | 国产无吗一区二区三区在线欢 | 青青视频一区 | 亚洲国产精品日韩 | 日本三级大片 | 超碰97免费 | 国产精品久久久久久久毛片 | 六月久久婷婷 | 超碰在线9 | 日韩精品在线免费播放 | 日本久久久久久久久久 | 91精品国产综合久久久久久久 | 欧洲一区二区在线观看 | 小草av在线播放 | 最近中文字幕高清字幕在线视频 | 99久久精品国产一区二区三区 | 国产成a人亚洲精v品在线观看 | 国产看片网站 | 美女久久一区 | www.久久久精品 | 最近中文字幕在线中文高清版 | 久久久免费看片 | 日本精品一区二区 | 国产 日韩 欧美 自拍 | 久草视频播放 | 久久怡红院| 久久久久久久国产精品 | 欧美精品小视频 | 日韩二区精品 | 中文字幕影片免费在线观看 | 国产在线观看高清视频 | 伊人成人激情 | 五月天激情开心 | 中文字幕二区在线观看 | 91麻豆精品国产 | 久久99精品久久久久久清纯直播 | 四虎成人精品永久免费av九九 | 精品主播网红福利资源观看 | 日韩精品黄 | 色天天综合久久久久综合片 | 日韩在线观看一区二区三区 | 日韩av中文字幕在线 | 超碰人人乐 | 最近日本中文字幕 | 亚洲国产欧美在线人成大黄瓜 | 日韩av伦理片 | 日韩av一卡二卡三卡 | 欧美狠狠操 | 又黄又刺激的视频 | 日韩高清免费无专码区 | 一区在线观看视频 | 17婷婷久久www | 成人av动漫在线 | 99精品福利 | 色婷婷综合久久久久中文字幕1 | 操少妇视频| 97精品超碰一区二区三区 | 人人模人人爽 | 日本精品视频在线观看 | 亚州激情视频 | 久久久久成人精品免费播放动漫 | 亚洲成人av影片 | 激情网五月天 | 色综合天天 | 成人福利在线播放 | 日韩簧片在线观看 | 日本中文乱码卡一卡二新区 | 91成品人影院 | 国产麻豆精品久久 | 人人玩人人爽 | 久久久麻豆视频 | 91字幕 | 美女免费电影 | 999抗病毒口服液 | 国产亚洲人成网站在线观看 | 成人免费观看网站 | 欧美日韩调教 | 久久精品视频在线观看 | 午夜精品久久久久久久99热影院 | 91丨九色丨首页 | 又黄又爽的免费高潮视频 | 久久国内精品视频 | 97夜夜澡人人爽人人免费 | 久久国产精品久久久久 | 成人免费在线观看入口 | 欧美精品久久久久久久久久白贞 | 五月丁婷婷 | 国产直播av | 亚洲精品中文字幕在线观看 | 亚洲色图 校园春色 | 免费看的黄色 | 久久久久在线观看 | 在线观看黄色大片 | 国内外成人在线 | 在线成人短视频 | 97在线观看免费观看高清 | 特级西西444www高清大视频 | 中文字幕国产一区二区 | 亚洲成免费 | 国产精品久久嫩一区二区免费 | 91福利视频久久久久 | 在线免费观看一区二区三区 | 成人免费视频观看 | 国产亚洲精品久久久久久大师 | 热精品| 在线观看 国产 | 99国产成+人+综合+亚洲 欧美 | 日韩av在线影视 | 9999在线视频| 久久在线视频精品 | 麻豆影视在线播放 | 国产在线日韩 | 综合色中文 | 亚洲va欧美 | 国产成人av电影在线 | 欧美日韩在线观看不卡 | 亚洲激情小视频 | 色婷婷六月天 | 亚洲va天堂va欧美ⅴa在线 | 亚洲国产操| 日韩有码欧美 | 91九色精品国产 | 超碰激情在线 | 国产在线精 | 91一区二区在线 | 香蕉视频在线播放 | 亚洲jizzjizz日本少妇 | 亚洲综合色视频在线观看 | 色婷婷综合五月 | 人人澡视频 | www.久久爱.cn | 欧美日韩xx | 久久激情视频 久久 | av丁香| 伊人影院在线观看 | 一区二区精品视频 | 黄色影院在线播放 | 日韩中字在线 | 久久精品福利视频 | 香蕉久久国产 | 日本三级国产 | av天天澡天天爽天天av | 色吊丝在线永久观看最新版本 | 91av视频| 久草在线免费在线观看 | 香蕉手机在线 | 一区二区三区播放 | 一二三区av | 天天做天天爽 | 国产成人一级电影 | 成人国产在线 | 香蕉97视频观看在线观看 | 91精品福利在线 | 亚洲视频在线视频 | 国产高清精 | 九九免费在线观看视频 | 天天曰视频| h视频在线看 | 国产午夜精品理论片在线 | 成人午夜电影久久影院 | 欧美精品中文 | 在线中文字幕av观看 | 久久婷婷精品视频 | 国产色视频一区二区三区qq号 | 欧美激情h| 三上悠亚一区二区在线观看 | 日韩免费观看一区二区 | 久久国产精品99久久人人澡 | 成人a视频 | 天天爽天天摸 | 久久精品99精品国产香蕉 | 国产精品99久久久久久久久久久久 | 91桃色免费视频 | 久久精品国产精品 | 久久免费精彩视频 | 草久视频在线观看 | 天天爽夜夜爽人人爽一区二区 | 青草视频在线 | 国产色就色 | 欧美精品三级在线观看 | 国产成人av在线 | 97精品国产97久久久久久 | 九草视频在线 | av3级在线 | 天天干天天干天天射 | 日韩免费福利 | 中文字幕一区二区三 | 欧美久久久久久久久久久久 | 日韩剧情 | 亚洲欧洲精品在线 | 不卡电影免费在线播放一区 | 久久色亚洲 | 久久爽久久爽久久av东京爽 | 成人小视频在线 | 欧美日韩在线精品 | 国产 成人 久久 | 青青草国产精品 | 中文字幕电影一区 | 干干日日| 91中文字幕在线视频 | 碰碰影院 | 国产亚洲欧洲 | 美女在线免费观看视频 | 在线观看中文字幕亚洲 | 欧美精品久久久久久 | 久久亚洲私人国产精品va | av成人免费 | 国产日韩精品一区二区三区 | 久久精品99国产精品酒店日本 | 国产高清在线不卡 | 午夜精品一区二区三区在线视频 | 在线观看免费黄视频 | 国产一级一片免费播放放 | 狠狠干 狠狠操 | 日日噜噜噜噜夜夜爽亚洲精品 | 香蕉视频国产在线 | 亚洲精品视频在线观看网站 | 美女视频是黄的免费观看 | 亚洲天堂网站视频 | 免费观看午夜视频 | 91久久久国产精品 | 免费观看一级成人毛片 | 久久一本综合 | 天天天天天干 | 91高清免费看 | 欧美成人aa | 欧洲成人av| 日韩v在线91成人自拍 | 国产激情电影综合在线看 | 九七视频在线观看 | 91精品在线免费观看视频 | 国产亚洲欧美一区 | 鲁一鲁影院 | 国产精品国产三级国产专区53 | 最近久乱中文字幕 | 国产丝袜 | 国产中文字幕久久 | 成人va视频 | 99精品一级欧美片免费播放 | 欧美91片 | 日韩欧美一区二区三区免费观看 | av网站播放 | 99久久婷婷国产综合亚洲 | 精品毛片一区二区免费看 | 99情趣网视频 | 国产精品一区一区三区 | 美女国产 | 国产精品网红福利 | 亚洲精品美女在线观看播放 | 精品一区二区三区四区在线 | 精品9999 | 99精品一区 | 精品久久精品久久 | 99久久婷婷 | 在线成人小视频 | 天天操天天操天天操天天操天天操 | 久久久久中文 | 欧美动漫一区二区三区 | 精品日韩在线一区 | 狠狠的操你 | 国产一区二区在线播放 | 久草热久草视频 | 国产91成人在在线播放 | 美女福利视频 | 国产成人精品一区二 | 在线精品国产 | 成人av免费在线观看 | 国产夫妻av在线 | 一区二区视频欧美 | 久久久久久久久久久影院 | 九九亚洲精品 | 深爱激情开心 | 日韩精品第一区 | 美女久久久久 | 三级免费黄色 | 国产做a爱一级久久 | 欧美精品久久久久久久久久白贞 | 欧美 日韩 性 | 91在线一区二区 | 国产亚洲视频在线 | 丁香五婷 | 激情伊人五月天久久综合 | 夜夜爽天天爽 | 又湿又紧又大又爽a视频国产 | 亚洲精品综合欧美二区变态 | 青青河边草免费观看 | 国产亚洲婷婷免费 | 在线播放日韩 | 日本黄色特级片 | 高清国产一区 | 国产又粗又猛又色 | 日本电影久久 | 九九视频免费观看视频精品 | 日p视频在线观看 | 国产免费观看视频 | 深爱五月激情网 | 五月婷婷丁香 | 国产精品亚洲综合久久 | 91九色精品 | 亚洲视频免费在线观看 | 一本一本久久a久久精品综合妖精 | 成人毛片一区二区三区 | 一级特黄aaa大片在线观看 | 久久人人爽人人爽人人片av免费 | 在线观看视频黄 | 亚洲精品国产欧美在线观看 | 伊人久操 | 亚洲欧美日韩国产一区二区 | 在线看小早川怜子av | 成x99人av在线www | 久久久久久久久久久久久久免费看 | 欧美日韩国产在线一区 | 日本精品久久久久中文字幕 | 日韩欧美视频在线免费观看 | 欧美日韩三区二区 | 久久99电影 | 伊人狠狠色丁香婷婷综合 | 亚洲激情在线观看 | 成人av免费电影 | 亚洲性xxxx | 午夜av网站 | 一级黄色大片 | 尤物97国产精品久久精品国产 | 最近中文字幕第一页 | 国产精品18久久久久久久 | 亚洲美女在线一区 | 91视频一8mav | 日韩网站在线播放 | 五月婷婷毛片 | 91最新在线| 国产区精品区 | 日韩欧美亚州 | 国内精品久久久久久久 | 成人性生交大片免费看中文网站 | 91豆花在线观看 | 超碰在线人人97 | 在线看毛片网站 | 午夜精品区 | 色99导航 | 日韩中文字幕免费视频 | 97超碰在| 99热999| 欧美日韩国产精品一区二区亚洲 | 四虎精品成人免费网站 | 免费中午字幕无吗 | 国产成人一区三区 | 免费在线观看不卡av | 国内偷拍精品视频 | 国产成人免费av电影 | 婷婷精品在线 | 久久99操 | 国产粉嫩在线观看 | 欧美日韩国产精品一区 | 欧美日韩国产一区二 | 成人免费在线网 | 黄色视屏在线免费观看 | 中文字幕久久久精品 | 九9热这里真品2 | www.久久色 | 国产一区二区高清视频 | 91在线蜜桃臀 | 免费视频资源 | 成人毛片一区二区三区 | 不卡av电影在线 | 中文字幕电影一区 | 精品视频亚洲 | 久久久久久久久久久综合 | 91人人揉日日捏人人看 | 一二三久久久 | 亚洲乱码国产乱码精品天美传媒 | 欧美日韩观看 | 国产精品高潮久久av | 欧美91精品国产自产 | 伊人五月婷 | 天天色天天操综合 | 精品国产诱惑 | 久久久精品 一区二区三区 国产99视频在线观看 | 丰满少妇一级片 | 免费的成人av | 亚洲在线不卡 | 国产精品一区专区欧美日韩 | 成人黄色毛片 | 亚洲国产欧美一区二区三区丁香婷 | 丁香婷婷电影 | 最近中文字幕视频网 | 波多野结衣小视频 | 日韩免费看片 | 中文在线www | 九九热在线免费观看 | 久久久久久久久久久久久9999 | 久久免费视频在线 | 成人av直播 | 亚洲欧美成人综合 | 久久久精品日本 | 欧美黑吊大战白妞欧美 | 国产一区二区网址 | 草免费视频 | 夜夜视频欧洲 | 99久久精品国产亚洲 | 人人澡人人模 | 一区视频在线 | 欧美日韩国产精品一区 | 亚洲美女免费视频 | 91伊人影院 | 成人亚洲综合 | 久草免费在线视频 | 国产精品成人在线观看 | 中文字幕黄色 | 天天色棕合合合合合合 | 激情综合五月天 | 成人免费视频播放 | 亚洲综合视频在线 | 免费三级网 | 99国产情侣在线播放 | 婷婷亚洲综合五月天小说 | 久久国产精品一区二区三区四区 | 成年人黄色大片在线 | 亚洲国产视频直播 | 国产精久久久久久妇女av | 黄色片毛片 | 日本高清dvd | 日韩精品在线看 | 精品自拍网 | 91精品日韩 | 亚洲在线视频观看 | 黄色在线观看www | 黄色在线视频网址 | 亚洲色影爱久久精品 | 五月婷婷狠狠 | www.色爱 | 91插插插网站 | 999久久久国产精品 高清av免费观看 | 久久久久人人 | 久久av影视| 日韩在线观看免费 | 一二三区视频在线 | 婷久久 | 天天操天天色综合 | 91亚州 | 就要色综合 | 欧美久久久久久久久久久 | 美女网站在线观看 | 激情网站网址 | 久久国产精品色婷婷 | 亚洲日本中文字幕在线观看 | 国产精品成人自产拍在线观看 | 日韩一级电影网站 | 欧美精品久久久久a | 日韩深夜在线观看 | 91手机电视| 国产精品中文字幕在线观看 | 色播五月激情综合网 | 在线亚洲高清视频 | 欧美国产日韩在线视频 | 91在线视频观看免费 | 久久久久影视 | 99亚洲国产精品 | 亚洲视频电影在线 | 欧美一级免费高清 | 97免费在线视频 | 91在线国内视频 | 五月天网站在线 | 中文字幕精品视频 | 免费亚洲片| 国产视频一区在线免费观看 | 99综合视频| www.国产视频 | 亚洲欧洲一级 | 婷婷丁香狠狠爱 | 日日摸日日添夜夜爽97 | 婷婷国产在线观看 | 国产.精品.日韩.另类.中文.在线.播放 | 在线观看深夜视频 | 麻豆视频免费在线观看 | 91麻豆网 | 狠狠色丁香久久婷婷综合丁香 | 毛片基地黄久久久久久天堂 | 伊人精品在线 | 夜夜躁狠狠躁日日躁 | 日本精油按摩3 | 日韩精品一区二区免费视频 | 黄色一级免费电影 | 成人免费xxxxxx视频 | 精品国产_亚洲人成在线 | 国产亚洲精品久久久久久 | 色在线中文字幕 | 国产视频黄 | 久久成人久久 | 国产精品一区二区62 | 九九免费视频 | 亚洲三级精品 | 狠狠色噜噜狠狠狠狠2021天天 | 成人18视频 | 久久精品一区 | 欧美一级性 | 99精品视频中文字幕 | 99精品国产福利在线观看免费 | 天天综合网入口 | 韩国av免费 | 亚洲精品国产综合久久 | 国产成人61精品免费看片 | 欧美日韩调教 | www.综合网.com| 久久最新视频 | 超碰在线97观看 | 2023亚洲精品国偷拍自产在线 | 一区二区视频在线看 | 精品国产乱码久久久久久1区二区 | 欧美视频日韩 | 亚洲午夜久久久久 | 一级黄色片在线观看 | 国产午夜精品一区二区三区在线观看 | 亚洲成av人片在线观看 | 欧美激情在线网站 | 91久久久久久久一区二区 | 亚洲激情国产精品 | 制服丝袜成人在线 | 五月婷婷开心中文字幕 | av免费网站观看 | 麻豆一级视频 | 毛片网在线播放 | 精品欧美在线视频 | 日本一区二区三区视频在线播放 | 性色av香蕉一区二区 | 麻豆成人在线观看 | 欧美日本不卡视频 | 中文字幕一区二区三区四区 | 国产高清视频 | 美女视频网站久久 | 精品爱爱 | 国产精品亚州 | av片中文字幕 | 91香蕉亚洲精品 | 丁香在线观看完整电影视频 | 99久久婷婷国产精品综合 | 九草在线视频 | 在线成人一区二区 | 欧美国产精品久久久久久免费 | 在线观看日韩一区 | 国产精品九九九九九九 | 丁香资源影视免费观看 | 国产美女永久免费 | 国产精品福利一区 | 欧美极品裸体 | 夜色.com| 女女av在线| 欧美性极品xxxx娇小 | 精品国产乱码一区二 | 国内精品免费久久影院 | 国产午夜精品一区二区三区 | 亚洲播播 | 成人黄色大片在线观看 | 天堂av免费 | 国产精品美女久久久久久久 | 亚洲一区精品人人爽人人躁 | 久草久草在线观看 | a午夜在线 | 成人a视频 | 亚洲综合小说电影qvod | 国产精品国产三级在线专区 | 91福利视频免费观看 | 色全色在线资源网 | 91九色视频观看 | 国产最新网站 | 亚洲,播放 | 粉嫩av一区二区三区四区五区 | 中文字幕丝袜制服 | 国产精品视频最多的网站 | 久久精品之 | 天天插天天狠 | 国产小视频在线看 | 在线观看日本高清mv视频 | 最新av免费在线 | 亚洲一级片av | 日韩网站在线观看 | 97精品一区二区三区 | 久久九九影视 | 热久久在线视频 | 久久激情视频 久久 | 美女网站色免费 | 午夜精品久久久久久久99水蜜桃 | 欧美久久久久久久久久 | 六月激情 | 国产自产高清不卡 | 亚洲综合色视频 | 久久电影网站中文字幕 | 五月综合在线观看 | 国产黄大片在线观看 | 国产免费观看高清完整版 | 亚洲在线网址 | 911精品视频 | 色婷婷骚婷婷 | 狠狠色丁香久久婷婷综 | 在线 国产 亚洲 欧美 | 国产免费久久久久 | 国产日本在线播放 | 超碰在线人 | 国产xx在线| 亚洲精品理论片 | 激情综合狠狠 | 婷婷色网站 | 麻豆视频观看 | 国产精品女同一区二区三区久久夜 | 天天爽夜夜爽精品视频婷婷 | 在线观看日韩中文字幕 | 手机看片国产 | 日本系列中文字幕 | 久久婷婷国产色一区二区三区 | 久久精品人人做人人综合老师 | 韩国av一区二区三区在线观看 | 久久精品视频网 | 亚州av免费| 日韩电影在线观看一区二区 | 激情五月婷婷网 | 午夜三级影院 | 99在线视频免费观看 | 国产精品欧美久久久久久 | 久久综合日| 日本午夜免费福利视频 | 狠狠操电影网 | 特及黄色片 | 日本精品在线视频 | 日韩久久激情 | 在线亚洲观看 | 一级黄色片在线播放 | 国产精品欧美久久 | 少妇精品久久久一区二区免费 | 成年人视频在线 | 中文字幕不卡在线88 | 日韩免费电影在线观看 | 91刺激视频| 国产黄色精品在线 | 黄色小网站在线观看 | av中文字幕在线看 | 91自拍视频在线观看 | 亚洲全部视频 | 成年美女黄网站色大片免费看 | 人人爽久久涩噜噜噜网站 | 麻豆精品视频在线观看免费 | 免费观看v片在线观看 | 精品夜夜嗨av一区二区三区 | 人人爽人人爱 | 亚洲一级在线观看 | 国产精品 999 | 久久综合婷婷综合 | 精品毛片在线 | 免费福利片2019潦草影视午夜 | 国产色在线视频 | 一区二区三区 中文字幕 | av在线影视 | 欧美一级片在线观看视频 | 成人av电影免费在线观看 | 欧美成人日韩 | 国产精品资源在线观看 | 波多野结衣在线观看视频 | 一级性视频 | 最近免费中文字幕大全高清10 | 久99热| 91麻豆国产 | 国产尤物视频在线 | 久久高清毛片 | 久草在线视频首页 | 成全免费观看视频 | 91亚洲精品久久久蜜桃 | 国产精品黄色 | 亚洲激精日韩激精欧美精品 | 欧美一区二区视频97 | 久久久久久久国产精品视频 | 成人小视频免费在线观看 | av免费在线观看1 | 婷婷色 亚洲 | 九九热免费视频在线观看 | 日韩欧美一区二区三区视频 | av在线中文 | 在线观看免费一级片 | 国产精品一区一区三区 | 亚洲无人区小视频 | 精品久久久久久久久久久久久久久久 | 亚洲永久精品在线 | 国产探花 | 国产精品手机在线观看 | 一区二区中文字幕在线观看 | 麻花豆传媒一二三产区 | 天堂在线成人 | 黄色一级大片在线免费看产 | 久久国产品| 久久久久国产视频 | 四虎免费在线观看 | 狠狠操欧美 | 黄色三级av | 国产在线视频不卡 | 在线免费国产 | 国产精品大全 | 天天操夜操 | 啪啪凸凸 | 日日爱网站 | 久久久久久免费毛片精品 | 五月丁婷婷 | 久在线观看视频 | 国产一区二区三区四区大秀 | 国产成人61精品免费看片 | 国产精品自拍在线 | 在线观看免费高清视频大全追剧 | 月丁香婷婷| 国产a网站 | 久久免费视频5 | 2024av| 久久久国产精品免费 | 久久免费看av| 在线一区观看 | 亚洲精品小视频 | 综合色综合色 | 人人躁 | 日韩精品中文字幕有码 | 亚洲涩涩涩涩涩涩 | 久久成人资源 | 狠狠色伊人亚洲综合成人 | 国产精品一区二区麻豆 | 亚洲精品在线观看中文字幕 | 国产99久久久国产精品成人免费 | 日韩一片| 免费视频二区 | 在线视频国产区 | 成人黄色在线观看视频 | 97在线观看免费视频 | 中国一级片免费看 | 正在播放国产一区 | 国产免码va在线观看免费 | 国产黄色片在线 | 国产精国产精品 | 久草视频在线播放 | 在线精品亚洲一区二区 | 探花视频免费观看高清视频 | 亚洲高清91 | 日韩免费在线观看 | 国产精品视频永久免费播放 | 日韩av一区二区在线影视 | 欧美激情视频一二区 | 国产精品一区二区久久精品 | 人人澡人人澡人人 | 日韩免费网站 | 欧美午夜剧场 | 精品免费观看 | 成人免费视频视频在线观看 免费 | 人人盈棋牌 | 在线免费视频 你懂得 | 久久成年人 | 欧美孕交vivoestv另类 | 中文字幕国产视频 | 日三级在线 | 色吧久久 | 久久久影视 | 韩日精品视频 | 中文视频一区二区 | 久久久久国产成人精品亚洲午夜 | 日韩免费在线视频 | 日韩精品无 | 一区二区视频在线观看免费 | 97香蕉视频| av在线播放网址 | 久久精品国产美女 | 国产精品99久久久久的智能播放 | 国产成人综合图片 | 韩国一区二区三区在线观看 | 亚洲精品午夜久久久久久久 | 免费的国产精品 | 大胆欧美gogo免费视频一二区 | 欧美福利视频一区 | 国产一级视频 | 日韩视频免费观看高清 | 一区二区精品久久 | 男女免费视频观看 | 999久久国产精品免费观看网站 | 亚洲一区尤物 | 高清不卡一区二区三区 | 久久五月情影视 | 少妇bbbb搡bbbb桶|