3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

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

编程问答

爬虫教程( 2 ) --- 爬虫框架 Scrapy、Scrapy 实战

發布時間:2024/7/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫教程( 2 ) --- 爬虫框架 Scrapy、Scrapy 实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

From:https://piaosanlang.gitbooks.io/spiders/content/

?

scrapy-cookbook :https://scrapy-cookbook.readthedocs.io/zh_CN/latest/index.html

?

?

1.?爬蟲框架 Scrapy

?

爬蟲框架中比較好用的是 Scrapy 和 PySpider。

  • PySpider

    優點:分布式框架,上手更簡單,操作更加簡便,因為它增加了 WEB 界面,寫爬蟲迅速,集成了phantomjs,可以用來抓取js渲染的頁面。

    缺點:自定義程度低

    http://docs.pyspider.org/en/latest/Quickstart/

  • Scrapy

    優點:自定義程度高,比 PySpider 更底層一些,適合學習研究,需要學習的相關知識多,拿來研究分布式和多線程等等是最合適不過的。

    缺點:非分布式框架(可以用 scrapy-redis 分布式框架)

?

Scrapy 官方架構圖

?

Scrapy 主要包括了以下組件:

五個功能模塊

  • 引擎(Scrapy):用來處理整個系統的數據流處理, 數據流的指揮官,負責控制數據流(控制各個模塊之間的通信)
  • 調度器(Scheduler):?負責引擎發過來的請求URL,壓入隊列成一個URL的優先隊列, 由它來決定下一個要抓取的網址是什么, 同時去除重復的網址
  • 下載器(Downloader):?用于下載網頁內容, 并將網頁內容返回給引擎Scrapy
  • 爬蟲(Spiders):?爬蟲是主要干活的, 用于從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
  • 項目管道(item Pipeline):?負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析后,將被發送到項目管道,并經過幾個特定的次序處理數據。

三大中間件

  • 下載器中間件(Downloader Middlewares):?位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
  • 爬蟲中間件(Spider Middlewares):?介于 Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
  • 調度中間件(Scheduler Middewares):?介于 Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。

Spider參數

Spider 可以通過接受參數來修改其功能。
spider 參數一般用來定義初始URL或者指定限制爬取網站的部分。 您也可以使用其來配置spider的任何功能。
在運行 crawl 時添加 -a 可以傳遞 Spider 參數:

scrapy crawl myspider -a category=electronics

Spider 在構造器 (constructor) 中獲取參數:

import scrapyclass MySpider(Spider):name = 'myspider'def __init__(self, category=None, *args, **kwargs):super(MySpider, self).__init__(*args, **kwargs)self.start_urls = ['http://www.example.com/categories/%s' % category]

腳本運行 Scrapy:https://docs.scrapy.org/en/latest/topics/practices.html

?

?

1.1 Scrapy 介紹

?

Scrapy 是用 Python 開發的一個快速、高層次的 web 抓取框架;

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

整體架構大致如下

?

Scrapy 運行流程大概如下:

  • (1)調度器(Scheduler)從 待下載鏈接 中取出一個鏈接(URL)。
  • (2)調度器 啟動采集模塊,即 Spiders模塊。
  • (3)采集模塊 把 URL 傳給下載器(Downloader),下載器把資源下載下來。
  • (4)提取數據,抽取出目標對象(Item),交給 管道(item pipeline)進行進一步的處理。
  • (5)若是解析出的是鏈接(URL),則把 URL 插入到待爬取隊列當中。

?

Scrapy 安裝

文檔 官網文檔(英文):http://doc.scrapy.org/en/latest/intro/install.html

中文文檔(相對官網較老版本):http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html

安裝 Scrapy:pip install scrapy

驗證安裝:輸入 Scrapy 或者 scrapy(大小寫都可以)。如果提示如下命令,就證明安裝成功。

Linux Ubuntu 平臺

安裝 Scrapy
If you prefer to build the python dependencies locally instead of relying on system packages you’ll need to install their required non-python dependencies first:
sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
You can install Scrapy with pip after that:sudo pip install Scrapy
驗證安裝:安裝完畢之后,輸入 scrapy。?注意,這里linux下不要輸入Scrapy,linux依然嚴格區分大小寫的
如果出現如下提示,這證明安裝成功

?

?

1.2?Scrapy 入門教程

?

大致流程:

  • 創建一個 Scrapy 項目
  • 定義提取的結構化數據 (Item)
  • 編寫爬取網站的 spider 并提取出結構化數據 (Item)
  • 編寫 Item Pipeline 來存儲提取到的 Item (即結構化數據)
  • ?

    1.2.1 創建一個 Scrapy 項目

    在開始爬取之前必須創建一個新的 Scrapy 項目。 進入打算存儲代碼的目錄中。運行下列命令: scrapy startproject tutorial

    該命令將會創建包含下列內容的 tutorial 目錄,這些文件分別是:

    scrapy.cfg: 項目的配置文件;(用于發布到服務器) tutorial/: 該項目文件夾。之后將在此編寫Python代碼。 tutorial/items.py: 項目中的item文件;(定義結構化數據字段field). tutorial/pipelines.py: 項目中的pipelines文件;(用于存放執行后期數據處理的功能,定義如何存儲結構化數據) tutorial/settings.py: 項目的設置文件;(如何修改User-Agent,設置爬取時間間隔,設置代理,配置中間件等等) tutorial/spiders/: 放置spider代碼的目錄;(編寫爬取網站規則)

    windows 下創建:

    Pycharm 打開 Scrapy 工程:

    ?

    1.2.2 定義 Item

    Item 定義結構化數據字段,用來保存爬取到的數據;其使用方法和python字典類似。可以通過創建一個 scrapy.Item 類, 并且定義類型為 scrapy.Field 的類屬性來定義一個 Item。首先根據需要從騰訊招聘獲取到的數據對item進行建模。 我們需要從騰訊招聘中獲取 職位名稱、職位詳情頁url、職位類別、人數、工作地點以及發布時間。 對此,在item中定義相應的字段。編輯 tutorial 目錄中的 items.py 文件:

    import scrapyclass RecruitItem(scrapy.Item):name = scrapy.Field()detailLink = scrapy.Field()catalog = scrapy.Field()recruitNumber = scrapy.Field()workLocation = scrapy.Field()publishTime = scrapy.Field()

    ?

    1.2.3 編寫第一個爬蟲 (Spider)

    創建一個 Spider,必須繼承 'scrapy.Spider' 類, 需要定義以下三個屬性:

    • name:? spider 名字;必須是唯一的
    • start_urls: 初始的 URL 列表
    • parse(self, response):每個初始 URL 完成下載后被調用。這個函數要完成的功能:
      ? ? ? ? 1. 負責解析返回的網頁數據(response.body),提取結構化數據(生成item)
      ? ? ? ? 2. 生成需要下一頁的請求 URL。

    以下為我們的第一個 Spider 代碼,保存在 tutorial/spiders 目錄下的 tencent_spider.py 文件中:

    import scrapyclass RecruitSpider(scrapy.spiders.Spider):name = "tencent"allowed_domains = ["hr.tencent.com"]start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]def parse(self, response):f = open('tengxun.txt', 'wb')f.write(response.body)f.close()

    爬取

    進入項目的根目錄,執行下列命令啟動 spider:

    scrapy crawl tencent

    crawl tencent 啟動用于爬取 tencent 的 spider,您將得到類似的輸出:

    現在,查看當前目錄,會注意到有文件被創建了: tengxun.txt,正如我們的 parse 方法里做的一樣。
    注意,在剛啟動的時候會有一段 error 信息,不用理會(以后會說明,可現在自行查找結果)

    2016-08-11 13:07:35 [boto] ERROR: Caught exception reading instance data Traceback (most recent call last):File "/usr/lib/python2.7/dist-packages/boto/utils.py", line 210, in retry_urlr = opener.open(req, timeout=timeout)File "/usr/lib/python2.7/urllib2.py", line 429, in openresponse = self._open(req, data)File "/usr/lib/python2.7/urllib2.py", line 447, in _open'_open', req)File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chainresult = func(*args)File "/usr/lib/python2.7/urllib2.py", line 1228, in http_openreturn self.do_open(httplib.HTTPConnection, req)File "/usr/lib/python2.7/urllib2.py", line 1198, in do_openraise URLError(err) URLError: <urlopen error timed out>

    ?

    剛才發生了什么?

    • Scrapy 為 Spider 的 start_urls 屬性中的每個 URL 創建了 scrapy.Request 對象,并將 parse 方法作為回調函數(callback)賦值給了 Request。
    • Request 對象經過調度,執行生成 scrapy.http.Response 對象并送回給 parse() 方法。

    ?

    提取 Item

    Scrapy?內置的 Selectors 模塊提供了對? XPath 和 CSS Selector 的支持。也可以單獨拿出來使用

    單獨使用 示例:

    from scrapy import Selectortemp_string = ''' <bookstore><book><title lang="eng">Harry Potter</title><price>29.99</price></book><book><title lang="eng">Learning XML</title><price>39.95</price></book> </bookstore> '''if __name__ == '__main__':s = Selector(text=temp_string)print(s.xpath('//book[1]/title/text()').extract_first())print(s.xpath('//book[1]/price/text()').extract_first())pass

    XPath 表達式的例子及對應的含義:

    /html/head/title 選擇<HTML>文檔中 <head> 標簽內的 <title> 元素 /html/head/title/text() 選擇上面提到的 <title> 元素的文字 //td 選擇所有的 <td> 元素 //div[@class="mine"] 選擇所有具有 class="mine" 屬性的 div 元素

    Selector 有四個基本的方法:

    xpath() 傳入xpath表達式,返回該表達式所對應的所有節點的selector list列表 。 css() 傳入CSS表達式,返回該表達式所對應的所有節點的selector list列表. extract() 序列化該節點為unicode字符串并返回list。 re() 根據傳入的正則表達式對數據進行提取,返回unicode字符串list列表。

    嘗試 Selector 選擇器

    為了介紹 Selector的使用方法,接下來我們將要使用內置的 scrapy shell 。Scrapy Shell 需要您預裝好 IPython (一個擴展的Python終端)。您需要進入項目的根目錄,執行下列命令來啟動 shell:?

    scrapy shell "http://hr.tencent.com/position.php?&start=0#a"

    注解: 當您在終端運行 Scrapy 時,請一定記得給 url 地址加上引號,否則包含參數的 url (例如 & 字符)會導致 Scrapy 運行失敗。
    shell 的輸出類似:

    當 shell 載入后,將得到一個包含 response 數據的本地 response 變量。

    輸入 response.body 將輸出 response 的包體, 輸出 response.headers 可以看到 response 的包頭。?

    當輸入 response.selector 時, 將獲取到一個response 初始化的類 Selector 的對象。

    此時,可以通過使用 response.selector.xpath() 或 response.selector.css() 來對 response 進行查詢。

    scrapy 對 response.selector.xpath() 及 response.selector.css() 提供了一些快捷方式,例如 response.xpath() 或 response.css()

    response.xpath('//title') [<Selector xpath='//title' data=u'<title>\u804c\u4f4d\u641c\u7d22 | \u793e\u4f1a\u62db\u8058 | Tencent \u817e\u8baf\u62db\u8058</title'>]response.xpath('//title').extract() [u'<title>\u804c\u4f4d\u641c\u7d22 | \u793e\u4f1a\u62db\u8058 | Tencent \u817e\u8baf\u62db\u8058</title>']print response.xpath('//title').extract()[0] <title>職位搜索 | 社會招聘 | Tencent 騰訊招聘</title>response.xpath('//title/text()') <Selector xpath='//title/text()' data=u'\u804c\u4f4d\u641c\u7d22 | \u793e\u4f1a\u62db\u8058 | Tencent \u817e\u8baf\u62db\u8058'>response.xpath('//title/text()')[0].extract() u'\u804c\u4f4d\u641c\u7d22 | \u793e\u4f1a\u62db\u8058 | Tencent \u817e\u8baf\u62db\u8058'print response.xpath('//title/text()')[0].extract() 職位搜索 | 社會招聘 | Tencent 騰訊招聘response.xpath('//title/text()').re('(\w+):') [u'\u804c\u4f4d\u641c\u7d22',u'\u793e\u4f1a\u62db\u8058',u'Tencent',u'\u817e\u8baf\u62db\u8058']

    ?

    提取數據

    現在,從頁面中提取些有用的數據。

    # 通過 XPath 選擇該頁面中網站列表里所有 lass=even 元素 site = response.xpath('//*[@class="even"]')# 職位名稱: print site[0].xpath('./td[1]/a/text()').extract()[0] # TEG15-運營開發工程師(深圳)# 職位名稱詳情頁: print site[0].xpath('./td[1]/a/@href').extract()[0] position_detail.php?id=20744&keywords=&tid=0&lid=0# 職位類別: print site[0].xpath('./td[2]/text()').extract()[0] # 技術類

    對于 .xpath() 調用返回 selector 組成的 list, 因此可以拼接更多的 .xpath() 來進一步獲取某個節點。

    for sel in response.xpath('//*[@class="even"]'):name = sel.xpath('./td[1]/a/text()').extract()[0]detailLink = sel.xpath('./td[1]/a/@href').extract()[0]catalog = sel.xpath('./td[2]/text()').extract()[0]recruitNumber = sel.xpath('./td[3]/text()').extract()[0]workLocation = sel.xpath('./td[4]/text()').extract()[0]publishTime = sel.xpath('./td[5]/text()').extract()[0]print name, detailLink, catalog,recruitNumber,workLocation,publishTime

    在我們的 tencent_spider.py 文件修改成如下代碼:

    import scrapyclass RecruitSpider(scrapy.spiders.Spider):name = "tencent"allowed_domains = ["hr.tencent.com"]start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]def parse(self, response):for sel in response.xpath('//*[@class="even"]'):name = sel.xpath('./td[1]/a/text()').extract()[0]detailLink = sel.xpath('./td[1]/a/@href').extract()[0]catalog = sel.xpath('./td[2]/text()').extract()[0]recruitNumber = sel.xpath('./td[3]/text()').extract()[0]workLocation = sel.xpath('./td[4]/text()').extract()[0]publishTime = sel.xpath('./td[5]/text()').extract()[0]print name, detailLink, catalog,recruitNumber,workLocation,publishTime

    如圖所示:

    現在嘗試再次爬取 hr.tencent.com,您將看到爬取到的網站信息被成功輸出:

    scrapy crawl tencent

    運行過程:

    ?

    使用 item

    Item 對象是自定義的 python 字典??梢允褂脴藴实淖值湔Z法來獲取到其每個字段的值。輸入 `scrapy shell'

    import scrapyclass RecruitItem(scrapy.Item):name = scrapy.Field()detailLink = scrapy.Field()catalog = scrapy.Field()recruitNumber = scrapy.Field()workLocation = scrapy.Field()publishTime = scrapy.Field()item = RecruitItem() item['name'] = 'sanlang' item['name'] 'sanlang'

    一般來說,Spider 將會將爬取到的數據以 Item 對象返回。所以為了將爬取的數據返回,最終 tencent_spider.py 代碼將是:

    import scrapy from tutorial.items import RecruitItem class RecruitSpider(scrapy.spiders.Spider):name = "tencent"allowed_domains = ["hr.tencent.com"]start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]def parse(self, response):for sel in response.xpath('//*[@class="even"]'):name = sel.xpath('./td[1]/a/text()').extract()[0]detailLink = sel.xpath('./td[1]/a/@href').extract()[0]catalog = sel.xpath('./td[2]/text()').extract()[0]recruitNumber = sel.xpath('./td[3]/text()').extract()[0]workLocation = sel.xpath('./td[4]/text()').extract()[0]publishTime = sel.xpath('./td[5]/text()').extract()[0]print name, detailLink, catalog,recruitNumber,workLocation,publishTimeitem = RecruitItem()item['name']=name.encode('utf-8')item['detailLink']=detailLink.encode('utf-8')item['catalog']=catalog.encode('utf-8')item['recruitNumber']=recruitNumber.encode('utf-8')item['workLocation']=workLocation.encode('utf-8')item['publishTime']=publishTime.encode('utf-8')yield item

    現在對 hr.tencent.com 進行爬取將會產生 RecruitItem 對象:

    ?

    保存爬取到的數據

    最簡單存儲爬取的數據的方式是使用 Feed exports:

    scrapy crawl tencent -o items.json

    該命令將采用 JSON 格式對爬取的數據進行序列化,生成 items.json 文件。

    如果需要對爬取到的item做更多更為復雜的操作,您可以編寫 Item Pipeline 。 類似于我們在創建項目時對Item做的,用于您編寫自己的 tutorial/pipelines.py 也被創建。 不過如果您僅僅想要保存item,您不需要實現任何的pipeline。

    ?

    1.2.4?Item Pipelines

    當 Item 在 Spider 中被收集之后,它將會被傳遞到 Item Pipeline。

    每個 Item Pipeline 組件接收到 Item,定義一些操作行為,比如決定此 Item 是丟棄而存儲。

    item pipeline 的一些典型應用:

    • 驗證爬取的數據 (檢查 item 包含某些字段,比如說 name 字段)。
    • 查重 (并丟棄)。
    • 將爬取結果保存到文件或者數據庫中。

    ?

    編寫 item pipeline

    編寫 item pipeline 很簡單,item pipiline 組件是一個獨立的 Python 類,必須實現 process_item 方法:

    • process_item(self, item, spider):當 Item 在 Spider 中被收集之后,都需要調用該方法。參數: ?item - 爬取的結構化數據。 spider – 爬取該 item 的 spider
    • open_spider(self, spider):當 spider 被開啟時,這個方法被調用。參數:spider ? – 被開啟的spider
    • close_spider(spider):當 spider 被關閉時,這個方法被調用。參數:spider – 被關閉的spider

    ?

    將 item 寫入 JSON 文件

    以下 pipeline 將所有爬取到的 item,存儲到一個獨立地 items.json 文件,每行包含一個序列化為 'JSON' 格式的 'item':

    import jsonclass JsonWriterPipeline(object):def __init__(self):self.file = open('items.json', 'wb')def process_item(self, item, spider):line = json.dumps(dict(item),ensure_ascii=False) + "\n"self.file.write(line)return item

    ?

    啟用一個Item Pipeline組件

    為了啟用 Item Pipeline 組件,必須將它的類添加到 settings.py 文件 ITEM_PIPELINES 配置,就像下面這個例子:

    ITEM_PIPELINES = {#'tutorial.pipelines.PricePipeline': 300,'tutorial.pipelines.JsonWriterPipeline': 800, }

    分配給每個類的整型值,確定了他們運行的順序,item按數字從低到高的順序,通過 pipeline,通常將這些數字定義在0-1000范圍內。

    ?

    在這里優化:

    以下 pipeline 將所有爬取到的 item,存儲到一個獨立地 items.json 文件,每行包含一個序列化為 'JSON' 格式的 'item':

    import json import codecsclass JsonWriterPipeline(object):def __init__(self):self.file = codecs.open('items.json', 'w', encoding='utf-8')def process_item(self, item, spider):line = json.dumps(dict(item), ensure_ascii=False) + "\n"self.file.write(line)return itemdef spider_closed(self, spider):self.file.close()

    針對 spider 里面的 utf-8 編碼格式去掉 .encode('utf-8')

    item = RecruitItem() item['name']=name.encode('utf-8') item['detailLink']=detailLink.encode('utf-8') item['catalog']=catalog.encode('utf-8') item['recruitNumber']=recruitNumber.encode('utf-8') item['workLocation']=workLocation.encode('utf-8') item['publishTime']=publishTime.encode('utf-8')

    ?

    將 item 寫入 MongoDB

    • from_crawler(cls, crawler):如果使用,這類方法被調用創建爬蟲管道實例。必須返回管道的一個新實例。crawler提供存取所有Scrapy核心組件配置和信號管理器; 對于pipelines這是一種訪問配置和信號管理器 的方式。參數: crawler (Crawler object) – crawler that uses this pipeline

    例子中,我們將使用 pymongo 將 Item 寫到 MongoDB。MongoDB 的地址和數據庫名稱在 Scrapy setttings.py 配置文件中;這個例子主要是說明如何使用 from_crawler() 方法

    import pymongoclass MongoPipeline(object):collection_name = 'scrapy_items'def __init__(self, mongo_uri, mongo_db):self.mongo_uri = mongo_uriself.mongo_db = mongo_db@classmethoddef from_crawler(cls, crawler):return cls(mongo_uri=crawler.settings.get('MONGO_URI'),mongo_db=crawler.settings.get('MONGO_DATABASE', 'items'))def open_spider(self, spider):self.client = pymongo.MongoClient(self.mongo_uri)self.db = self.client[self.mongo_db]def close_spider(self, spider):self.client.close()def process_item(self, item, spider):self.db[self.collection_name].insert(dict(item))return item

    ?

    ?

    1.3 Spider 類

    ?

    Spider類 定義了如何爬取某個(或某些)網站。包括了爬取的動作(例如:是否跟進鏈接) 以及如何從網頁的內容中提取結構化數據(爬取item)。 換句話說,Spider 就是定義爬取的動作及分析某個網頁(或者是有些網頁)的地方。

    ?

    class scrapy.spider.Spider

    scrapy 為我們提供了5種 spide r用于構造請求,解析數據、返回 item。常用的就 scrapy.spider、scrapy.crawlspider兩種。

    Spider 是最簡單的 spider。每個 spider 必須繼承自該類。Spider 并沒有提供什么特殊的功能。其僅僅請求給定的 start_urls / start_requests,并根據返回的結果調用 spider 的 parse 方法。

    • name:定義 spider 名字的字符串。例如,如果spider爬取 mywebsite.com ,該 spider 通常會被命名為 mywebsite
    • allowed_domains:可選。包含了spider允許爬取的域名(domain)列表(list)
    • start_urls:初始 URL 列表。當沒有制定特定的 URL 時,spider 將從該列表中開始進行爬取。
    • start_requests():當 spider 啟動爬取并且未指定 start_urls 時,該方法被調用。如果您想要修改最初爬取某個網站。
    • parse(self, response):當請求 url 返回網頁沒有指定回調函數時,默認下載回調方法。參數:response (Response) – 返回網頁信息的 response
    • log(message[, level, component]):使用 scrapy.log.msg() 方法記錄(log)message。 更多數據請參見?Logging

    下面是 spider 常用到的 屬性 和 方法(scrapy一覽及源碼解析:https://www.cnblogs.com/pontoon/p/10247589.html)

    屬性、方法功能簡述
    name爬蟲的名稱啟動爬蟲的時候會用到
    start_urls起始 url是一個列表,默認被 start_requests 調用
    allowd_doamins對 url 進行的簡單過濾

    當請求 url 沒有被 allowd_doamins 匹配到時,會報一個非常惡心的錯,

    start_requests()第一次請求自己的 spider 可以重寫,突破一些簡易的反爬機制
    custom_settings定制 settings可以對每個爬蟲定制 settings 配置
    from_crawler實例化入口在 scrapy 的各個組件的源碼中,首先執行的就是它

    關于 spider 我們可以定制 start_requests、可以單獨的設置 custom_settings、也可以設置請

    例如,如果您需要在啟動時以 POST 登錄某個網站,你可以這么寫:

    class MySpider(scrapy.Spider):name = 'myspider'def start_requests(self):return [scrapy.FormRequest("http://www.example.com/login",formdata={'user': 'john', 'pass': 'secret'},callback=self.logged_in)]def logged_in(self, response):# here you would extract links to follow and return Requests for# each of them, with another callbackpass

    ?

    Spider 示例

    讓我們來看一個例子:

    import scrapyclass MySpider(scrapy.Spider):name = 'example.com'allowed_domains = ['example.com']start_urls = ['http://www.example.com/1.html','http://www.example.com/2.html','http://www.example.com/3.html',]def parse(self, response):self.log('A response from %s just arrived!' % response.url)

    另一個在單個回調函數中返回多個 Request 以及 Item 的例子:

    import scrapy from myproject.items import MyItemclass MySpider(scrapy.Spider):name = 'example.com'allowed_domains = ['example.com']start_urls = ['http://www.example.com/1.html','http://www.example.com/2.html','http://www.example.com/3.html',]def parse(self, response):sel = scrapy.Selector(response)for h3 in response.xpath('//h3').extract():yield MyItem(title=h3)for url in response.xpath('//a/@href').extract():yield scrapy.Request(url, callback=self.parse)

    ?

    案例:騰訊招聘網翻頁功能

    import scrapy from tutorial.items import RecruitItem import re class RecruitSpider(scrapy.Spider):name = "tencent"allowed_domains = ["hr.tencent.com"]start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]def parse(self, response):for sel in response.xpath('//*[@class="even"]'):name = sel.xpath('./td[1]/a/text()').extract()[0]detailLink = sel.xpath('./td[1]/a/@href').extract()[0]catalog =Noneif sel.xpath('./td[2]/text()'):catalog = sel.xpath('./td[2]/text()').extract()[0]recruitNumber = sel.xpath('./td[3]/text()').extract()[0]workLocation = sel.xpath('./td[4]/text()').extract()[0]publishTime = sel.xpath('./td[5]/text()').extract()[0]#print name, detailLink, catalog,recruitNumber,workLocation,publishTimeitem = RecruitItem()item['name']=name.encode('utf-8')item['detailLink']=detailLink.encode('utf-8')if catalog:item['catalog']=catalog.encode('utf-8')item['recruitNumber']=recruitNumber.encode('utf-8')item['workLocation']=workLocation.encode('utf-8')item['publishTime']=publishTime.encode('utf-8')yield itemnextFlag = response.xpath('//*[@id="next"]/@href')[0].extract()if 'start' in nextFlag:curpage = re.search('(\d+)',response.url).group(1)page =int(curpage)+10url = re.sub('\d+',str(page),response.url)print urlyield scrapy.Request(url, callback=self.parse)

    執行:scrapy crawl tencent -L INFO

    ?

    ?

    1.4 CrawlSpider 類

    ?

    scrapy.spiders.CrawlSpider

    CrawlSpider?定義了一些規則(rule)來提供跟進 link 的方便的機制。除了從 Spider 繼承過來的(您必須提供的)屬性外(name、allow_domains),其提供了一個新的屬性:

    • rules:包含一個(或多個) 規則對象的集合(list)。 每個Rule對爬取網站的動作定義了特定操作。 如果多個 rule 匹配了相同的鏈接,則根據規則在本集合中被定義的順序,第一個會被使用。
    • parse_start_url(response):當 start_url 的請求返回時,該方法被調用

    ?

    爬取規則(Crawling rules)

    class scrapy.contrib.spiders.Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None)

    • link_extractor:其定義了如何從爬取到的頁面中提取鏈接。
    • callback:指定 spider 中哪個函數將會被調用。 從 link_extractor 中每獲取到鏈接時將會調用該函數。該回調函數接受一個response 作為其第一個參數。注意:當編寫爬蟲規則時,請避免使用 parse作為回調函數。由于 CrawlSpider 使用 parse 方法來實現其邏輯,如果您覆蓋了 parse方法,crawl spider將會運行失敗。
    • cb_kwargs:包含傳遞給回調函數的參數 (keyword argument) 的字典。
    • follow:是一個布爾(boolean)值,指定了根據該規則從response提取的鏈接是否需要跟進。 如果callback為None,follow默認設置為True ,否則默認為False。
    • process_links:指定該spider中哪個的函數將會被調用,從link_extractor中獲取到鏈接列表時將會調用該函數。該方法常用于過濾參數
    • process_request:指定該spider中哪個的函數將會被調用,該規則提取到每個request時都會調用該函數 (用來過濾request)

    ?

    CrawlSpider 案例

    還是以騰訊招聘為例,給出配合 rule 使用 CrawlSpider 的例子:

    首先運行

    scrapy shell "http://hr.tencent.com/position.php?&start=0#a"

    導入匹配規則:

    from scrapy.linkextractors import LinkExtractor page_lx = LinkExtractor(allow=('position.php?&start=\d+'))

    查詢匹配結果:

    page_lx.extract_links(response)

    沒有查到:

    page_lx = LinkExtractor(allow=(r'position\.php\?&start=\d+')) page_lx.extract_links(response)[Link(url='http://hr.tencent.com/position.php?start=10', text='2', fragment='', nofollow=False), Link(url='http://hr.tencent.com/position.php?start=20', text='3', fragment='', nofollow=False), Link(url='http://hr.tencent.com/position.php?start=30', text='4', fragment='', nofollow=False), Link(url='http://hr.tencent.com/position.php?start=40', text='5', fragment='', nofollow=False), Link(url='http://hr.tencent.com/position.php?start=50', text='6', fragment='', nofollow=False), Link(url='http://hr.tencent.com/position.php?start=60', text='7', fragment='', nofollow=False), Link(url='http://hr.tencent.com/position.php?start=70', text='...', fragment='', nofollow=False), Link(url='http://hr.tencent.com/position.php?start=1300', text='131', fragment='', nofollow=False)] len(page_lx.extract_links(response))

    那么,scrapy shell 測試完成之后,修改以下代碼

    #提取匹配 'http://hr.tencent.com/position.php?&start=\d+'的鏈接 page_lx = LinkExtractor(allow=('start=\d+'))rules = [ #提取匹配,并使用spider的parse方法進行分析;并跟進鏈接(沒有callback意味著follow默認為True) Rule(page_lx, callback='parse',follow=True) ]

    這么寫對嗎??callback 千萬不能寫 parse,一定運行有錯誤!!保存以下代碼為 tencent_crawl.py

    # -*- coding:utf-8 -*- import scrapy from tutorial.items import RecruitItem from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractorclass RecruitSpider(CrawlSpider):name = "tencent_crawl"allowed_domains = ["hr.tencent.com"]start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]#提取匹配 'http://hr.tencent.com/position.php?&start=\d+'的鏈接page_lx = LinkExtractor(allow=('start=\d+'))rules = [#提取匹配,并使用spider的parse方法進行分析;并跟進鏈接(沒有callback意味著follow默認為True)Rule(page_lx, callback='parseContent',follow=True)]def parseContent(self, response):print response.urlfor sel in response.xpath('//*[@class="even"]'):name = sel.xpath('./td[1]/a/text()').extract()[0]detailLink = sel.xpath('./td[1]/a/@href').extract()[0]catalog =Noneif sel.xpath('./td[2]/text()'):catalog = sel.xpath('./td[2]/text()').extract()[0]recruitNumber = sel.xpath('./td[3]/text()').extract()[0]workLocation = sel.xpath('./td[4]/text()').extract()[0]publishTime = sel.xpath('./td[5]/text()').extract()[0]#print name, detailLink, catalog,recruitNumber,workLocation,publishTimeitem = RecruitItem()item['name']=name.encode('utf-8')item['detailLink']=detailLink.encode('utf-8')if catalog:item['catalog']=catalog.encode('utf-8')item['recruitNumber']=recruitNumber.encode('utf-8')item['workLocation']=workLocation.encode('utf-8')item['publishTime']=publishTime.encode('utf-8')yield item

    可以修改配置文件settings.py,添加 LOG_LEVEL='INFO'

    運行: scrapy crawl tencent_crawl

    ?

    process_links 參數:動態網頁爬取,動態 url 的處理

    在爬取?https://bitsharestalk.org?的時候,發現網站會為每一個 url 增加一個 sessionid 屬性,可能是為了標記用戶訪問歷史,而且這個 seesionid 隨著每次訪問都會動態變化,這就為爬蟲的去重處理(即標記已經爬取過的網站)和提取規則增加了難度。

    比如:https://bitsharestalk.org/index.php?board=5.0?會變成?https://bitsharestalk.org/index.phpPHPSESSID=9771d42640ab3c89eb77e8bd9e220b53&board=5.0

    下面介紹幾種處理方法

    僅適用你的爬蟲使用的是 scrapy.contrib.spiders.CrawlSpider,在這個內置爬蟲中,你提取 url 要通過 Rule類來進行提取,其自帶了對提取后的 url 進行加工的函數。

    rules = (Rule(LinkExtractor(allow=(r"https://bitsharestalk\.org/index\.php\?PHPSESSID\S*board=\d+\.\d+$",r"https://bitsharestalk\.org/index\.php\?board=\d+\.\d+$")),process_links='link_filtering' # 默認函數process_links), Rule(LinkExtractor(allow=(r" https://bitsharestalk\.org/index\.php\?PHPSESSID\S*topic=\d+\.\d+$",r"https://bitsharestalk\.org/index\.php\?topic=\d+\.\d+$",), ),callback="extractPost",follow=True, process_links='link_filtering'),Rule(LinkExtractor(allow=(r"https://bitsharestalk\.org/index\.php\?PHPSESSID\S*action=profile;u=\d+$",r"https://bitsharestalk\.org/index\.php\?action=profile;u=\d+$",), ),callback="extractUser", process_links='link_filtering'))def link_filtering(self, links):ret = []for link in links:url = link.url# print "This is the yuanlai ", link.urlurlfirst, urllast = url.split(" ? ")if urllast:link.url = urlfirst + " ? " + urllast.split(" & ", 1)[1]# print link.urlreturn links

    link_filtering() 函數對 url 進行了處理,過濾掉了 sessid,關于 Rule類的 process_links 函數和 links 類,官方文檔中并沒有給出介紹,給出一個參考?https://groups.google.com/forum/#!topic/scrapy-users/RHGtm_2GO1M(也許需要梯子,你懂得)

    如果你是自己實現的爬蟲,那么 url 的處理更是可定制的,只需要自己處理一下就可以了。

    ?

    process_request 參數:修改請求參數

    import re from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractorclass WeiboSpider(CrawlSpider):name = 'weibo'allowed_domains = ['weibo.com']# 不加www,則匹配不到 cookie, get_login_cookie()方法正則代完善start_urls = ['http://www.weibo.com/u/1876296184']rules = (Rule(# 微博個人頁面的規則,或/u/或/n/后面跟一串數字LinkExtractor(allow=r'^http:\/\/(www\.)?weibo.com/[a-z]/.*'),process_request='process_request',callback='parse_item', follow=True),)cookies = Nonedef process_request(self, request):link = request.urlpage = re.search(r'page=\d*', link).group()tp = re.search(r'type=\d+', link).group()new_request = request.replace(cookies=self.cookies, url='.../questionType?' + page + "&" + tp)return new_request

    ?

    ?

    1.5 Logging

    ?

    Scrapy 提供了 log 功能。您可以通過 logging 模塊使用。

    ?

    Log levels

    Scrapy 提供5層 logging 級別:

  • CRITICAL? ? ?---? 嚴重錯誤(critical)
  • ERROR? ? ? ? ---? 一般錯誤(regular errors)
  • WARNING? ? ---? 警告信息(warning messages)
  • INFO? ? ? ? ? ? ?---? 一般信息(informational messages)
  • DEBUG? ? ? ? ?---? 調試信息(debugging messages)
  • 默認情況下 python 的 logging 模塊將日志打印到了標準輸出中,且只顯示了大于等于 WARNING 級別的日志,這說明默認的日志級別設置為 WARNING(日志級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG,默認的日志格式為DEBUG級別

    ?

    如何設置 log 級別

    您可以通過終端選項(command line option) --loglevel/-L 或 LOG_LEVEL 來設置log級別。

    • scrapy crawl tencent_crawl -L INFO

    • 可以修改配置文件 settings.py,添加??LOG_LEVEL='INFO'

    scrapy crawl tencent_crawl -L INFO 也可以修改配置文件settings.py,添加 LOG_LEVEL='INFO'

    ?

    在 Spider 中添加 log

    Scrapy 為每個 Spider 實例記錄器提供了一個 logger,可以這樣訪問:

    import scrapyclass MySpider(scrapy.Spider):name = 'myspider'start_urls = ['http://scrapinghub.com']def parse(self, response):self.logger.info('Parse function called on %s', response.url)

    logger 是用 Spider 的名稱創建的,但是你可以用你想要的任何自定義 logging。例如:

    import logging import scrapylogger = logging.getLogger('zhangsan')class MySpider(scrapy.Spider):name = 'myspider'start_urls = ['http://scrapinghub.com']def parse(self, response):logger.info('Parse function called on %s', response.url)

    Logging 設置

    以下設置可以被用來配置logging: LOG_ENABLED 默認: True,啟用logging LOG_ENCODING 默認: 'utf-8',logging使用的編碼 LOG_FILE 默認: None,logging輸出的文件名 LOG_LEVEL 默認: 'DEBUG',log的最低級別 LOG_STDOUT 默認: False。如果為 True,進程所有的標準輸出(及錯誤)將會被重定向到log中。例如,執行 print 'hello' ,其將會在Scrapy log中顯示。

    ?

    案例 (一) (?self.logger )

    tencent_crawl.py 添加日志信息如下:

    '''添加日志信息'''print 'print',response.urlself.logger.info('info on %s', response.url)self.logger.warning('WARNING on %s', response.url)self.logger.debug('info on %s', response.url)self.logger.error('info on %s', response.url)

    完整版如下:

    # -*- coding:utf-8 -*- import scrapy from tutorial.items import RecruitItem from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractorclass RecruitSpider(CrawlSpider):name = "tencent_crawl"allowed_domains = ["hr.tencent.com"]start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]#提取匹配 'http://hr.tencent.com/position.php?&start=\d+'的鏈接page_lx = LinkExtractor(allow=('start=\d+'))rules = [#提取匹配,并使用spider的parse方法進行分析;并跟進鏈接(沒有callback意味著follow默認為True)Rule(page_lx, callback='parseContent',follow=True)]def parseContent(self, response):#print("print settings: %s" % self.settings['LOG_FILE'])'''添加日志信息'''print 'print',response.urlself.logger.info('info on %s', response.url)self.logger.warning('WARNING on %s', response.url)self.logger.debug('info on %s', response.url)self.logger.error('info on %s', response.url)for sel in response.xpath('//*[@class="even"]'):name = sel.xpath('./td[1]/a/text()').extract()[0]detailLink = sel.xpath('./td[1]/a/@href').extract()[0]catalog =Noneif sel.xpath('./td[2]/text()'):catalog = sel.xpath('./td[2]/text()').extract()[0]recruitNumber = sel.xpath('./td[3]/text()').extract()[0]workLocation = sel.xpath('./td[4]/text()').extract()[0]publishTime = sel.xpath('./td[5]/text()').extract()[0]#print name, detailLink, catalog,recruitNumber,workLocation,publishTimeitem = RecruitItem()item['name']=nameitem['detailLink']=detailLinkif catalog:item['catalog']=catalogitem['recruitNumber']=recruitNumberitem['workLocation']=workLocationitem['publishTime']=publishTimeyield item

    在 settings 文件中,修改添加信息

    LOG_FILE='ten.log' LOG_LEVEL='INFO'

    接下來執行:scrapy crawl tencent_crawl?;蛘?command line 命令行執行:

    scrapy crawl tencent_crawl --logfile 'ten.log' -L INFO

    輸出如下

    print http://hr.tencent.com/position.php?start=10 print http://hr.tencent.com/position.php?start=1340 print http://hr.tencent.com/position.php?start=0 print http://hr.tencent.com/position.php?start=1320 print http://hr.tencent.com/position.php?start=1310 print http://hr.tencent.com/position.php?start=1300 print http://hr.tencent.com/position.php?start=1290 print http://hr.tencent.com/position.php?start=1260

    ten.log 文件中記錄,可以看到級別大于 INFO 日志輸出

    2016-08-15 23:10:57 [tencent_crawl] INFO: info on http://hr.tencent.com/position.php?start=70 2016-08-15 23:10:57 [tencent_crawl] WARNING: WARNING on http://hr.tencent.com/position.php?start=70 2016-08-15 23:10:57 [tencent_crawl] ERROR: info on http://hr.tencent.com/position.php?start=70 2016-08-15 23:10:57 [tencent_crawl] INFO: info on http://hr.tencent.com/position.php?start=1320 2016-08-15 23:10:57 [tencent_crawl] WARNING: WARNING on http://hr.tencent.com/position.php?start=1320 2016-08-15 23:10:57 [tencent_crawl] ERROR: info on http://hr.tencent.com/position.php?start=1320

    ?

    案例(二)(?logging.getLogger )

    tencent_spider.py 添加日志信息如下:logger = logging.getLogger('zhangsan')

    '''添加日志信息'''print 'print',response.urlself.logger.info('info on %s', response.url)self.logger.warning('WARNING on %s', response.url)self.logger.debug('info on %s', response.url)self.logger.error('info on %s', response.url)

    完整版如下:

    import scrapy from tutorial.items import RecruitItem import re import logginglogger = logging.getLogger('zhangsan')class RecruitSpider(scrapy.spiders.Spider):name = "tencent"allowed_domains = ["hr.tencent.com"]start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]def parse(self, response):#logger.info('spider tencent Parse function called on %s', response.url)'''添加日志信息'''print 'print',response.urllogger.info('info on %s', response.url)logger.warning('WARNING on %s', response.url)logger.debug('info on %s', response.url)logger.error('info on %s', response.url)for sel in response.xpath('//*[@class="even"]'):name = sel.xpath('./td[1]/a/text()').extract()[0]detailLink = sel.xpath('./td[1]/a/@href').extract()[0]catalog =Noneif sel.xpath('./td[2]/text()'):catalog = sel.xpath('./td[2]/text()').extract()[0]recruitNumber = sel.xpath('./td[3]/text()').extract()[0]workLocation = sel.xpath('./td[4]/text()').extract()[0]publishTime = sel.xpath('./td[5]/text()').extract()[0]#print name, detailLink, catalog,recruitNumber,workLocation,publishTimeitem = RecruitItem()item['name']=nameitem['detailLink']=detailLinkif catalog:item['catalog']=catalogitem['recruitNumber']=recruitNumberitem['workLocation']=workLocationitem['publishTime']=publishTimeyield itemnextFlag = response.xpath('//*[@id="next"]/@href')[0].extract()if 'start' in nextFlag:curpage = re.search('(\d+)',response.url).group(1)page =int(curpage)+10url = re.sub('\d+',str(page),response.url)print urlyield scrapy.Request(url, callback=self.parse)

    在 settings 文件中,修改添加信息

    LOG_FILE='tencent.log' LOG_LEVEL='WARNING'

    接下來執行:scrapy crawl tencent 。或者command line命令行執行:

    scrapy crawl tencent --logfile 'tencent.log' -L WARNING

    輸出信息

    print http://hr.tencent.com/position.php?&start=0 http://hr.tencent.com/position.php?&start=10 print http://hr.tencent.com/position.php?&start=10 http://hr.tencent.com/position.php?&start=20 print http://hr.tencent.com/position.php?&start=20 http://hr.tencent.com/position.php?&start=30

    tencent.log 文件中記錄,可以看到級別大于 INFO 日志輸出

    2016-08-15 23:22:59 [zhangsan] WARNING: WARNING on http://hr.tencent.com/position.php?&start=0 2016-08-15 23:22:59 [zhangsan] ERROR: info on http://hr.tencent.com/position.php?&start=0 2016-08-15 23:22:59 [zhangsan] WARNING: WARNING on http://hr.tencent.com/position.php?&start=10 2016-08-15 23:22:59 [zhangsan] ERROR: info on http://hr.tencent.com/position.php?&start=10

    ?

    小試 LOG_STDOUT

    settings.py

    LOG_FILE='tencent.log' LOG_STDOUT=True LOG_LEVEL='INFO'

    執行:scrapy crawl tencent

    輸出:空

    tencent.log 文件中記錄,可以看到級別大于 INFO 日志輸出

    2016-08-15 23:28:32 [stdout] INFO: http://hr.tencent.com/position.php?&start=110 2016-08-15 23:28:32 [stdout] INFO: print 2016-08-15 23:28:32 [stdout] INFO: http://hr.tencent.com/position.php?&start=110 2016-08-15 23:28:32 [zhangsan] INFO: info on http://hr.tencent.com/position.php?&start=110 2016-08-15 23:28:32 [zhangsan] WARNING: WARNING on http://hr.tencent.com/position.php?&start=110 2016-08-15 23:28:32 [zhangsan] ERROR: info on http://hr.tencent.com/position.php?&start=110 2016-08-15 23:28:32 [stdout] INFO: http://hr.tencent.com/position.php?&start=120 2016-08-15 23:28:33 [stdout] INFO: print 2016-08-15 23:28:33 [stdout] INFO: http://hr.tencent.com/position.php?&start=120 2016-08-15 23:28:33 [zhangsan] INFO: info on http://hr.tencent.com/position.php?&start=120 2016-08-15 23:28:33 [zhangsan] WARNING: WARNING on http://hr.tencent.com/position.php?&start=120 2016-08-15 23:28:33 [zhangsan] ERROR: info on http://hr.tencent.com/position.php?&start=120

    ?

    scrapy 之 Logging 使用

    #coding:utf-8 ###################### ##Logging的使用 ###################### import logging ''' 1. logging.CRITICAL - for critical errors (highest severity) 致命錯誤 2. logging.ERROR - for regular errors 一般錯誤 3. logging.WARNING - for warning messages 警告+錯誤 4. logging.INFO - for informational messages 消息+警告+錯誤 5. logging.DEBUG - for debugging messages (lowest severity) 低級別 ''' logging.warning("This is a warning")logging.log(logging.WARNING,"This is a warning")#獲取實例對象 logger=logging.getLogger() logger.warning("這是警告消息") #指定消息發出者 logger = logging.getLogger('SimilarFace') logger.warning("This is a warning")#在爬蟲中使用log import scrapy class MySpider(scrapy.Spider):name = 'myspider'start_urls = ['http://scrapinghub.com']def parse(self, response):#方法1 自帶的loggerself.logger.info('Parse function called on %s', response.url)#方法2 自己定義個loggerlogger.info('Parse function called on %s', response.url)''' Logging 設置 ? LOG_FILE ? LOG_ENABLED ? LOG_ENCODING ? LOG_LEVEL ? LOG_FORMAT ? LOG_DATEFORMAT ? LOG_STDOUT命令行中使用 --logfile FILE Overrides LOG_FILE--loglevel/-L LEVEL Overrides LOG_LEVEL--nolog Sets LOG_ENABLED to False '''import logging from scrapy.utils.log import configure_loggingconfigure_logging(install_root_handler=False) #定義了logging的些屬性 logging.basicConfig(filename='log.txt',format='%(levelname)s: %(levelname)s: %(message)s',level=logging.INFO ) #運行時追加模式 logging.info('進入Log文件') logger = logging.getLogger('SimilarFace') logger.warning("也要進入Log文件")

    ?

    ?

    1.6 Settings

    ?

    Scrapy 設置(settings)提供了定制 Scrapy 組件的方法??梢钥刂瓢ê诵?core),插件(extension),pipeline 及 spider 組件。比如 設置 Json Pipeliine、LOG_LEVEL

    內置設置列表請參考內置設置參考手冊

    ?

    獲取設置值 (Populating the settings)

    設置可以通過多種方式設置,每個方式具有不同的優先級。

    下面以?優先級降序?的方式給出方式列表:

    • 命令行選項(Command line Options)(最高優先級) 。命令行傳入的參數具有最高的優先級。?使用選項 -s (或 --set) 來覆蓋一個 (或更多) 選項。比如:scrapy crawl myspider -s LOG_FILE=scrapy.log
    • 每個 spider 的設置 (?scrapy.spiders.Spider.custom_settings )。 class MySpider(scrapy.Spider):name = 'myspider'custom_settings = {'SOME_SETTING': 'some value',}
    • 項目設置模塊 (Project settings module)。項目設置模塊是 Scrapy 項目的標準配置文件。即 setting.py myproject.settings

    ?

    如何訪問配置 (settings)

    In a spider, the settings are available through self.settings:

    class MySpider(scrapy.Spider):name = 'myspider'start_urls = ['http://example.com']def parse(self, response):print("Existing settings: %s" % self.settings.attributes.keys())

    Settings can be accessed through the scrapy.crawler.Crawler.settings attribute of the Crawler that is passed to from_crawler method in extensions, middlewares and item pipelines:

    class MyExtension(object):def __init__(self, log_is_enabled=False):if log_is_enabled:print("log is enabled!")@classmethoddef from_crawler(cls, crawler):settings = crawler.settingsreturn cls(settings.getbool('LOG_ENABLED'))

    ?

    案例 (?self.settings 使用?)

    添加一行代碼 print("Existing settings: %s" % self.settings['LOG_FILE'])

    # -*- coding:utf-8 -*- import scrapy from tutorial.items import RecruitItem from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor import loggingclass RecruitSpider(CrawlSpider):name = "tencent_crawl"allowed_domains = ["hr.tencent.com"]start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]#提取匹配 'http://hr.tencent.com/position.php?&start=\d+'的鏈接page_lx = LinkExtractor(allow=('start=\d+'))rules = [#提取匹配,并使用spider的parse方法進行分析;并跟進鏈接(沒有callback意味著follow默認為True)Rule(page_lx, callback='parseContent',follow=True)]def parseContent(self, response):print response.urlprint("Existing settings: %s" % self.settings['LOG_FILE'])self.logger.info('Parse function called on %s', response.url)for sel in response.xpath('//*[@class="even"]'):name = sel.xpath('./td[1]/a/text()').extract()[0]detailLink = sel.xpath('./td[1]/a/@href').extract()[0]catalog =Noneif sel.xpath('./td[2]/text()'):catalog = sel.xpath('./td[2]/text()').extract()[0]recruitNumber = sel.xpath('./td[3]/text()').extract()[0]workLocation = sel.xpath('./td[4]/text()').extract()[0]publishTime = sel.xpath('./td[5]/text()').extract()[0]#print name, detailLink, catalog,recruitNumber,workLocation,publishTimeitem = RecruitItem()item['name']=name.encode('utf-8')item['detailLink']=detailLink.encode('utf-8')if catalog:item['catalog']=catalog.encode('utf-8')item['recruitNumber']=recruitNumber.encode('utf-8')item['workLocation']=workLocation.encode('utf-8')item['publishTime']=publishTime.encode('utf-8')yield item

    內置設置參考手冊

    BOT_NAME:默認: 'scrapybot'。當您使用 startproject 命令創建項目時其也被自動賦值。 CONCURRENT_ITEMS:默認: 100。Item Processor(即 Item Pipeline) 同時處理(每個response的)item的最大值。 CONCURRENT_REQUESTS:默認: 16。Scrapy downloader 并發請求(concurrent requests)的最大值。 DEFAULT_REQUEST_HEADERS 默認: {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en', } Scrapy HTTP Request使用的默認header。 DEPTH_LIMIT:默認: 0。爬取網站最大允許的深度(depth)值。如果為0,則沒有限制。 DOWNLOAD_DELAY:默認: 0。下載器在下載同一個網站下一個頁面前需要等待的時間。該選項可以用來限制爬取速度, 減輕服務器壓力。同時也支持小數: DOWNLOAD_DELAY = 0.25 # 250 ms of delay: 該設置影響(默認啟用的) RANDOMIZE_DOWNLOAD_DELAY 設置。 默認情況下,Scrapy在兩個請求間不等待一個固定的值, 而是使用0.5到1.5之間的一個隨機值 * DOWNLOAD_DELAY 的結果作為等待間隔。 DOWNLOAD_TIMEOUT:默認: 180。下載器超時時間(單位: 秒)。 ITEM_PIPELINES:默認: {}。保存項目中啟用的pipeline及其順序的字典。該字典默認為空,值(value)任意。 不過值(value)習慣設置在0-1000范圍內。 樣例: ITEM_PIPELINES = { 'mybot.pipelines.validate.ValidateMyItem': 300, 'mybot.pipelines.validate.StoreMyItem': 800, } LOG_ENABLED:默認: True。是否啟用logging。 LOG_ENCODING:默認: 'utf-8'。logging使用的編碼。 LOG_LEVEL:默認: 'DEBUG'。log的最低級別。可選的級別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG 。 USER_AGENT:默認: "Scrapy/VERSION (+http://scrapy.org)"。爬取的默認User-Agent,除非被覆蓋。

    ?

    ?

    1.7 陽光熱線問政平臺( 東莞 )

    ?

    目標網址:http://wz.sun0769.com/political/index/politicsNewest?id=1&type=4

    items.py:添加以下代碼

    from scrapy.item import Item, Fieldclass SunItem(Item):number = Field()url = Field()title = Field()content = Field()

    在 spiders 目錄下新建一個自定義 SunSpider.py

    from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor # from tutorial.items import SunItem import scrapy import urllib import time import reclass SunSpider(CrawlSpider):name = 'sun0769'num = 0allow_domain = ['http://wz.sun0769.com/']start_urls = ['http://wz.sun0769.com/political/index/politicsNewest?id=1&type=4']rules = {Rule(LinkExtractor(allow='page'), process_links='process_request', follow=True),Rule(LinkExtractor(allow=r'/html/question/\d+/\d+\.shtml$'), callback='parse_content')}def process_request(self, links):ret = []for link in links:try:page = re.search(r'page=\d*', link.url).group()tp = re.search(r'type=\d+', link.url).group()link.url = 'http://wz.sun0769.com/index.php/question/questionType?' + page + "&" + tpexcept BaseException as e:print(e)ret.append(link)return retdef parse_content(self, response):item = SunItem()url = response.urltitle = response.xpath('//*[@class="greyframe"]/div/div/strong/text()')[0].extract().strip()number = response.xpath('//*[@class="greyframe"]/div/div/strong/text()')[0].extract().strip().split(':')[-1]content = response.xpath('//div[@class="c1 text14_2"]/text()').extract()[0].strip()item['url'] = urlitem['title'] = titleitem['number'] = numberitem['content'] = contentprint(dict(item))# yield itemif __name__ == '__main__':from scrapy import cmdlinecmdline.execute('scrapy crawl sun0769'.split())pass

    在 pipelines.py:添加如下代碼

    import json import codecsclass JsonWriterPipeline(object):def __init__(self):self.file = codecs.open('items.json', 'w', encoding='utf-8')def process_item(self, item, spider):line = json.dumps(dict(item), ensure_ascii=False) + "\n"self.file.write(line)return itemdef spider_closed(self, spider):self.file.close()

    settings.py 添加如下代碼(啟用組件)

    ITEM_PIPELINES = {'tutorial.pipelines.JsonWriterPipeline': 300, }

    window 下調試

    在項目根目錄下新建 main.py 文件,用于調試

    from scrapy import cmdline cmdline.execute('scrapy crawl sun0769'.split())

    ?

    ?

    ?

    2. scrapy 案例 和 scrapyd 部署

    ?

    案例 1:騰訊招聘

    騰訊招聘:https://careers.tencent.com/search.html

    items.py:添加以下代碼

    from scrapy.item import Item, Fieldclass TencentItem(Item):title = Field()catalog = Field()workLocation = Field()recruitNumber = Field()duty = Field()Job_requirement= Field()url = Field()publishTime = Field()

    在 spiders 目錄下新建一個自定義 tencent_info.py

    # -*- coding:utf-8 -*- from scrapy.selector import Selector from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule import re from tutorial.items import TencentItemclass TencentSpider(CrawlSpider):name = "tengxun_info"allowed_domains = ["tencent.com"]start_urls = ["http://hr.tencent.com/position.php"]rules = [Rule(LinkExtractor(allow=("start=\d+"))),Rule(LinkExtractor(allow=("position_detail\.php")), follow=True, callback='parse_item')]def parse_item(self,response):item =TencentItem()title = response.xpath('//*[@id="sharetitle"]/text()')[0].extract()workLocation = response.xpath('//*[@class="lightblue l2"]/../text()')[0].extract()catalog = response.xpath('//*[@class="lightblue"]/../text()')[0].extract()recruitNumber = response.xpath('//*[@class="lightblue"]/../text()').re('(\d+)')[0]duty_pre = response.xpath('//*[@class="squareli"]')[0].extract()duty = re.sub('<.*?>','',duty_pre)Job_requirement_pre = response.xpath('//*[@class="squareli"]')[1].extract()Job_requirement = re.sub('<.*?>','',Job_requirement_pre)item['title']=titleitem['url']=response.urlitem['workLocation']=workLocationitem['catalog']=catalogitem['recruitNumber']=recruitNumberitem['duty']=dutyitem['Job_requirement']=Job_requirementyield item

    在 pipelines.py:添加如下代碼

    import json import codecsclass JsonWriterPipeline(object):def __init__(self):self.file = codecs.open('items.json', 'w', encoding='utf-8')def process_item(self, item, spider):line = json.dumps(dict(item), ensure_ascii=False) + "\n"self.file.write(line)return itemdef spider_closed(self, spider):self.file.close()

    settings.py 添加如下代碼(啟用組件)

    ITEM_PIPELINES = {'tutorial.pipelines.JsonWriterPipeline': 300, }

    在項目根目錄下新建 main.py 文件,用于調試

    from scrapy import cmdline cmdline.execute('scrapy crawl tengxun_info'.split())

    ?

    案例 2:國家食品藥品監督管理總局

    目標網站( 藥品 ---> 國產藥品?):https://www.nmpa.gov.cn/

    抓包結果如圖:

    items.py:添加以下代碼

    from scrapy import Field import scrapyclass Sfda1Item(scrapy.Item):# define the fields for your item here like:data = scrapy.Field()

    在spiders目錄下新建一個自定義spider

    # -*- coding: utf-8 -*- import scrapy from scrapy.http import FormRequest # from tutorial.items import Sfda1Item import urllib import reclass sfdaSpider(scrapy.Spider):name = 'sfda'allowed_domains = ['sfda.gov.cn']def start_requests(self):url = 'http://app1.sfda.gov.cn/datasearch/face3/search.jsp'data = {'tableId': '32','State': '1','bcId': '124356639813072873644420336632','State': '1','tableName': 'TABLE32','State': '1','viewtitleName': 'COLUMN302','State': '1','viewsubTitleName': 'COLUMN299,COLUMN303','State': '1','curstart': '1','State': '1','tableView': urllib.quote("國產藥品商品名"),'State': '1',}yield FormRequest(url=url, formdata=data, meta={'data': data}, callback=self.parseContent)def parseContent(self, response):for site in response.xpath('//a').re(r'callbackC,\'(.*?)\',null'):id = re.search('.+Id=(.*?)$', site).group(1)# print idurl = 'http://app1.sfda.gov.cn/datasearch/face3/content.jsp?tableId=32&tableName=TABLE32' \'&tableView=%B9%FA%B2%FA%D2%A9%C6%B7%C9%CC%C6%B7%C3%FB&Id=' + idyield scrapy.Request(url,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'},callback=self.ParseDetail)data = response.meta['data']data['curstart'] = str(int(data['curstart']) + 1)yield FormRequest(url=response.request.url, formdata=data, meta={'data': data}, callback=self.parseContent)def ParseDetail(self, response):item = dict()for site in response.xpath('//table[1]/.//tr')[1:-1]:try:if not site.xpath('./td/text()').extract()[0]:continuename = site.xpath('./td/text()').extract()[0]value = re.sub('<.*?>', '', site.xpath('./td')[1].extract()).strip()print(name, value)item[name] = valueexcept BaseException as e:print('error', e)# sfa = Sfda1Item()item_data = dict()item_data['data'] = itemyield item_dataif __name__ == '__main__':from scrapy import cmdlinecmdline.execute('scrapy crawl sfda'.split())pass

    在 pipelines.py:添加如下代碼

    import json import codecsclass JsonWriterPipeline(object):def __init__(self):self.file = codecs.open('items.json', 'w', encoding='utf-8')def process_item(self, item, spider):line = json.dumps(dict(item), ensure_ascii=False) + "\n"self.file.write(line)return itemdef spider_closed(self, spider):self.file.close()

    settings.py:添加如下代碼(啟用組件)

    ITEM_PIPELINES = {'tutorial.pipelines.JsonWriterPipeline': 300, }

    在項目根目錄下新建main.py文件,用于調試

    from scrapy import cmdline cmdline.execute('scrapy crawl sfda -L INFO'.split())

    ?

    3. 使用 scrapyd 管理爬蟲

    scrapyd 是由 scrapy 官方提供的爬蟲管理工具,使用它我們可以非常方便地上傳、控制爬蟲并且查看運行日志。

    參考官方文檔 :?http://scrapyd.readthedocs.org/en/latest/api.html

    使用 scrapyd 和我們直接運行?scrapy crawl myspider?有什么區別呢?scrapyd 同樣是通過上面的命令運行爬蟲的,不同的是它提供一個JSON web service 監聽的請求,我們可以從任何一臺可以連接到服務器的電腦發送請求安排爬蟲運行,或者停止正在運行的爬蟲。甚至,我們可以使用它提供的API上傳新爬蟲而不必登錄到服務器上進行操作。

    ?

    安裝 scrapydpip install scrapyd

    參考文檔:https://github.com/scrapy/scrapyd-client

    運行 scrapyd 服務。直接運行命令 scrapyd 即可:scrapyd

    默認情況下scrapyd 監聽 0.0.0.0:6800 端口,運行 scrapyd 后在瀏覽器 http://localhost:6800/ 即可查看到當前可以運行的項目:

    web 接口:http://localhost:6800/

    部署 scrapy 項目:直接使用 scrapyd-client 提供的 scrapyd-deploy 工具:pip install scrapyd-client

    直接在項目根目錄:修改工程目錄下的 scrapy.cfg 文件

    [deploy:scrapyd2] #默認情況下并沒有scrapyd2,它只是一個名字,可以在配置文件中寫多個名字不同的deploy url = http://scrapyd.mydomain.com/api/scrapyd/ #要部署項目的服務器的地址 username = john #訪問服務器所需的用戶名和密碼(如果不需要密碼可以不寫) password = secret

    其中的 username 和 password 用于在部署時驗證服務器的 HTTP basic authentication,須要注意的是這里的用戶密碼并不表示訪問該項目須要驗證,而是登錄服務器用的。Ubuntu/Windows:

    [deploy:tutorial_deploy] url = http://192.168.17.129:6800/ project = tutorial username = enlong password = test

    部署項目到服務器:直接在項目根目錄:

    Windows:python c:\Python27\Scripts\scrapyd-deploy

    Ubuntu:scrapyd-deploy tutorial_deploy -p tutorial

    部署操作會打包你的當前項目,如果當前項目下有setup.py文件,就會使用它,沒有的會就會自動創建一個。(如果后期項目需要打包的話,可以根據自己的需要修改里面的信息,也可以暫時不管它)。從返回的結果里面,可以看到部署的狀態,項目名稱,版本號和爬蟲個數,以及當前的主機名稱。

    ?

    查看項目 spider

    通過 scrapyd-deploy -l 查看當前目錄下的可以使用的部署方式(target)
    Windows/Ubuntu

    scrapy list scrapyd-deploy -l

    或再次打開 http://localhost:6800/,?也可以看到 Available projects: default, tutorial

    列出服務器上所有的項目,檢查tutorial_deploy 是否已經部署上去了:

    scrapyd-deploy -L tutorial_deploy default tutorial

    ?

    API

    scrapyd 的 web 界面比較簡單,主要用于監控,所有的調度工作全部依靠接口實現.

    參考官方文檔:http://scrapyd.readthedocs.org/en/stable/api.html

    ?

    開啟爬蟲 schedule

    curl http://localhost:6800/schedule.json -d project=tutorial -d spider=tencentWindows/Ubuntu 注意:執行時 cd 到項目根目錄執行curl http://localhost:6800/schedule.json -d project=tutorial -d spider=tencent {"status": "ok", "jobid": "94bd8ce041fd11e6af1a000c2969bafd", "node_name": "ubuntu"}

    ?

    停止 cancel

    curl http://localhost:6800/cancel.json -d project=tutorial -d job=94bd8ce041fd11e6af1a000c2969bafd

    ?

    列出爬蟲

    curl http://localhost:6800/listspiders.json?project=tutorial

    ?

    刪除項目

    curl http://localhost:6800/delproject.json -d project=tutorial

    ?

    更新

    對于 scrapyd 默認項目 (即是啟動 scrapyd 命令后看到的default項目):
    只有在 scrapy 項目里啟動 scrapyd 命令時才有默認項目,默認項目就是當前的 scrapy 項目
    如果在非 scrapy 項目下執行 scrapyd, 是看不到 default 的

    注意:執行時 cd 到項目根目錄執行

    ?

    第一種 情況

    cfg:[deploy] url = http://192.168.17.129:6800/ project = tutorial username = enlong password = test運行結果:python@ubuntu:~/project/tutorial$ scrapyd-deploy Packing version 1471069533 Deploying to project "tutorial" in http://192.168.17.129:6800/addversion.json Server response (200): {"status": "ok", "project": "tutorial", "version": "1471069533", "spiders": 1, "node_name": "ubuntu"}

    ?

    第二種情況

    cfg:[deploy:tutorial_deploy] url = http://192.168.17.129:6800/ project = tutorial username = enlong password = test運行結果:python@ubuntu:~/project/tutorial$ scrapyd-deploy tutorial_deploy Packing version 1471069591 Deploying to project "tutorial" in http://192.168.17.129:6800/addversion.json Server response (200): {"status": "ok", "project": "tutorial", "version": "1471069591", "spiders": 1, "node_name": "ubuntu"}

    ?

    ?

    4. 為 scrapyd 創建服務

    ?

    Systemd 是 Linux 系統工具,用來啟動守護進程,已成為大多數發行版的標準配置。首先檢查你的系統中是否安裝有 systemd 并確定當前安裝的版本

    Systemd 入門教程:命令篇:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

    Systemd 入門教程:實戰篇:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

    ?

    systemd --version

    sudo vi /lib/systemd/system/scrapyd.service

    Then add the following line into that file:

    [Unit] Description=scrapyd After=network.target Documentation=http://scrapyd.readthedocs.org/en/latest/api.html[Service] User=root ExecStart=/usr/local/bin/scrapyd --logfile /var/scrapyd/scrapyd.log[Install] WantedBy=multi-user.target

    [Unit]區塊通常是配置文件的第一個區塊,用來定義 Unit 的元數據,以及配置與其他 Unit 的關系

    After:如果該字段指定的 Unit After 也要啟動,那么必須在當前 service 之前啟動 Documentation:服務文檔地址 Description:簡短描述

    [Service]區塊用來 Service 的配置,只有 Service 類型的 Unit 才有這個區塊

    ExecStart:啟動當前服務的命令

    [Install]通常是配置文件的最后一個區塊,用來定義如何啟動,以及是否開機啟動

    WantedBy:它的值是一個或多個 Target,當前 Unit 激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .wants后綴構成的子目錄中

    At this point, we can now start our new service by running the command below:

    sudo systemctl start scrapyd sudo service scrapyd start

    To check the status of the service, issue the following command:

    sudo systemctl status scrapyd

    ?

    開機啟動

    To make the services start at boot time, use the command below:

    sudo systemctl enable scrapyd Created symlink from /etc/systemd/system/multi-user.target.wants/scrapyd.service to /lib/systemd/system/scrapyd.service.

    取消開機啟動

    sudo systemctl disable scrapyd

    ?

    ?

    5. scrapyd 服務器添加認證信息

    ?

    我們也可以在scrapyd前面加一層反向代理來實現用戶認證。以nginx為例, 配置nginx

    安裝 nginx:sudo apt-get install nginx

    配置 nginx:vi /etc/nginx/nginx.conf 修改如下:

    # Scrapyd local proxy for basic authentication. # Don't forget iptables rule. # iptables -A INPUT -p tcp --destination-port 6800 -s ! 127.0.0.1 -j DROPhttp {server {listen 6801;location / {proxy_pass http://127.0.0.1:6800/;auth_basic "Restricted";auth_basic_user_file /etc/nginx/conf.d/.htpasswd;}} }

    /etc/nginx/htpasswd/user.htpasswd?里設置的用戶名 enlong和密碼都是test 修改配置文件,添加用戶信息
    Nginx 使用 htpasswd 創建用戶認證

    python@ubuntu:/etc/nginx/conf.d$ sudo htpasswd -c .htpasswd enlong New password: Re-type new password: Adding password for user enlong python@ubuntu:/etc/nginx/conf.d$ cat .htpasswd enlong:$apr1$2slPhvee$6cqtraHxoxclqf1DpqIPM.python@ubuntu:/etc/nginx/conf.d$ sudo htpasswd -bc .htpasswd admin admin

    ?

    apache htpasswd 命令用法實例

    1、如何利用 htpasswd 命令添加用戶?
      htpasswd -bc .passwd www.leapsoul.cn php
      在bin目錄下生成一個.passwd文件,用戶名www.leapsoul.cn,密碼:php,默認采用MD5加密方式
    2、如何在原有密碼文件中增加下一個用戶?
      htpasswd -b .passwd leapsoul phpdev
      去掉c選項,即可在第一個用戶之后添加第二個用戶,依此類推

    重啟 nginx:sudo service nginx restart

    測試 Nginx

    F:\_____gitProject_______\curl-7.33.0-win64-ssl-sspi\tieba_baidu>curl http://localhost:6800/schedule.json -d project=tutorial -d spider=tencent -u enlong:test {"status": "ok", "jobid": "5ee61b08428611e6af1a000c2969bafd", "node_name": "ubuntu"}

    配置 scrapy.cfg 文件

    [deploy] url = http://192.168.17.129:6801/ project = tutorial username = admin password = admin

    注意上面的url已經修改為了nginx監聽的端口。

    提醒: 記得修改服務器上scrapyd的配置bind_address字段為127.0.0.1,以免可以從外面繞過nginx, 直接訪問6800端口。 關于配置可以參看本文后面的配置文件設置.

    修改配置文件:sudo vi /etc/scrapyd/scrapyd.conf

    [scrapyd] bind_address = 127.0.0.1

    scrapyd?啟動的時候會自動搜索配置文件,配置文件的加載順序為

    /etc/scrapyd/scrapyd.conf?/etc/scrapyd/conf.d/*?scrapyd.conf?~/.scrapyd.conf

    最后加載的會覆蓋前面的設置

    默認配置文件如下, 可以根據需要修改

    [scrapyd] eggs_dir = eggs logs_dir = logs items_dir = items jobs_to_keep = 5 dbs_dir = dbs max_proc = 0 max_proc_per_cpu = 4 finished_to_keep = 100 poll_interval = 5 bind_address = 0.0.0.0 http_port = 6800 debug = off runner = scrapyd.runner application = scrapyd.app.application launcher = scrapyd.launcher.Launcher[services] schedule.json = scrapyd.webservice.Schedule cancel.json = scrapyd.webservice.Cancel addversion.json = scrapyd.webservice.AddVersion listprojects.json = scrapyd.webservice.ListProjects listversions.json = scrapyd.webservice.ListVersions listspiders.json = scrapyd.webservice.ListSpiders delproject.json = scrapyd.webservice.DeleteProject delversion.json = scrapyd.webservice.DeleteVersion listjobs.json = scrapyd.webservice.ListJobs

    關于配置的各個參數具體含義,可以參考官方文檔:http://scrapyd.readthedocs.io/en/stable/config.html

    ?

    采集感興趣的網站:(1)京東 (2)豆瓣 (3)論壇 。。。。

    ?

    ?

    ?

    總結

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

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

    一本久久a久久精品vr综合 | 国产av久久久久精东av | 亚洲国产精品毛片av不卡在线 | 欧美精品免费观看二区 | 欧美大屁股xxxxhd黑色 | 免费看男女做好爽好硬视频 | 亚洲欧美色中文字幕在线 | 免费观看又污又黄的网站 | 丰满岳乱妇在线观看中字无码 | 亚洲色欲久久久综合网东京热 | 国产在线精品一区二区高清不卡 | 欧美老人巨大xxxx做受 | 天天躁夜夜躁狠狠是什么心态 | 亚洲国产成人av在线观看 | 国产乡下妇女做爰 | 色狠狠av一区二区三区 | 久久精品国产日本波多野结衣 | 日日摸夜夜摸狠狠摸婷婷 | 免费播放一区二区三区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 熟妇激情内射com | 日韩欧美中文字幕公布 | 亲嘴扒胸摸屁股激烈网站 | 欧美国产日韩亚洲中文 | 亚洲a无码综合a国产av中文 | 全黄性性激高免费视频 | 一二三四社区在线中文视频 | 欧美xxxx黑人又粗又长 | 精品国产麻豆免费人成网站 | 久久精品国产日本波多野结衣 | 日韩精品a片一区二区三区妖精 | 国产av无码专区亚洲awww | 久久97精品久久久久久久不卡 | 少妇高潮一区二区三区99 | 97夜夜澡人人双人人人喊 | 亚洲成av人片在线观看无码不卡 | 国产综合久久久久鬼色 | 成 人影片 免费观看 | 精品一区二区不卡无码av | 欧美人与禽zoz0性伦交 | 高潮毛片无遮挡高清免费 | 久久久精品456亚洲影院 | √8天堂资源地址中文在线 | 中文字幕乱妇无码av在线 | 欧美日韩久久久精品a片 | 久久亚洲精品成人无码 | 亚洲精品国产品国语在线观看 | 久久天天躁狠狠躁夜夜免费观看 | 性生交大片免费看l | 国产精品久久久久7777 | 少妇无套内谢久久久久 | 牲欲强的熟妇农村老妇女 | 国产电影无码午夜在线播放 | 国产欧美精品一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 精品国偷自产在线视频 | 国产av无码专区亚洲a∨毛片 | 久久精品丝袜高跟鞋 | 色综合久久88色综合天天 | 内射巨臀欧美在线视频 | 亚洲国产一区二区三区在线观看 | 日本精品少妇一区二区三区 | 欧美老妇与禽交 | 澳门永久av免费网站 | 麻豆国产丝袜白领秘书在线观看 | 国产做国产爱免费视频 | 欧美 日韩 亚洲 在线 | 色一情一乱一伦一视频免费看 | 男女作爱免费网站 | 国产成人无码区免费内射一片色欲 | 午夜精品久久久久久久久 | 鲁大师影院在线观看 | 一个人看的www免费视频在线观看 | 少妇一晚三次一区二区三区 | 人妻体内射精一区二区三四 | 色综合久久中文娱乐网 | 国内老熟妇对白xxxxhd | 亚洲欧美日韩成人高清在线一区 | 欧美激情一区二区三区成人 | 欧洲欧美人成视频在线 | 欧美大屁股xxxxhd黑色 | 亚洲国精产品一二二线 | 欧美 丝袜 自拍 制服 另类 | 久久zyz资源站无码中文动漫 | 十八禁真人啪啪免费网站 | 国产欧美亚洲精品a | a在线亚洲男人的天堂 | 欧美一区二区三区 | 国产两女互慰高潮视频在线观看 | 欧美放荡的少妇 | 色欲av亚洲一区无码少妇 | 欧美熟妇另类久久久久久多毛 | 欧美野外疯狂做受xxxx高潮 | 久久久国产一区二区三区 | 99久久久国产精品无码免费 | 99久久亚洲精品无码毛片 | 天天做天天爱天天爽综合网 | 色欲久久久天天天综合网精品 | 中文字幕无线码免费人妻 | 国产av无码专区亚洲a∨毛片 | 一二三四社区在线中文视频 | 亚洲国产成人a精品不卡在线 | 国产欧美亚洲精品a | 亚洲国产精品久久久久久 | 国产精品.xx视频.xxtv | 久久综合九色综合97网 | 国产亚洲人成在线播放 | 亚洲成a人片在线观看无码3d | 无码播放一区二区三区 | 精品国产青草久久久久福利 | 国产精品.xx视频.xxtv | 嫩b人妻精品一区二区三区 | 国产人成高清在线视频99最全资源 | 日本一区二区三区免费高清 | 国产超级va在线观看视频 | 日韩人妻无码中文字幕视频 | 色 综合 欧美 亚洲 国产 | 国产成人精品优优av | 骚片av蜜桃精品一区 | 97精品人妻一区二区三区香蕉 | 久久综合色之久久综合 | 国产精品人人爽人人做我的可爱 | 欧美zoozzooz性欧美 | 国产情侣作爱视频免费观看 | 波多野结衣aⅴ在线 | 亚洲欧洲中文日韩av乱码 | 午夜时刻免费入口 | 国内精品人妻无码久久久影院 | 国产亚洲日韩欧美另类第八页 | 亚洲欧洲日本无在线码 | 水蜜桃色314在线观看 | 久久www免费人成人片 | 老子影院午夜精品无码 | 亚洲 欧美 激情 小说 另类 | aa片在线观看视频在线播放 | 久久成人a毛片免费观看网站 | 国产精品理论片在线观看 | 天堂久久天堂av色综合 | 中文字幕+乱码+中文字幕一区 | 乌克兰少妇性做爰 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲国产精品无码一区二区三区 | 欧美日韩精品 | 无码人妻久久一区二区三区不卡 | 狂野欧美激情性xxxx | 久久久久se色偷偷亚洲精品av | 女人被男人躁得好爽免费视频 | 精品厕所偷拍各类美女tp嘘嘘 | 在线欧美精品一区二区三区 | 1000部啪啪未满十八勿入下载 | 国模大胆一区二区三区 | 色一情一乱一伦 | 成人无码视频在线观看网站 | 国产办公室秘书无码精品99 | 国产精华av午夜在线观看 | 无码人妻av免费一区二区三区 | 亚洲人成影院在线无码按摩店 | 亚洲中文无码av永久不收费 | 色婷婷久久一区二区三区麻豆 | 小泽玛莉亚一区二区视频在线 | 久久精品成人欧美大片 | 中文字幕无线码 | 欧美人妻一区二区三区 | 成年女人永久免费看片 | 国精产品一品二品国精品69xx | 色偷偷人人澡人人爽人人模 | 大地资源网第二页免费观看 | 免费中文字幕日韩欧美 | 中文字幕乱码人妻二区三区 | 久久99精品国产麻豆 | 俄罗斯老熟妇色xxxx | 欧美一区二区三区视频在线观看 | 中文字幕乱码人妻二区三区 | √天堂资源地址中文在线 | 亚洲s码欧洲m码国产av | 国产偷抇久久精品a片69 | 亚洲综合无码一区二区三区 | 永久免费观看美女裸体的网站 | 四虎永久在线精品免费网址 | 领导边摸边吃奶边做爽在线观看 | 久久综合久久自在自线精品自 | 日韩人妻系列无码专区 | 性生交大片免费看女人按摩摩 | 久久久久久九九精品久 | 性开放的女人aaa片 | 精品无码国产自产拍在线观看蜜 | 青草视频在线播放 | 亚洲欧美日韩成人高清在线一区 | 国产精品美女久久久 | 久久 国产 尿 小便 嘘嘘 | 日韩av无码中文无码电影 | 精品乱子伦一区二区三区 | 人妻有码中文字幕在线 | 人妻少妇精品无码专区动漫 | 综合激情五月综合激情五月激情1 | 欧美精品无码一区二区三区 | 久久亚洲精品成人无码 | 国产黄在线观看免费观看不卡 | 少妇被粗大的猛进出69影院 | 永久免费观看国产裸体美女 | 四虎影视成人永久免费观看视频 | 亚洲精品国产第一综合99久久 | 牛和人交xxxx欧美 | 鲁大师影院在线观看 | 东京热无码av男人的天堂 | 强辱丰满人妻hd中文字幕 | 日韩欧美群交p片內射中文 | 久久久久久九九精品久 | 美女张开腿让人桶 | 国产色视频一区二区三区 | 精品aⅴ一区二区三区 | 免费人成网站视频在线观看 | 亚洲国产日韩a在线播放 | 欧美激情内射喷水高潮 | 欧美日韩一区二区综合 | 亚洲中文无码av永久不收费 | 久久久精品国产sm最大网站 | 亚洲另类伦春色综合小说 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 日韩精品无码一区二区中文字幕 | yw尤物av无码国产在线观看 | 国产成人精品三级麻豆 | 性欧美大战久久久久久久 | 国产精品.xx视频.xxtv | 日日噜噜噜噜夜夜爽亚洲精品 | 1000部啪啪未满十八勿入下载 | 一区二区传媒有限公司 | 国产97人人超碰caoprom | 天天躁日日躁狠狠躁免费麻豆 | 欧美激情内射喷水高潮 | 国产av久久久久精东av | 国产在线精品一区二区高清不卡 | 久久 国产 尿 小便 嘘嘘 | 亚洲精品中文字幕乱码 | 精品人妻人人做人人爽夜夜爽 | 日韩无码专区 | 国产极品视觉盛宴 | 日韩成人一区二区三区在线观看 | 精品国产乱码久久久久乱码 | 日本爽爽爽爽爽爽在线观看免 | 久久国产精品_国产精品 | 亚洲理论电影在线观看 | 日本一区二区三区免费播放 | 乱人伦人妻中文字幕无码久久网 | 国产精品.xx视频.xxtv | 国产激情一区二区三区 | 丰满少妇高潮惨叫视频 | 国产精品无码永久免费888 | 人妻与老人中文字幕 | 免费观看黄网站 | 亚洲欧洲日本综合aⅴ在线 | 亚洲 a v无 码免 费 成 人 a v | 欧美成人高清在线播放 | 国产一区二区三区精品视频 | 亚洲性无码av中文字幕 | 波多野结衣乳巨码无在线观看 | 色狠狠av一区二区三区 | 日韩 欧美 动漫 国产 制服 | 高潮喷水的毛片 | 亚洲区欧美区综合区自拍区 | 18禁止看的免费污网站 | 精品人妻人人做人人爽 | 无码帝国www无码专区色综合 | 日本va欧美va欧美va精品 | 日韩av无码中文无码电影 | 国产在线精品一区二区三区直播 | 国产人妻久久精品二区三区老狼 | 日韩成人一区二区三区在线观看 | 亚洲精品午夜国产va久久成人 | 亚洲狠狠婷婷综合久久 | 粉嫩少妇内射浓精videos | 无码人妻av免费一区二区三区 | 午夜精品一区二区三区在线观看 | 97资源共享在线视频 | 亚洲一区二区三区无码久久 | 国产色视频一区二区三区 | 少妇被粗大的猛进出69影院 | 亚洲 日韩 欧美 成人 在线观看 | 中文字幕日韩精品一区二区三区 | 欧美人与牲动交xxxx | 日本熟妇乱子伦xxxx | 无码吃奶揉捏奶头高潮视频 | 国产精品亚洲五月天高清 | 天干天干啦夜天干天2017 | 沈阳熟女露脸对白视频 | 国产内射爽爽大片视频社区在线 | 亚洲天堂2017无码中文 | 欧美丰满熟妇xxxx性ppx人交 | 中文字幕人妻无码一夲道 | 特大黑人娇小亚洲女 | 最近的中文字幕在线看视频 | 欧美人与善在线com | 自拍偷自拍亚洲精品10p | 国内精品久久久久久中文字幕 | 日本饥渴人妻欲求不满 | 精品人人妻人人澡人人爽人人 | 日本又色又爽又黄的a片18禁 | 国产精品成人av在线观看 | 欧美野外疯狂做受xxxx高潮 | 久久伊人色av天堂九九小黄鸭 | 97人妻精品一区二区三区 | 国产精品理论片在线观看 | 少妇性俱乐部纵欲狂欢电影 | 国内精品人妻无码久久久影院蜜桃 | 99国产精品白浆在线观看免费 | 精品熟女少妇av免费观看 | 欧美老妇交乱视频在线观看 | 国产精品无码一区二区桃花视频 | 国产明星裸体无码xxxx视频 | 日本一区二区三区免费高清 | 国产精品怡红院永久免费 | 亚洲码国产精品高潮在线 | 亚洲毛片av日韩av无码 | 精品国产一区二区三区四区 | 午夜精品久久久久久久久 | 精品亚洲成av人在线观看 | 国产成人精品三级麻豆 | 亚洲中文无码av永久不收费 | 午夜成人1000部免费视频 | 激情国产av做激情国产爱 | 夜夜夜高潮夜夜爽夜夜爰爰 | 天堂а√在线地址中文在线 | 久久国产精品精品国产色婷婷 | 强开小婷嫩苞又嫩又紧视频 | 精品国产av色一区二区深夜久久 | 美女黄网站人色视频免费国产 | 久久精品无码一区二区三区 | 中文字幕人妻无码一夲道 | 亚洲日韩一区二区三区 | 精品人妻中文字幕有码在线 | 18禁止看的免费污网站 | 欧美野外疯狂做受xxxx高潮 | 爱做久久久久久 | 亚洲 激情 小说 另类 欧美 | 国产成人无码午夜视频在线观看 | 亚洲中文字幕久久无码 | 大肉大捧一进一出视频出来呀 | 日本一卡二卡不卡视频查询 | 日韩av无码中文无码电影 | 性做久久久久久久免费看 | 欧美熟妇另类久久久久久不卡 | 色老头在线一区二区三区 | 国产精品无码永久免费888 | 日本乱偷人妻中文字幕 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 成人一在线视频日韩国产 | 99久久久国产精品无码免费 | 国产高清不卡无码视频 | 人人妻人人藻人人爽欧美一区 | 丝袜人妻一区二区三区 | 中文精品久久久久人妻不卡 | 97久久精品无码一区二区 | 日本护士毛茸茸高潮 | 中文毛片无遮挡高清免费 | 久久精品国产大片免费观看 | 国产午夜精品一区二区三区嫩草 | аⅴ资源天堂资源库在线 | 99久久无码一区人妻 | 亚洲欧美国产精品久久 | 十八禁视频网站在线观看 | 高清无码午夜福利视频 | √天堂资源地址中文在线 | 无遮挡啪啪摇乳动态图 | 国产乱码精品一品二品 | 色婷婷欧美在线播放内射 | 性欧美疯狂xxxxbbbb | 伊人久久大香线蕉av一区二区 | 午夜福利电影 | 2020最新国产自产精品 | 无码国内精品人妻少妇 | 国产莉萝无码av在线播放 | 无码精品国产va在线观看dvd | 老子影院午夜精品无码 | 国産精品久久久久久久 | 无码av最新清无码专区吞精 | 久久久av男人的天堂 | 粗大的内捧猛烈进出视频 | 亚洲熟妇色xxxxx欧美老妇 | 男人和女人高潮免费网站 | 国产尤物精品视频 | 在线a亚洲视频播放在线观看 | 偷窥日本少妇撒尿chinese | 久久久精品人妻久久影视 | 久久人妻内射无码一区三区 | 在线视频网站www色 | 无码国产激情在线观看 | 免费看男女做好爽好硬视频 | 久久久久久久女国产乱让韩 | 无码人妻丰满熟妇区五十路百度 | 国产乱人偷精品人妻a片 | 亚洲乱码日产精品bd | 日韩精品无码免费一区二区三区 | 久久久精品456亚洲影院 | 撕开奶罩揉吮奶头视频 | 水蜜桃av无码 | 成人欧美一区二区三区黑人 | 亚洲欧洲日本综合aⅴ在线 | 无码av最新清无码专区吞精 | 久久久久久久女国产乱让韩 | 免费人成在线观看网站 | 久久综合色之久久综合 | 高潮毛片无遮挡高清免费视频 | 色一情一乱一伦一区二区三欧美 | 麻豆国产丝袜白领秘书在线观看 | 日日摸天天摸爽爽狠狠97 | 性欧美疯狂xxxxbbbb | 国产成人无码午夜视频在线观看 | 人人爽人人澡人人高潮 | 色欲av亚洲一区无码少妇 | 无码一区二区三区在线 | 伊人久久大香线蕉亚洲 | 国产激情综合五月久久 | 大肉大捧一进一出好爽视频 | 97夜夜澡人人双人人人喊 | 国产av一区二区精品久久凹凸 | 内射白嫩少妇超碰 | 色婷婷香蕉在线一区二区 | 无码福利日韩神码福利片 | 久久熟妇人妻午夜寂寞影院 | 国产精品成人av在线观看 | aⅴ亚洲 日韩 色 图网站 播放 | 狠狠综合久久久久综合网 | 亚洲 a v无 码免 费 成 人 a v | 色爱情人网站 | 美女扒开屁股让男人桶 | 波多野42部无码喷潮在线 | 国产成人无码av在线影院 | 精品国产精品久久一区免费式 | 高潮喷水的毛片 | 99久久人妻精品免费一区 | 亚洲 激情 小说 另类 欧美 | 一个人免费观看的www视频 | 亚洲精品无码人妻无码 | 亚洲欧洲无卡二区视頻 | 亚拍精品一区二区三区探花 | 日日摸夜夜摸狠狠摸婷婷 | 无遮无挡爽爽免费视频 | 国产精品福利视频导航 | 台湾无码一区二区 | 日本精品久久久久中文字幕 | 粉嫩少妇内射浓精videos | 国产在线aaa片一区二区99 | 天下第一社区视频www日本 | 日本一卡二卡不卡视频查询 | 欧美大屁股xxxxhd黑色 | 蜜臀aⅴ国产精品久久久国产老师 | 爆乳一区二区三区无码 | 欧洲熟妇精品视频 | 在线观看国产一区二区三区 | 97人妻精品一区二区三区 | 亚洲欧美日韩国产精品一区二区 | 色妞www精品免费视频 | 未满小14洗澡无码视频网站 | 国产av一区二区精品久久凹凸 | 日本欧美一区二区三区乱码 | 中文字幕 人妻熟女 | a国产一区二区免费入口 | 东京无码熟妇人妻av在线网址 | 色欲久久久天天天综合网精品 | 亚洲人成网站免费播放 | 2020最新国产自产精品 | 久久久久亚洲精品男人的天堂 | 亚洲高清偷拍一区二区三区 | 日本欧美一区二区三区乱码 | 国产亚洲欧美日韩亚洲中文色 | 精品久久8x国产免费观看 | 激情亚洲一区国产精品 | 亚洲精品久久久久avwww潮水 | 亚洲精品一区三区三区在线观看 | 国内少妇偷人精品视频免费 | 国产精品无码mv在线观看 | 精品国偷自产在线 | 色一情一乱一伦一视频免费看 | 又大又硬又黄的免费视频 | 久久亚洲国产成人精品性色 | 亚洲一区二区三区无码久久 | 欧美乱妇无乱码大黄a片 | a国产一区二区免费入口 | 国产乱人伦av在线无码 | 无码帝国www无码专区色综合 | 欧美日本免费一区二区三区 | 黑森林福利视频导航 | 无码福利日韩神码福利片 | 最近免费中文字幕中文高清百度 | 亚洲一区二区观看播放 | 日本欧美一区二区三区乱码 | 国产精品欧美成人 | 日韩精品乱码av一区二区 | 亚洲人成无码网www | 亚洲中文字幕无码中字 | 骚片av蜜桃精品一区 | 丰满少妇熟乱xxxxx视频 | 国产性生交xxxxx无码 | 国产黑色丝袜在线播放 | 4hu四虎永久在线观看 | 国产农村妇女高潮大叫 | 无码任你躁久久久久久久 | 成在人线av无码免观看麻豆 | 欧美精品在线观看 | 中文字幕人妻丝袜二区 | 麻豆成人精品国产免费 | 亚洲中文字幕无码中字 | 国产精品内射视频免费 | 欧美野外疯狂做受xxxx高潮 | 无遮挡国产高潮视频免费观看 | √天堂资源地址中文在线 | 99久久久无码国产精品免费 | 国产9 9在线 | 中文 | 国产艳妇av在线观看果冻传媒 | 欧美亚洲日韩国产人成在线播放 | 免费看男女做好爽好硬视频 | ass日本丰满熟妇pics | 亚洲国产午夜精品理论片 | 精品国产一区二区三区四区 | 国产69精品久久久久app下载 | 久久综合久久自在自线精品自 | 国产精品理论片在线观看 | 麻豆国产97在线 | 欧洲 | 蜜桃视频插满18在线观看 | 黑人巨大精品欧美黑寡妇 | 麻豆国产丝袜白领秘书在线观看 | 无码人妻久久一区二区三区不卡 | 国产sm调教视频在线观看 | 国产精品久久久一区二区三区 | 伊人久久大香线蕉午夜 | 夜精品a片一区二区三区无码白浆 | 99精品视频在线观看免费 | 精品国偷自产在线视频 | 丰满护士巨好爽好大乳 | 1000部夫妻午夜免费 | 少妇性l交大片 | 18黄暴禁片在线观看 | 中文字幕无码av激情不卡 | 偷窥日本少妇撒尿chinese | 国产精品第一区揄拍无码 | 亚洲精品久久久久avwww潮水 | 俺去俺来也在线www色官网 | 亚洲gv猛男gv无码男同 | 中文字幕无码av波多野吉衣 | 帮老师解开蕾丝奶罩吸乳网站 | 久久午夜无码鲁丝片 | 奇米影视7777久久精品 | 国产成人av免费观看 | 中国女人内谢69xxxx | 久久婷婷五月综合色国产香蕉 | 夜夜夜高潮夜夜爽夜夜爰爰 | 久久久久久av无码免费看大片 | 狂野欧美性猛交免费视频 | 亚洲国产综合无码一区 | 亚洲男人av香蕉爽爽爽爽 | 色五月五月丁香亚洲综合网 | 精品久久久无码人妻字幂 | 中文字幕无码免费久久9一区9 | 欧美激情一区二区三区成人 | 亚洲精品鲁一鲁一区二区三区 | 最新国产乱人伦偷精品免费网站 | 国产激情一区二区三区 | 亚洲国产综合无码一区 | 一本大道伊人av久久综合 | 成人免费视频视频在线观看 免费 | 久久久久亚洲精品男人的天堂 | 亚洲日本va午夜在线电影 | 国产午夜精品一区二区三区嫩草 | 中文字幕人妻丝袜二区 | 中文字幕乱码中文乱码51精品 | 少妇厨房愉情理9仑片视频 | 亚洲呦女专区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产成人精品必看 | 亚洲日韩中文字幕在线播放 | 亚洲日本在线电影 | 草草网站影院白丝内射 | 久久精品无码一区二区三区 | 久久久婷婷五月亚洲97号色 | 免费观看黄网站 | 曰韩无码二三区中文字幕 | 4hu四虎永久在线观看 | 国产口爆吞精在线视频 | 国产欧美精品一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 国产人妻人伦精品 | 97久久精品无码一区二区 | 国产午夜亚洲精品不卡 | 欧洲熟妇精品视频 | 成在人线av无码免观看麻豆 | 欧美精品国产综合久久 | 国产精品久久久久久亚洲影视内衣 | 精品国产一区二区三区四区 | 无码精品国产va在线观看dvd | 老熟妇乱子伦牲交视频 | 欧美日韩一区二区综合 | 亚洲一区二区三区在线观看网站 | 国产一区二区三区精品视频 | 99精品国产综合久久久久五月天 | 亚洲 高清 成人 动漫 | 精品久久综合1区2区3区激情 | 大肉大捧一进一出好爽视频 | 99er热精品视频 | 黑人巨大精品欧美黑寡妇 | 国产性生大片免费观看性 | 国产午夜视频在线观看 | 97夜夜澡人人爽人人喊中国片 | 国产精品国产自线拍免费软件 | 久久综合网欧美色妞网 | 美女张开腿让人桶 | 久久99精品久久久久久动态图 | 精品成人av一区二区三区 | 欧美成人家庭影院 | 国产精品va在线播放 | 大地资源中文第3页 | 日本丰满护士爆乳xxxx | 狠狠色色综合网站 | 日日碰狠狠躁久久躁蜜桃 | 激情五月综合色婷婷一区二区 | 久久视频在线观看精品 | 天天躁夜夜躁狠狠是什么心态 | 欧美 丝袜 自拍 制服 另类 | 中文字幕人妻无码一夲道 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲一区av无码专区在线观看 | 日日躁夜夜躁狠狠躁 | 日韩无码专区 | 成人欧美一区二区三区黑人 | 国产在线精品一区二区三区直播 | 国产精品美女久久久网av | 一本久久a久久精品vr综合 | 国产肉丝袜在线观看 | 日日躁夜夜躁狠狠躁 | 国产成人综合美国十次 | 日韩欧美群交p片內射中文 | 又色又爽又黄的美女裸体网站 | 精品偷拍一区二区三区在线看 | 领导边摸边吃奶边做爽在线观看 | 亚洲s码欧洲m码国产av | 精品人妻人人做人人爽 | av香港经典三级级 在线 | 中文毛片无遮挡高清免费 | 亚洲精品国产品国语在线观看 | 国产内射爽爽大片视频社区在线 | 欧美zoozzooz性欧美 | 亚洲成熟女人毛毛耸耸多 | 亚洲国产av美女网站 | 中文字幕无码免费久久9一区9 | 在线观看欧美一区二区三区 | √天堂中文官网8在线 | 色 综合 欧美 亚洲 国产 | 美女黄网站人色视频免费国产 | 在线欧美精品一区二区三区 | 99久久99久久免费精品蜜桃 | 久久婷婷五月综合色国产香蕉 | 国产在热线精品视频 | 欧美熟妇另类久久久久久多毛 | 无码精品国产va在线观看dvd | 中文字幕色婷婷在线视频 | 中文字幕+乱码+中文字幕一区 | 亚洲中文字幕在线无码一区二区 | 鲁鲁鲁爽爽爽在线视频观看 | 日韩少妇内射免费播放 | 伊在人天堂亚洲香蕉精品区 | 国产热a欧美热a在线视频 | 97久久超碰中文字幕 | 性欧美牲交xxxxx视频 | 免费看少妇作爱视频 | 午夜无码区在线观看 | 亚洲日本在线电影 | 无码精品国产va在线观看dvd | 中文字幕精品av一区二区五区 | 清纯唯美经典一区二区 | 亚洲自偷自偷在线制服 | 中文字幕av伊人av无码av | 国产精品怡红院永久免费 | 丰满人妻翻云覆雨呻吟视频 | 日本熟妇大屁股人妻 | 亚洲国产精品一区二区美利坚 | 男女猛烈xx00免费视频试看 | 久久亚洲a片com人成 | 中文字幕乱码人妻无码久久 | 国产精品成人av在线观看 | 国产亚洲人成a在线v网站 | 在线精品国产一区二区三区 | 国产精品亚洲lv粉色 | 国产成人综合在线女婷五月99播放 | 黄网在线观看免费网站 | 中文字幕 亚洲精品 第1页 | 天天摸天天碰天天添 | 久久久久亚洲精品男人的天堂 | 日本www一道久久久免费榴莲 | 毛片内射-百度 | 精品一区二区三区波多野结衣 | 免费男性肉肉影院 | 亚洲 另类 在线 欧美 制服 | 三上悠亚人妻中文字幕在线 | 国产精品人人妻人人爽 | 亚洲精品一区二区三区在线观看 | 欧美日本日韩 | 日韩av无码一区二区三区 | 人人妻人人澡人人爽欧美精品 | 丰满人妻被黑人猛烈进入 | 国产真实伦对白全集 | 亲嘴扒胸摸屁股激烈网站 | 中文字幕乱码人妻无码久久 | 色 综合 欧美 亚洲 国产 | 国产成人无码区免费内射一片色欲 | 少妇性l交大片欧洲热妇乱xxx | 国产成人无码av在线影院 | 国产精品免费大片 | 四虎国产精品免费久久 | 中文字幕无码人妻少妇免费 | 亚洲国产精品无码久久久久高潮 | 日韩精品无码一区二区中文字幕 | 成人无码精品1区2区3区免费看 | 亚洲色www成人永久网址 | 国产精品久久久久无码av色戒 | а√资源新版在线天堂 | 欧美阿v高清资源不卡在线播放 | 国产精品毛多多水多 | 国产亚av手机在线观看 | 精品久久综合1区2区3区激情 | 亚洲成av人片在线观看无码不卡 | 免费观看激色视频网站 | 久久久国产精品无码免费专区 | 日韩精品无码一区二区中文字幕 | 漂亮人妻洗澡被公强 日日躁 | 男人的天堂av网站 | 3d动漫精品啪啪一区二区中 | 中文字幕无码日韩专区 | 国产区女主播在线观看 | 一本久道高清无码视频 | 国产精品va在线观看无码 | 天天做天天爱天天爽综合网 | 亚洲国产欧美在线成人 | 人妻天天爽夜夜爽一区二区 | 欧洲vodafone精品性 | 色偷偷人人澡人人爽人人模 | 亚洲中文字幕在线无码一区二区 | 青春草在线视频免费观看 | 亚洲码国产精品高潮在线 | 青青草原综合久久大伊人精品 | 国产在线无码精品电影网 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产亚洲精品久久久久久国模美 | 国产97色在线 | 免 | 无套内谢的新婚少妇国语播放 | 俺去俺来也在线www色官网 | 丰满人妻一区二区三区免费视频 | 国产97在线 | 亚洲 | 国产精品久久久久无码av色戒 | 大地资源网第二页免费观看 | 成熟妇人a片免费看网站 | 国产办公室秘书无码精品99 | 熟妇女人妻丰满少妇中文字幕 | 久久久久成人片免费观看蜜芽 | 国产午夜亚洲精品不卡下载 | 久热国产vs视频在线观看 | 欧美成人免费全部网站 | 精品 日韩 国产 欧美 视频 | 亚洲区小说区激情区图片区 | 97精品国产97久久久久久免费 | 免费观看激色视频网站 | 国产亚洲日韩欧美另类第八页 | 精品偷拍一区二区三区在线看 | 色五月丁香五月综合五月 | 99国产欧美久久久精品 | 亚洲成av人影院在线观看 | 小sao货水好多真紧h无码视频 | 兔费看少妇性l交大片免费 | 人妻有码中文字幕在线 | 国产成人精品久久亚洲高清不卡 | 亚洲国产精品一区二区美利坚 | 亚洲综合伊人久久大杳蕉 | 亚洲中文字幕无码一久久区 | 亚洲欧美日韩综合久久久 | 国产亚洲精品久久久久久大师 | 亚洲の无码国产の无码影院 | 沈阳熟女露脸对白视频 | 欧美人妻一区二区三区 | 国产精品久久久久久亚洲影视内衣 | 人妻无码久久精品人妻 | 精品国产一区二区三区四区在线看 | 国产卡一卡二卡三 | 国产猛烈高潮尖叫视频免费 | 久久午夜无码鲁丝片 | 性做久久久久久久免费看 | 欧美日韩综合一区二区三区 | 日本大香伊一区二区三区 | 精品国产成人一区二区三区 | 国产一区二区不卡老阿姨 | 成人免费无码大片a毛片 | 成人欧美一区二区三区黑人免费 | 日韩av无码中文无码电影 | 亚洲欧美精品伊人久久 | 久久成人a毛片免费观看网站 | 99久久人妻精品免费一区 | 国产后入清纯学生妹 | aⅴ亚洲 日韩 色 图网站 播放 | 国产国产精品人在线视 | 中文字幕日韩精品一区二区三区 | 亚洲国产精品久久久久久 | 蜜臀av无码人妻精品 | 久久久久久国产精品无码下载 | 97色伦图片97综合影院 | 免费人成在线视频无码 | 无码精品人妻一区二区三区av | 亚洲欧美国产精品久久 | 欧美亚洲国产一区二区三区 | 成人女人看片免费视频放人 | 成在人线av无码免费 | 亚洲熟妇自偷自拍另类 | 国产精品办公室沙发 | 久9re热视频这里只有精品 | 国产香蕉97碰碰久久人人 | 中文字幕人妻无码一夲道 | 国产av一区二区精品久久凹凸 | 成在人线av无码免观看麻豆 | 久久久精品人妻久久影视 | 久久综合激激的五月天 | 国产又爽又黄又刺激的视频 | 国产精品无码一区二区三区不卡 | 国产精品久久久久无码av色戒 | 成人亚洲精品久久久久 | 日本一区二区更新不卡 | 亚洲自偷自拍另类第1页 | 亚洲一区二区三区 | 久久亚洲精品中文字幕无男同 | 午夜理论片yy44880影院 | 伊人久久大香线焦av综合影院 | 18无码粉嫩小泬无套在线观看 | 无码人妻黑人中文字幕 | 无码人妻出轨黑人中文字幕 | 日本一区二区更新不卡 | 欧美精品无码一区二区三区 | 国产午夜福利100集发布 | 日本熟妇人妻xxxxx人hd | 牲欲强的熟妇农村老妇女 | 精品国精品国产自在久国产87 | 中文字幕无码免费久久9一区9 | 性生交大片免费看女人按摩摩 | 日本一本二本三区免费 | 黑人巨大精品欧美黑寡妇 | 国产精品a成v人在线播放 | 又大又黄又粗又爽的免费视频 | www国产精品内射老师 | 大肉大捧一进一出好爽视频 | 久久久久亚洲精品中文字幕 | 成人免费视频视频在线观看 免费 | 国产精品美女久久久 | 好男人社区资源 | 日本成熟视频免费视频 | 欧美喷潮久久久xxxxx | 成年美女黄网站色大免费视频 | 成人精品视频一区二区三区尤物 | 日产精品99久久久久久 | 日本成熟视频免费视频 | 亚洲色欲色欲天天天www | 亚洲欧美日韩国产精品一区二区 | 国产亚洲tv在线观看 | 丝袜美腿亚洲一区二区 | 免费乱码人妻系列无码专区 | 小sao货水好多真紧h无码视频 | 久久天天躁夜夜躁狠狠 | 老子影院午夜精品无码 | 成人精品一区二区三区中文字幕 | 疯狂三人交性欧美 | 亚洲日韩av一区二区三区中文 | a在线观看免费网站大全 | 无码国产色欲xxxxx视频 | 午夜性刺激在线视频免费 | 成人亚洲精品久久久久软件 | 久9re热视频这里只有精品 | 中文字幕人妻丝袜二区 | 国产精品美女久久久 | 国产精品久久久久影院嫩草 | 国产一区二区三区精品视频 | 国产精品欧美成人 | 精品无码国产一区二区三区av | 亚洲精品成人av在线 | 乱人伦人妻中文字幕无码 | 伊在人天堂亚洲香蕉精品区 | 日韩成人一区二区三区在线观看 | 欧美日本精品一区二区三区 | 大肉大捧一进一出视频出来呀 | 久久人人爽人人爽人人片ⅴ | 久久久久人妻一区精品色欧美 | 黑人大群体交免费视频 | 精品国精品国产自在久国产87 | 六十路熟妇乱子伦 | 国产真人无遮挡作爱免费视频 | 野狼第一精品社区 | 夜夜影院未满十八勿进 | 一区二区传媒有限公司 | 亚洲欧美色中文字幕在线 | 久久综合九色综合97网 | 波多野结衣乳巨码无在线观看 | 国产亚洲美女精品久久久2020 | 兔费看少妇性l交大片免费 | 秋霞成人午夜鲁丝一区二区三区 | 国产成人综合在线女婷五月99播放 | 精品久久综合1区2区3区激情 | 亚洲啪av永久无码精品放毛片 | 福利一区二区三区视频在线观看 | 亚洲日本一区二区三区在线 | 成人欧美一区二区三区黑人 | 日韩av无码一区二区三区 | 无码人妻丰满熟妇区毛片18 | 少妇性l交大片欧洲热妇乱xxx | 男人的天堂2018无码 | 亚洲国产欧美在线成人 | 欧美精品国产综合久久 | 99久久人妻精品免费二区 | 国产精品亚洲一区二区三区喷水 | 在线 国产 欧美 亚洲 天堂 | 国产亚洲精品久久久久久久 | 在线看片无码永久免费视频 | 免费人成在线视频无码 | 久久人人爽人人爽人人片av高清 | 激情爆乳一区二区三区 | 久久99精品久久久久久 | 色欲久久久天天天综合网精品 | 日本一卡二卡不卡视频查询 | 成人精品视频一区二区 | 欧美精品国产综合久久 | 欧美兽交xxxx×视频 | 色五月丁香五月综合五月 | 中国女人内谢69xxxxxa片 | 精品久久久久久人妻无码中文字幕 | 久久精品无码一区二区三区 | 久久亚洲日韩精品一区二区三区 | 无码毛片视频一区二区本码 | 久激情内射婷内射蜜桃人妖 | 国产xxx69麻豆国语对白 | 国内少妇偷人精品视频 | 性色欲网站人妻丰满中文久久不卡 | 女人被男人爽到呻吟的视频 | 国产精品久久久久7777 | 中文字幕无码日韩专区 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产人妻精品一区二区三区 | 亚洲码国产精品高潮在线 | 久久www免费人成人片 | 少妇一晚三次一区二区三区 | 老熟女重囗味hdxx69 | 久久精品女人的天堂av | 国产真实伦对白全集 | 国产综合久久久久鬼色 | 国产舌乚八伦偷品w中 | 中文字幕日产无线码一区 | 欧美激情一区二区三区成人 | 爱做久久久久久 | 日韩人妻无码一区二区三区久久99 | 成人精品视频一区二区三区尤物 | 婷婷五月综合缴情在线视频 | 亚洲中文字幕无码中字 | 高潮毛片无遮挡高清免费 | 国产精品igao视频网 | 精品无码一区二区三区的天堂 | 我要看www免费看插插视频 | 国产精品人人妻人人爽 | 99久久精品国产一区二区蜜芽 | 午夜无码人妻av大片色欲 | 女人被爽到呻吟gif动态图视看 | 俺去俺来也在线www色官网 | 天堂а√在线中文在线 | 久久99精品国产麻豆蜜芽 | 国产香蕉97碰碰久久人人 | 天天拍夜夜添久久精品大 | 精品久久8x国产免费观看 | 国产乱人无码伦av在线a | 老太婆性杂交欧美肥老太 | 无码福利日韩神码福利片 | 强奷人妻日本中文字幕 | 任你躁在线精品免费 | 综合激情五月综合激情五月激情1 | 少妇性l交大片欧洲热妇乱xxx | 妺妺窝人体色www婷婷 | 思思久久99热只有频精品66 | 国产成人无码午夜视频在线观看 | 色综合视频一区二区三区 | 夫妻免费无码v看片 | 奇米影视7777久久精品 | 国产亚洲精品精品国产亚洲综合 | 久久人妻内射无码一区三区 | 亚洲欧美日韩成人高清在线一区 | 国产无遮挡又黄又爽又色 | 国产精品欧美成人 | 全球成人中文在线 | 亚洲色成人中文字幕网站 | 国产精品美女久久久网av | 精品乱码久久久久久久 | 东北女人啪啪对白 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲色大成网站www | 国产激情艳情在线看视频 | 国产av无码专区亚洲awww | a在线亚洲男人的天堂 | 欧美日韩久久久精品a片 | 欧美人与禽zoz0性伦交 | 国产精品久久久av久久久 | 日本va欧美va欧美va精品 | 国产成人久久精品流白浆 | 丁香啪啪综合成人亚洲 | 巨爆乳无码视频在线观看 | 久久精品中文字幕大胸 | 国产成人精品视频ⅴa片软件竹菊 | 麻豆精品国产精华精华液好用吗 | 国産精品久久久久久久 | av香港经典三级级 在线 | 夜夜影院未满十八勿进 | 日产精品高潮呻吟av久久 | 波多野结衣av一区二区全免费观看 | 俄罗斯老熟妇色xxxx | 激情爆乳一区二区三区 | 成人试看120秒体验区 | 亚洲欧洲日本综合aⅴ在线 | 日韩av无码一区二区三区不卡 | 欧美日韩在线亚洲综合国产人 | 亚洲精品中文字幕 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产精品久久久久影院嫩草 | 亚洲精品一区二区三区大桥未久 | 国产农村妇女高潮大叫 | 久久综合给合久久狠狠狠97色 | 久久久婷婷五月亚洲97号色 | 久久国产精品萌白酱免费 | a在线观看免费网站大全 | 2019nv天堂香蕉在线观看 | 国产亚洲视频中文字幕97精品 | 久久人人爽人人爽人人片ⅴ | 大屁股大乳丰满人妻 | 日韩在线不卡免费视频一区 | 曰韩无码二三区中文字幕 | 国色天香社区在线视频 | a片免费视频在线观看 | 丰满少妇熟乱xxxxx视频 | 欧美人与禽猛交狂配 | 亚洲成a人片在线观看无码3d | 欧美午夜特黄aaaaaa片 | 天堂无码人妻精品一区二区三区 | 日日摸夜夜摸狠狠摸婷婷 | 中文字幕+乱码+中文字幕一区 | 无码av岛国片在线播放 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 日日躁夜夜躁狠狠躁 | 日本一卡二卡不卡视频查询 | 国产成人无码av在线影院 | 亚洲精品综合五月久久小说 | 日韩av无码一区二区三区 | 国产精品久久久久久久9999 | 荫蒂被男人添的好舒服爽免费视频 | 成年美女黄网站色大免费视频 | 99久久人妻精品免费二区 | 亚洲精品久久久久中文第一幕 | 免费观看又污又黄的网站 | 国产两女互慰高潮视频在线观看 | 国产乱人无码伦av在线a | 一区二区传媒有限公司 | 欧美老妇与禽交 | 国产精品a成v人在线播放 | 人妻与老人中文字幕 | 欧美午夜特黄aaaaaa片 | 国产精品多人p群无码 | 午夜丰满少妇性开放视频 | 牲欲强的熟妇农村老妇女视频 | 国产va免费精品观看 | 亚洲国产综合无码一区 | 性生交大片免费看女人按摩摩 | 女人被男人爽到呻吟的视频 | 亚洲中文字幕在线无码一区二区 | 中文字幕 人妻熟女 | 国产亚洲精品久久久久久 | 给我免费的视频在线观看 | 夜夜夜高潮夜夜爽夜夜爰爰 | 东北女人啪啪对白 | 乱人伦人妻中文字幕无码久久网 | 无码播放一区二区三区 | 久久人人爽人人爽人人片av高清 | 欧美日韩一区二区免费视频 | 大地资源中文第3页 | 香蕉久久久久久av成人 | 中文字幕精品av一区二区五区 | 51国偷自产一区二区三区 | 黑森林福利视频导航 | 在线精品亚洲一区二区 | 日韩精品无码一本二本三本色 | 国产真实伦对白全集 | 日韩无套无码精品 | a片在线免费观看 | 免费人成在线视频无码 | 在线播放无码字幕亚洲 | 亚洲精品久久久久avwww潮水 | 无码国产激情在线观看 | 亚洲综合无码久久精品综合 | 国产成人无码区免费内射一片色欲 | 国产欧美精品一区二区三区 | 国产麻豆精品精东影业av网站 | 天堂а√在线地址中文在线 | 国产午夜福利100集发布 | 在线观看国产午夜福利片 | 人人爽人人澡人人人妻 | 国产美女精品一区二区三区 | 激情内射亚州一区二区三区爱妻 | 亚洲成在人网站无码天堂 | 狠狠cao日日穞夜夜穞av | 亚洲国精产品一二二线 | 亚洲综合色区中文字幕 | 欧美35页视频在线观看 | 粉嫩少妇内射浓精videos | 精品国偷自产在线视频 | 日韩精品久久久肉伦网站 | 熟女俱乐部五十路六十路av | 午夜理论片yy44880影院 | 老头边吃奶边弄进去呻吟 | 沈阳熟女露脸对白视频 | 精品人妻中文字幕有码在线 | 无码精品国产va在线观看dvd | 人妻熟女一区 | 377p欧洲日本亚洲大胆 | 高清不卡一区二区三区 | 精品成人av一区二区三区 | 亚洲精品国产品国语在线观看 | 丰满岳乱妇在线观看中字无码 | 精品国产乱码久久久久乱码 | 男女爱爱好爽视频免费看 | 久久精品视频在线看15 | 久久久久99精品成人片 | 夜精品a片一区二区三区无码白浆 | 久久www免费人成人片 | 黑人大群体交免费视频 | 麻豆国产人妻欲求不满谁演的 | 无码人妻黑人中文字幕 | 清纯唯美经典一区二区 | 人妻少妇被猛烈进入中文字幕 | 中文字幕人成乱码熟女app | 中文字幕无码日韩专区 | 天天燥日日燥 | 亚洲欧美精品aaaaaa片 | 99久久人妻精品免费二区 | 亚洲自偷自拍另类第1页 | 亚洲日本va午夜在线电影 | 国产xxx69麻豆国语对白 | 国产情侣作爱视频免费观看 | 亚洲娇小与黑人巨大交 | 亚洲国产精品成人久久蜜臀 | 一本色道久久综合亚洲精品不卡 | 青青青爽视频在线观看 | 狂野欧美性猛交免费视频 | 红桃av一区二区三区在线无码av | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 久久99精品国产麻豆 | 亚洲精品国产a久久久久久 | 国产精品鲁鲁鲁 | 亚洲国产欧美国产综合一区 | 又紧又大又爽精品一区二区 | 亚洲中文字幕乱码av波多ji | 极品尤物被啪到呻吟喷水 | 亚洲成av人片天堂网无码】 | 国产人妻大战黑人第1集 | 欧美 日韩 人妻 高清 中文 | 野外少妇愉情中文字幕 | 色综合久久中文娱乐网 | 亚洲成a人片在线观看无码 | 中文字幕无码免费久久9一区9 | 老司机亚洲精品影院无码 | 夜夜影院未满十八勿进 | 麻豆蜜桃av蜜臀av色欲av | 免费人成在线观看网站 | 波多野结衣av一区二区全免费观看 | 欧美野外疯狂做受xxxx高潮 | 樱花草在线社区www | 国产精品igao视频网 | 国产午夜手机精彩视频 | 乌克兰少妇性做爰 | 国产人妻精品一区二区三区不卡 | 亚洲一区二区三区含羞草 | 日本精品少妇一区二区三区 | 毛片内射-百度 | 欧洲精品码一区二区三区免费看 | 日韩视频 中文字幕 视频一区 | 久久国产自偷自偷免费一区调 | 日韩人妻无码一区二区三区久久99 | 国产精品久久久久久久9999 | 久久精品99久久香蕉国产色戒 | 欧美激情一区二区三区成人 | 国产精品福利视频导航 | 国产午夜无码精品免费看 | 99久久99久久免费精品蜜桃 | 日韩在线不卡免费视频一区 | 国产片av国语在线观看 | 午夜嘿嘿嘿影院 | 中文字幕乱码人妻二区三区 | 国产成人无码av在线影院 | 又大又硬又爽免费视频 | 水蜜桃色314在线观看 | 成人欧美一区二区三区黑人 | 精品一区二区三区波多野结衣 | 亚洲国产欧美日韩精品一区二区三区 | 一本一道久久综合久久 | 黑人大群体交免费视频 | 极品尤物被啪到呻吟喷水 | 日本一卡2卡3卡四卡精品网站 | 无码人中文字幕 | 少妇被黑人到高潮喷出白浆 | 国产肉丝袜在线观看 | 日本一区二区更新不卡 | 特黄特色大片免费播放器图片 | 色一情一乱一伦 | 久久精品人妻少妇一区二区三区 | 樱花草在线播放免费中文 | 日本一卡2卡3卡四卡精品网站 | 撕开奶罩揉吮奶头视频 | 亚洲精品午夜国产va久久成人 | 性欧美牲交xxxxx视频 | 蜜臀av在线播放 久久综合激激的五月天 | 日日碰狠狠丁香久燥 | 久久精品女人天堂av免费观看 | 亚洲男女内射在线播放 | 亚洲毛片av日韩av无码 | 无码人妻少妇伦在线电影 | 激情内射日本一区二区三区 | 亚洲日本在线电影 | 两性色午夜视频免费播放 | 性开放的女人aaa片 | 亚洲中文字幕无码中文字在线 | 又紧又大又爽精品一区二区 | 日本熟妇人妻xxxxx人hd | 蜜桃无码一区二区三区 | 图片小说视频一区二区 | 成人三级无码视频在线观看 | 国内精品人妻无码久久久影院 | 亚洲精品一区二区三区大桥未久 | 国产精品久久久久久久9999 | 午夜精品久久久久久久 | 377p欧洲日本亚洲大胆 | 亚洲高清偷拍一区二区三区 | 樱花草在线播放免费中文 | 国产又粗又硬又大爽黄老大爷视 | 久久久久久久人妻无码中文字幕爆 | 国产成人无码区免费内射一片色欲 | 又粗又大又硬又长又爽 | 国产成人精品久久亚洲高清不卡 | 国产又爽又黄又刺激的视频 | 亚洲色欲久久久综合网东京热 | 久久99久久99精品中文字幕 | 少妇被粗大的猛进出69影院 | 国产午夜亚洲精品不卡 | 日本va欧美va欧美va精品 | 国产美女极度色诱视频www | 亚洲天堂2017无码中文 | 精品国产福利一区二区 | 国产国产精品人在线视 | 无码人妻精品一区二区三区不卡 | 高潮毛片无遮挡高清免费 | 欧洲vodafone精品性 | 97人妻精品一区二区三区 | 欧美喷潮久久久xxxxx | 老司机亚洲精品影院无码 | 久久精品国产大片免费观看 | 老熟妇乱子伦牲交视频 | 亚洲精品www久久久 | 国产成人精品优优av | 久久精品女人的天堂av | 波多野结衣 黑人 | 老熟女重囗味hdxx69 | 国产亲子乱弄免费视频 | 色综合天天综合狠狠爱 | 99久久人妻精品免费一区 | yw尤物av无码国产在线观看 | 成人影院yy111111在线观看 | 亚洲国产精品久久久天堂 | 欧美成人午夜精品久久久 | 国产欧美亚洲精品a | a国产一区二区免费入口 | 狠狠色色综合网站 | 久在线观看福利视频 | 天堂在线观看www | 初尝人妻少妇中文字幕 | 日韩人妻无码一区二区三区久久99 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 日本成熟视频免费视频 | 亚洲无人区一区二区三区 | 一本久久a久久精品vr综合 | 国产在线一区二区三区四区五区 | 国产情侣作爱视频免费观看 | 激情五月综合色婷婷一区二区 | 国产精品99久久精品爆乳 | 鲁大师影院在线观看 | 欧美精品一区二区精品久久 | 国产激情无码一区二区app | 国产特级毛片aaaaaa高潮流水 | 国产无套内射久久久国产 | 亚洲娇小与黑人巨大交 | 97夜夜澡人人爽人人喊中国片 | 乱人伦人妻中文字幕无码久久网 | 伊人久久大香线蕉av一区二区 | 亚洲区欧美区综合区自拍区 | 最新国产麻豆aⅴ精品无码 | 久久天天躁夜夜躁狠狠 | 久久国产精品偷任你爽任你 | 亚洲色欲色欲欲www在线 | 亚洲色欲色欲天天天www | 2020最新国产自产精品 | 成人免费视频视频在线观看 免费 | 午夜福利试看120秒体验区 | 午夜精品一区二区三区的区别 | 国产成人亚洲综合无码 | 中文字幕 亚洲精品 第1页 | 亚洲精品一区二区三区大桥未久 | 人妻无码αv中文字幕久久琪琪布 | 久久视频在线观看精品 | 亚洲精品国产第一综合99久久 | 波多野结衣av一区二区全免费观看 | 丝袜 中出 制服 人妻 美腿 | 久久综合狠狠综合久久综合88 | 欧洲精品码一区二区三区免费看 | 色狠狠av一区二区三区 | 国产成人无码区免费内射一片色欲 | 好爽又高潮了毛片免费下载 | 国产熟女一区二区三区四区五区 | 亚洲色无码一区二区三区 | 亚洲成a人片在线观看无码3d | 国产精品无码久久av | 国产国产精品人在线视 | 性史性农村dvd毛片 | 人人妻人人澡人人爽欧美一区九九 | 精品国产av色一区二区深夜久久 | 日韩 欧美 动漫 国产 制服 | 丝袜美腿亚洲一区二区 | 性生交大片免费看女人按摩摩 | 国内精品人妻无码久久久影院蜜桃 | 国产精品永久免费视频 | 欧美成人免费全部网站 | 亚洲日韩乱码中文无码蜜桃臀网站 | 一本大道伊人av久久综合 | 国产网红无码精品视频 | 欧美丰满熟妇xxxx | 日韩av激情在线观看 | 国产精品第一区揄拍无码 | 亚洲另类伦春色综合小说 | 亚洲人亚洲人成电影网站色 | 大地资源中文第3页 | 99麻豆久久久国产精品免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 精品国产成人一区二区三区 | 国产成人无码一二三区视频 | 亚洲成a人片在线观看无码3d | 国内精品久久久久久中文字幕 | 色一情一乱一伦 | 国产亚洲视频中文字幕97精品 | 亚洲精品一区二区三区婷婷月 | 成人亚洲精品久久久久 | 18禁止看的免费污网站 | 国产午夜亚洲精品不卡 | 日韩av无码一区二区三区不卡 | 高潮毛片无遮挡高清免费视频 | 蜜桃av抽搐高潮一区二区 | 国产av一区二区三区最新精品 | 亚洲熟妇色xxxxx欧美老妇y | 初尝人妻少妇中文字幕 | 欧美丰满老熟妇xxxxx性 | 天天燥日日燥 | 西西人体www44rt大胆高清 | 久久99精品久久久久久动态图 | 一个人免费观看的www视频 | 鲁一鲁av2019在线 | 国产精品久久久久9999小说 | 丰满诱人的人妻3 | 久久国产精品精品国产色婷婷 | 日日橹狠狠爱欧美视频 | 波多野结衣乳巨码无在线观看 | 特黄特色大片免费播放器图片 | 国产又爽又黄又刺激的视频 | 无码午夜成人1000部免费视频 | 欧美人与物videos另类 | 久久久久亚洲精品中文字幕 | 欧美老熟妇乱xxxxx | 中文毛片无遮挡高清免费 | 亚洲成a人一区二区三区 | 无码人妻精品一区二区三区下载 | 国产精品久久久久影院嫩草 | 一本久道高清无码视频 | 天堂一区人妻无码 | 激情内射亚州一区二区三区爱妻 | 国产美女精品一区二区三区 | 色婷婷久久一区二区三区麻豆 | 女人和拘做爰正片视频 | 国产亚洲视频中文字幕97精品 | 欧美xxxx黑人又粗又长 | 一本大道伊人av久久综合 | 亚洲va欧美va天堂v国产综合 | 少妇人妻偷人精品无码视频 | 日本精品久久久久中文字幕 | 男女爱爱好爽视频免费看 | 老熟女乱子伦 | 日韩人妻无码一区二区三区久久99 | 亚洲热妇无码av在线播放 | 久久伊人色av天堂九九小黄鸭 | 丝袜足控一区二区三区 | 十八禁真人啪啪免费网站 | 日韩欧美成人免费观看 | 在线精品国产一区二区三区 | 日本爽爽爽爽爽爽在线观看免 | 97精品人妻一区二区三区香蕉 | 国产亚洲视频中文字幕97精品 | 在线观看国产一区二区三区 | 亚洲综合在线一区二区三区 | 精品国产国产综合精品 | 中文字幕乱妇无码av在线 | 中文字幕无码免费久久9一区9 | 日韩人妻无码一区二区三区久久99 | 久久久亚洲欧洲日产国码αv | 国产精品久久久久久亚洲影视内衣 | 亚洲理论电影在线观看 | 国产精品久久久久久久9999 | 少妇无套内谢久久久久 | 亚洲精品一区三区三区在线观看 | 我要看www免费看插插视频 | 中文字幕无码av激情不卡 | 国产人妻人伦精品1国产丝袜 | 日日夜夜撸啊撸 | 超碰97人人射妻 | 久久国产精品精品国产色婷婷 | 成人免费视频一区二区 | 国产网红无码精品视频 | 国产成人精品三级麻豆 | 亚洲一区二区三区香蕉 | 午夜免费福利小电影 | 中文字幕亚洲情99在线 | 亚洲伊人久久精品影院 | 日日麻批免费40分钟无码 | 欧美xxxxx精品 | 日本www一道久久久免费榴莲 | 在线看片无码永久免费视频 | 欧美老人巨大xxxx做受 | 熟妇人妻无乱码中文字幕 | 综合激情五月综合激情五月激情1 | 中文字幕无码免费久久9一区9 | 久久午夜无码鲁丝片午夜精品 | 熟女俱乐部五十路六十路av | 极品尤物被啪到呻吟喷水 | 亚洲国产一区二区三区在线观看 | 久久精品国产99久久6动漫 | 超碰97人人做人人爱少妇 | 国产亚av手机在线观看 | 国产疯狂伦交大片 | 男人的天堂av网站 | 久久久中文久久久无码 | 欧美国产亚洲日韩在线二区 | 欧美一区二区三区视频在线观看 | 久久国产劲爆∧v内射 | 特黄特色大片免费播放器图片 | 国产亚洲人成在线播放 | 在线亚洲高清揄拍自拍一品区 | 久激情内射婷内射蜜桃人妖 | 无码人妻久久一区二区三区不卡 | 在线精品亚洲一区二区 | 内射后入在线观看一区 | 国产卡一卡二卡三 | 国产超级va在线观看视频 | 色一情一乱一伦一区二区三欧美 | 亚洲 日韩 欧美 成人 在线观看 | 国产激情无码一区二区 | 亚洲色欲色欲欲www在线 | 国产人成高清在线视频99最全资源 | 欧美 丝袜 自拍 制服 另类 | 少妇性荡欲午夜性开放视频剧场 | 色综合天天综合狠狠爱 | 97人妻精品一区二区三区 | 麻豆国产97在线 | 欧洲 | 亚洲日韩av一区二区三区中文 | 国产成人精品一区二区在线小狼 | 扒开双腿疯狂进出爽爽爽视频 | 欧美xxxxx精品 | 精品人妻中文字幕有码在线 | 女人高潮内射99精品 | 亚洲中文字幕成人无码 | 午夜无码人妻av大片色欲 | 最近免费中文字幕中文高清百度 | 亚洲男人av天堂午夜在 | 伊人久久大香线蕉av一区二区 | 领导边摸边吃奶边做爽在线观看 | 人人妻人人澡人人爽欧美一区 | 国内老熟妇对白xxxxhd | 欧美成人家庭影院 | 成熟人妻av无码专区 | 88国产精品欧美一区二区三区 | 亚洲 a v无 码免 费 成 人 a v | 国产成人综合在线女婷五月99播放 | 人妻中文无码久热丝袜 | 亚洲一区二区三区播放 | 国产婷婷色一区二区三区在线 | 未满小14洗澡无码视频网站 | 国产精品亚洲综合色区韩国 | 亚洲人交乣女bbw | 国产高清av在线播放 | 精品一区二区不卡无码av | 久久久久久久人妻无码中文字幕爆 | 欧美丰满老熟妇xxxxx性 | 亚洲综合无码一区二区三区 | 国产小呦泬泬99精品 | 大色综合色综合网站 | 国产精品亚洲а∨无码播放麻豆 | 欧美刺激性大交 | 日本饥渴人妻欲求不满 | 六十路熟妇乱子伦 | 无码人妻精品一区二区三区不卡 | 一个人看的www免费视频在线观看 | 亚洲自偷自偷在线制服 | 激情内射日本一区二区三区 | 人人爽人人澡人人高潮 | 国产偷自视频区视频 | 欧美第一黄网免费网站 | 免费无码的av片在线观看 | 婷婷五月综合激情中文字幕 | 天天躁日日躁狠狠躁免费麻豆 | 一区二区三区乱码在线 | 欧洲 | 少妇人妻偷人精品无码视频 | 鲁大师影院在线观看 | 国产舌乚八伦偷品w中 | 久久久亚洲欧洲日产国码αv | 日本va欧美va欧美va精品 | 午夜精品一区二区三区的区别 | 麻豆av传媒蜜桃天美传媒 | 一个人免费观看的www视频 | 国产香蕉尹人综合在线观看 | 国产精品久久国产精品99 | 久久zyz资源站无码中文动漫 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲va中文字幕无码久久不卡 | 夜精品a片一区二区三区无码白浆 | 蜜桃视频韩日免费播放 | 亚洲人成无码网www | 毛片内射-百度 | 久久久av男人的天堂 | 狠狠躁日日躁夜夜躁2020 | 无码任你躁久久久久久久 | 亚洲狠狠色丁香婷婷综合 | 中文字幕无码av激情不卡 | 性色av无码免费一区二区三区 | 亚洲の无码国产の无码步美 | 暴力强奷在线播放无码 | 东京热一精品无码av | 东京无码熟妇人妻av在线网址 | 在线天堂新版最新版在线8 | 国产激情综合五月久久 | 欧美亚洲国产一区二区三区 | 又色又爽又黄的美女裸体网站 | 久久国产自偷自偷免费一区调 | 特黄特色大片免费播放器图片 | 亚洲人成影院在线观看 | 国模大胆一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 成在人线av无码免费 | 一本精品99久久精品77 | 国产热a欧美热a在线视频 | 1000部啪啪未满十八勿入下载 | 久久国产精品偷任你爽任你 | 日韩成人一区二区三区在线观看 | 又紧又大又爽精品一区二区 | 久久午夜无码鲁丝片午夜精品 | 亚洲日韩av片在线观看 | 亚洲理论电影在线观看 | aa片在线观看视频在线播放 | 国产真实伦对白全集 | 麻豆精产国品 | 国产精品美女久久久 | 亚洲午夜福利在线观看 | 一本久久伊人热热精品中文字幕 | 少女韩国电视剧在线观看完整 | 成人精品视频一区二区三区尤物 | 最近的中文字幕在线看视频 | 国产人妻精品一区二区三区 | 97久久国产亚洲精品超碰热 | www国产亚洲精品久久久日本 | 中文字幕无码免费久久99 | 九九综合va免费看 | 欧美精品国产综合久久 | 人人妻人人澡人人爽人人精品 | 久久精品中文闷骚内射 | 亚洲欧美精品aaaaaa片 | 精品人妻人人做人人爽夜夜爽 | 精品少妇爆乳无码av无码专区 | 天堂а√在线中文在线 | 成人精品视频一区二区三区尤物 | 日日鲁鲁鲁夜夜爽爽狠狠 | 中文字幕人成乱码熟女app | 欧美国产日韩亚洲中文 | 亚洲精品一区三区三区在线观看 | 亚洲熟女一区二区三区 | 亚洲综合在线一区二区三区 | 色五月五月丁香亚洲综合网 | 中文字幕乱码人妻二区三区 | 3d动漫精品啪啪一区二区中 | 亚洲国产欧美在线成人 | 暴力强奷在线播放无码 | 精品久久久无码中文字幕 | 无码国产乱人伦偷精品视频 | 夜夜躁日日躁狠狠久久av | 女人色极品影院 | 无遮无挡爽爽免费视频 | 樱花草在线社区www | 国产欧美亚洲精品a | 九一九色国产 | 久青草影院在线观看国产 | 久久国产劲爆∧v内射 | 国产电影无码午夜在线播放 | 国内精品一区二区三区不卡 | 国产无遮挡吃胸膜奶免费看 | 无码乱肉视频免费大全合集 | 男女作爱免费网站 | 国产卡一卡二卡三 | 欧美丰满少妇xxxx性 | 日本丰满护士爆乳xxxx | 亚洲狠狠婷婷综合久久 | 夜精品a片一区二区三区无码白浆 | 国产香蕉97碰碰久久人人 | 永久免费观看国产裸体美女 | 日本丰满熟妇videos | 国产精品无码一区二区三区不卡 | 亚无码乱人伦一区二区 | 亚洲国产成人av在线观看 | 亚洲色成人中文字幕网站 | 久久久久亚洲精品男人的天堂 | 国产成人无码区免费内射一片色欲 | 国产麻豆精品一区二区三区v视界 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲熟悉妇女xxx妇女av | 国产激情艳情在线看视频 | 国产综合久久久久鬼色 | 欧美丰满熟妇xxxx | 少妇被黑人到高潮喷出白浆 | 曰本女人与公拘交酡免费视频 | 亚洲精品一区二区三区在线 | 极品嫩模高潮叫床 | 男女超爽视频免费播放 | 东京无码熟妇人妻av在线网址 | 国产亚洲精品久久久闺蜜 | 永久免费观看美女裸体的网站 | 亚洲综合伊人久久大杳蕉 | 国产偷国产偷精品高清尤物 | 久久人人97超碰a片精品 | 亚洲国产高清在线观看视频 | 久久99精品国产麻豆蜜芽 | 99精品久久毛片a片 | 国产性生交xxxxx无码 | 精品欧洲av无码一区二区三区 | 国产内射爽爽大片视频社区在线 | 国内少妇偷人精品视频免费 | 日韩av无码中文无码电影 | 国产精品无码永久免费888 | 人人妻人人藻人人爽欧美一区 | 亚洲色在线无码国产精品不卡 | 窝窝午夜理论片影院 | 曰韩无码二三区中文字幕 | 亚洲色大成网站www | 特大黑人娇小亚洲女 | 丁香啪啪综合成人亚洲 | 男人扒开女人内裤强吻桶进去 | 天堂一区人妻无码 | 5858s亚洲色大成网站www | 在教室伦流澡到高潮hnp视频 | 俺去俺来也在线www色官网 | 国产成人综合在线女婷五月99播放 | 国产在热线精品视频 | 成人欧美一区二区三区黑人 | 又粗又大又硬又长又爽 | 99国产欧美久久久精品 | 国产激情综合五月久久 | 乱人伦人妻中文字幕无码久久网 | 精品国产一区二区三区av 性色 | 人人爽人人爽人人片av亚洲 | 中国大陆精品视频xxxx | 亚洲国产精品成人久久蜜臀 | 久久午夜夜伦鲁鲁片无码免费 | 免费男性肉肉影院 | 亚洲国产成人av在线观看 | 久久精品国产大片免费观看 | 欧美精品一区二区精品久久 |