国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

快速搭建python爬蟲管理平臺

瀏覽:18日期:2022-06-19 14:25:06
目錄爬蟲有多重要理解什么是爬蟲管理平臺定義廣義爬蟲管理平臺爬蟲管理平臺模塊爬蟲管理平臺架構為什么需要爬蟲管理平臺如何選擇一個合適的爬蟲管理平臺爬蟲管理平臺 Crawlab 介紹簡介解決問題界面及使用整體架構Github地址及Demo使用 Docker 部署安裝 CrawlabDocker 鏡像安裝 Docker安裝 Docker Compose拉取鏡像啟動 Crawlabdocker-compose如何將 Scrapy 等爬蟲集成到 CrawlabCrawlab 是執行爬蟲基本原理編寫 Pipeline上傳并配置爬蟲運行爬蟲任務構建持續集成(CI)工作流總結爬蟲有多重要

對搜索引擎來說,爬蟲不可或缺;對輿情公司來說,爬蟲是基礎;對 NLP來說,爬蟲可以獲取語料;對初創公司來說,爬蟲可以獲取初始內容。但是爬蟲技術紛繁復雜,不同類型的抓取場景會運用到不同的技術。例如,簡單的靜態頁面可以用 HTTP 請求+HTML 解析器直接搞定;一個動態頁面需要用 Puppeteer 或 Selenium等自動化測試工具;有反爬的網站需要用到代理、打碼等技術;等等。那么此時就需要一個成熟的爬蟲管理平臺,幫助企業或個人處理大量的爬蟲類別。

理解什么是爬蟲管理平臺定義

爬蟲管理平臺是一個一站式管理系統,集爬蟲部署、任務調度、任務監控、結果展示等模塊于一體,通常配有可視化 UI 界面,可以在 Web 端通過與 UI 界面交互來有效管理爬蟲。爬蟲管理平臺一般來說是支持分布式的,可以在多臺機器上協作運行。

當然,上述這個定義是狹義的,通常針對于技術人員或開發者或技術經理。企業內部一般都會開發自己的內部爬蟲管理系統,以應對復雜的爬蟲管理需求。這樣的系統就是上述定義的狹義的爬蟲管理平臺。

廣義爬蟲管理平臺

而什么是廣義的爬蟲管理平臺呢?您可能聽說過神箭手(后轉型為后羿采集器)和八爪魚吧。前者是基于云服務的,可以在線上編寫、運行和監控爬蟲,在廣義爬蟲平臺中最接近狹義定義的爬蟲管理平臺;后者是一個大眾的商業爬蟲抓取工具,可以讓小白用戶拖拉拽編寫、運行爬蟲,導出數據。您也可能見過各種 API 聚合服務商,例如聚合數據,這是一個可以直接調用網站接口獲取數據的平臺,這其實也算作爬蟲平臺的一個變種,只是它幫你完成了爬蟲編寫這一過程。而介于這兩者之間的呢,國外有一家叫 Kimonolab 的公司,它開發了一個叫 Kimono 的 Chrome 插件,可以讓用戶在頁面上可視化的點擊元素并生成抓取規則,并在其網站上生成爬蟲程序,用戶提交任務,后臺就可以自動在網站上抓取數據了。Kimono 是一個偉大的爬蟲應用,但可惜的是,Kimonolab 已經被大數據公司 Plantir 收購,現在也就無法體驗了。

在本文中,我們主要關注狹義定義的爬蟲管理平臺,因此后面所講到的爬蟲管理平臺都是指狹義的定義。

爬蟲管理平臺模塊

以下是一個典型的爬蟲管理平臺所涉及的模塊。

快速搭建python爬蟲管理平臺

爬蟲管理平臺架構

典型爬蟲管理平臺的模塊主要包含以下內容:

任務管理:如何執行、調度爬蟲抓取任務,以及如何監控任務,包括日志監控等等; 爬蟲管理:包括爬蟲部署,即將開發好的爬蟲部署(打包或復制)到相應的節點上,以及爬蟲配置和版本管理; 節點管理:包括節點(服務器/機器)的注冊和監控,以及節點之間的通信,如何監控節點性能狀況等; 前端應用:包括一個可視化 UI 界面,讓用戶可通過與其交互,與后臺應用進行通信。

當然,有些爬蟲管理平臺可能還不止這些模塊,它可能包括其他比較實用的功能,例如可配置的抓取規則、可視化配置抓取規則、代理池、Cookie 池、異常監控等等。

為什么需要爬蟲管理平臺

有了爬蟲管理平臺,開發者特別是爬蟲工程師就能夠方便的添加爬蟲、執行任務、查看結果,而不用在命令行之間來回切換,非常容易出錯。一個常見的場景就是爬蟲工程師最初技術選型用了 scrapy 和 crontab 來管理爬蟲任務,他不得不小心翼翼的選擇定時任務的時間區間,以至于不會將服務器 CPU 或內存占滿;更棘手的問題是,他還需要將 scrapy 產生的日志存到文件里,一旦爬蟲出錯了,他不得不用 shell 命令一個一個來查看日志來定位錯誤原因,嚴重時會花上一個整天;還有個嚴重的問題,爬蟲工程師可能發現公司業務量在增加,他需要寫上百個爬蟲來滿足公司的業務需求,而用 scrapy 和 crontab 來管理完全就是個噩夢。可憐的爬蟲工程師其實完全可以選擇一個合適爬蟲管理平臺來解決他的問題。

如何選擇一個合適的爬蟲管理平臺

當您愿意解決前面提到的爬蟲工程師遇到的困難問題,而轉而想選擇一個合適的爬蟲管理平臺時。

您首先應該回答的問題是:我們是否需要從零開始開發一套系統(Start from scratch)?要回答這個問題,您應該先回答下面幾個問題:

1.我們的需求是否復雜到需要完全定制化開發一套新系統(例如要求復雜的權限管理)?

2.我們的團隊是否有足夠的技術實力來開發這套系統(例如有經驗豐富的前后端開發工程師)?

3.我們的時間資源是否足夠我們開發這套系統(例如項目計劃周期為一年)?

如果上述三個問題的答案任意一個為“否”,您應該好好考慮利用市面上已有的開源爬蟲管理平臺來滿足您的需求。

以下為市面上已有的開源爬蟲管理平臺:

快速搭建python爬蟲管理平臺

總的來說,SpiderKeeper 可能是最早的爬蟲管理平臺,但功能相對來說比較局限;Gerapy 雖然功能齊全,界面精美,但有不少 bug 需要處理,建議有需求的用戶等待 2.0 版本;Scrapydweb是一個比較完善的爬蟲管理平臺,不過和前兩者一樣,都是基于 scrapyd 的,因此只能運行 scrapy 爬蟲;而Crawlab是一個非常靈活的爬蟲管理平臺,可以運行 Python、Nodejs、Java、PHP、Go 寫的爬蟲,而且功能比較齊全,只是部署起來相對于前三者來說要麻煩一些,不過對于 Docker 使用者來說可以做到一件部署(后面我們會講)。

因此,對于重度 scrapy 爬蟲依賴的、又不想折騰的開發者,可以考慮 Scrapydweb;而對于有各種類型的、復雜技術結構的爬蟲開發者來說,應該優先考慮更靈活的 Crawlab。當然,不是說 Crawlab 對 scrapy 支持不友好,Crawlab 同樣可以很好的集成 scrapy,后面會介紹。

作為 Crawlab 的作者,不想王婆賣瓜,自賣自夸,作者僅僅希望將最好的技術選型推薦給開發者,讓開發者根據自身的需求來決定該使用哪種爬蟲管理平臺。

爬蟲管理平臺 Crawlab 介紹簡介

Crawlab 是基于 Golang 的分布式爬蟲管理平臺,支持 Python、NodeJS、Java、Go、PHP 等多種編程語言以及多種爬蟲框架。

Crawlab 自今年三月份上線以來受到爬蟲愛好者們和開發者們的好評,不少使用者還表示會用 Crawlab 搭建公司的爬蟲平臺。經過近數月的迭代,Crawlab 陸續上線了定時任務、數據分析、網站信息、可配置爬蟲、自動提取字段、下載結果、上傳爬蟲等功能,將平臺變得得更加實用,更加全面,能夠真正幫助用戶解決爬蟲管理困難的問題。如今在 Github 上有近 1k 的 star,相關社區也建立起來,四分之一的用戶表示已經將 Crawlab 應用于企業爬蟲管理??梢钥闯觯珻rawlab 是受開發者們關注和喜歡的。

解決問題

Crawlab 主要解決的是大量爬蟲管理困難的問題,例如需要監控上百個網站的參雜 scrapy 和 selenium 的項目不容易做到同時管理,而且命令行管理的成本非常高,還容易出錯。Crawlab 支持任何語言和任何框架,配合任務調度、任務監控,很容易做到對成規模的爬蟲項目進行有效監控管理。

界面及使用

下面是 Crawlab 爬蟲列表頁面的截圖。

快速搭建python爬蟲管理平臺

Crawlab 爬蟲列表

用戶只需要將爬蟲上傳到 Crawlab,配置執行命令,點擊“運行”按鈕,就可以執行爬蟲任務了。爬蟲任務可以在任何節點上運行。從上圖可以看到,Crawlab 有節點管理、爬蟲管理、任務管理、定時任務、用戶管理等模塊。

整體架構

以下是 Crawlab 的整體架構圖,由五大部分組成:

1.主節點(Master Node):負責任務派發、API、部署爬蟲等;

2.工作節點(Worker Node):負責執行爬蟲任務;

3.MongoDB 數據庫:存儲節點、爬蟲、任務等日常運行數據;

4.Redis 數據庫:儲存任務消息隊列、節點心跳等信息。

5.前端客戶端:Vue 應用,負責前端交互和向后端請求數據。

快速搭建python爬蟲管理平臺

Github地址及Demo

查看演示 DemoGithub: https://github.com/tikazyq/crawlab

使用 Docker 部署安裝 CrawlabDocker 鏡像

Docker 是部署 Crawlab 最方便和簡潔的方式。其他部署方式包括直接部署,不過對于想快速搭建平臺的開發者來說不推薦。Crawlab 已在Dockerhub上注冊了相關的鏡像,開發者僅需要執行docker pull tikazyq/crawlab命令就可以將 Crawlab 的鏡像下載下來。

讀者可以去 Dockerhub 上查看 Crawlab 的鏡像,只有僅不到 300Mb。地址:https://hub.docker.com/r/tikazyq/crawlab/tags

快速搭建python爬蟲管理平臺

Dockerhub Page

安裝 Docker

要使用 Docker 來部署 Crawlab,您首先得保證 Docker 已經安裝好。請參考以下文檔來安裝。

快速搭建python爬蟲管理平臺

安裝 Docker Compose

Docker Compose 是簡單的運行 Docker 集群的工具,非常輕量級,我們將用到 Docker Compose 來一鍵部署 Crawlab。

Docker 的官方網站已經有如何安裝 Docker Compose 的教程,點擊鏈接查看。這里簡單介紹一下。

快速搭建python爬蟲管理平臺

Linux 用戶請用以下命令安裝。

# 下載 docker-composesudo curl -L 'https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)' -o /usr/local/bin/docker-compose`# 將 docker-compose 變成執行文件sudo chmod +x /usr/local/bin/docker-compose拉取鏡像

在拉取鏡像之前,您需要配置一下鏡像源。因為在國內,使用原有的鏡像源速度不是很快,需要使用 DockerHub 在國內的加速器。請創建/etc/docker/daemon.json文件,輸入如下內容。

{ 'registry-mirrors': ['https://registry.docker-cn.com']}

然后拉取鏡像,就會快很多了。當然,您也可以用其他鏡像源,可以網上去搜索一下。執行以下命令將 Crawlab 鏡像拉取下來。

docker pull tikazyq/crawlab:latest

下圖為拉取鏡像時的命令行界面。

快速搭建python爬蟲管理平臺

docker pull

啟動 Crawlab

我們將用 Docker Compose 啟動 Crawlab 以及其依賴的數據庫 MongoDB 和 Redis。首先我們需要修改一下 Docker Compose 的 yaml 配置文件docker-compose.yml。這個配置文件定義了需要啟動的容器服務(Container Services)以及網絡配置(Network Configuration)。這里我們用 Crawlab 自帶的docker-compose.yml。

version: ’3.3’ # Docker Compose 的版本號(請看后續說明)services: # 服務 master: # 服務名稱 image: tikazyq/crawlab:latest # 服務對應的鏡像名稱 container_name: master # 服務對應的容器名稱 environment: # 這里定義傳入的環境變量 CRAWLAB_API_ADDRESS: 'localhost:8000' # 前端調用的 API 地址,默認為 localhost:8000 CRAWLAB_SERVER_MASTER: 'Y' # 是否為主節點,Y/N CRAWLAB_MONGO_HOST: 'mongo' # MongoDB host,由于在 Docker Compose 里,可以引用服務名稱 CRAWLAB_REDIS_ADDRESS: 'redis' # Redis host,由于在 Docker Compose 里,可以引用服務名稱 ports: # 映射的端口 - '8080:8080' # 前端端口 - '8000:8000' # 后端端口 depends_on: # 依賴的服務 - mongo # MongoDB - redis # Redis worker: # 工作節點,與主節點配置類似,不重復寫了 image: tikazyq/crawlab:latest container_name: worker environment: CRAWLAB_SERVER_MASTER: 'N' CRAWLAB_MONGO_HOST: 'mongo' CRAWLAB_REDIS_ADDRESS: 'redis' depends_on: - mongo - redis mongo: # MongoDB 服務名稱 image: mongo:latest # MongoDB 鏡像名稱 restart: always # 重啟策略為“總是” ports: # 映射端口 - '27017:27017' redis: # Redis 服務名稱 image: redis:latest # Redis 鏡像名稱 restart: always # 重啟策略為“總是” ports: # 映射端口 - '6379:6379'

讀者可以根據自己的要求來配置docker-compose.yml。尤其需要注意CRAWLAB_API_ADDRESS這個環境變量,很多初學使用者都是因為該變量配置不正確而導致無法登陸。大多數情況,您不用做任何配置更改。請參考Q&A來處理常見問題,以及詳細的環境變量配置文檔來幫助根據自身環境配置 Crawlab。

然后,運行下列命令啟動 Crawlab。可以加一個-d參數讓 Docker Compose 后臺運行。

docker-compose up

運行上述命令后,Docker Compose 會去拉取 MongoDB 和 Redis 的鏡像,這可能會花幾分鐘時間。拉取完畢后,四個服務會依次啟動,您將會在命令行中看到如下內容。

快速搭建python爬蟲管理平臺

docker-compose

正常情況下,您應該可以看到四個服務都啟動成功,并能夠順利打印日志。

如果您是在本機上啟動的 Docker Compose,可以在瀏覽器中輸入http://localhost:8080,然后就能看到登陸界面了;如果您是在其他機器上啟動的 Docker Compose,您需要在瀏覽器中輸入http://<your_ip>:8080來看到登陸界面,<your_ip>是其他機器的 IP 地址(請保證 8080 端口在該機器已對外開放)。

快速搭建python爬蟲管理平臺

login

初始登陸用戶名密碼是 admin/admin,您可以使用這個用戶名密碼來登陸。如果您的環境變量CRAWLAB_API_ADDRESS設置得不正確,您可能會看到點擊登陸后登陸按鈕會一直轉圈而沒有任何提示。這時請重新在docker-compose.yml中設置正確的CRAWLAB_API_ADDRESS(將localhost替換為<your_ip>),重新啟動docker-compose up。然后在瀏覽器中輸入http://<your_ip>:8080。

登陸之后您將看到 Crawlab 的主頁。

快速搭建python爬蟲管理平臺

home

本篇文章主要介紹如何搭建爬蟲管理平臺 Crawlab,因此不會詳細介紹如何使用 Crawlab(可能會創建另一篇文章來詳細介紹,有興趣者可以關注一下)。如果您有困惑,請查看相關文檔來了解如何使用。

如何將 Scrapy 等爬蟲集成到 Crawlab

眾所周知,Scrapy 是非常受歡迎的爬蟲框架,其靈活的框架設計、高并發、易用性以及可擴展性讓很多開發者和企業大量采用。市面上的爬蟲管理平臺幾乎都支持 Scrapy 爬蟲,Crawlab 也不例外,但 Crawlab 可以運行 puppeteer、selenium 等其他爬蟲。下面將介紹一下在 Crawlab 中如何運行 scrapy 爬蟲。

Crawlab 是執行爬蟲基本原理

Crawlab 執行爬蟲的原理很簡單,其實就是一個 shell 命令。用戶在爬蟲中輸入執行爬蟲的 shell 命令,例如scrapy crawl some_spider,Crawlab 執行器會讀取這個命令,并在 shell 中直接執行。因此,每一次運行爬蟲任務,就是執行了一次 shell 命令(當然,實際情況要比這個復雜很多,感興趣的可以去參考官方文檔)。Crawlab 是支持展示和導出爬蟲結果的,不過這需要稍微多做一些工作。

編寫 Pipeline

要集成 scrapy 爬蟲,無非就是將爬蟲抓取的數據存到 Crawlab 的數據庫里,然后用任務 ID 關聯起來。每次執行爬蟲任務,任務 ID 會通過環境變量傳到爬蟲程序中,因此我們需要做的就是將任務 ID 加上結果存到數據庫里(Crawlab 現在只支持 MongoDB,后期會開發 MySQL、SQL Server、Postgres 等關系型數據庫,有需求的用戶可以關注一下)。

在 Scrapy 中,我們需要編寫儲存邏輯。示意代碼如下:

# 引入相關的庫,pymongo 是標準連接 MongoDB 的庫import osfrom pymongo import MongoClient# MongoDB 配置參數MONGO_HOST = ’192.168.99.100’MONGO_PORT = 27017MONGO_DB = ’crawlab_test’class JuejinPipeline(object): mongo = MongoClient(host=MONGO_HOST, port=MONGO_PORT) # mongo 連接實例 db = mongo[MONGO_DB] # 數據庫實例 col_name = os.environ.get(’CRAWLAB_COLLECTION’) # 集合名稱,通過環境變量 CRAWLAB_COLLECTION 傳過來 # 如果 CRAWLAB_COLLECTION 不存在,則默認集合名稱為 test if not col_name:col_name = ’test’ col = db[col_name] # 集合實例 # 每一個傳入 item 會調用的函數,參數分別為 item 和 spider def process_item(self, item, spider):item[’task_id’] = os.environ.get(’CRAWLAB_TASK_ID’) # 將 task_id 設置為環境變量傳過來的任務 IDself.col.save(item) # 保存 item 在數據庫中return item

同時,您也需要在items.py中加入task_id字段,已保證值能夠被賦上(這很重要)。

上傳并配置爬蟲

在運行爬蟲之前,您需要上傳爬蟲文件到主節點。步驟如下:

1.將爬蟲文件打包成 zip(注意,要保證在根目錄下直接打包);

2.在側邊欄點擊“爬蟲”導航至爬蟲列表,點擊“添加爬蟲”按鈕,選擇“自定義爬蟲”;

3.點擊“上傳”按鈕,選擇剛剛打包好的 zip 文件

4.上傳成功后,爬蟲列表中會出現新添加的自定義爬蟲,這樣就算上傳成功了。

可以在爬蟲詳情中點擊“文件”標簽,選擇一個文件,可以在文件中編輯代碼。

快速搭建python爬蟲管理平臺

接下來,您需要在“概覽”標簽中的“執行命令”一欄輸入爬蟲的 shell 執行命令。Crawlab 的 Docker 鏡像里是內置了 scrapy 的,因此可以直接運行 scrapy 爬蟲。命令就是scrapy crawl <some_spider>。點擊“保存”按鈕保存爬蟲配置。

運行爬蟲任務

然后就是運行爬蟲任務了。其實很簡單,在“概覽”標簽中點擊“運行”按鈕,爬蟲任務就開始運行了。如果日志提示找不到 scrapy 命令,可以將scrapy改為絕對路徑/usr/local/bin/scrapy,這樣就會運行成功。

任務運行情況會在“任務”頁面或者爬蟲“概覽”里展現,會每 5 秒鐘更新一次,大家可以在這上面查看。而且在爬蟲“結果”標簽里,可以預覽結果的詳情,還可以導出數據成 CSV 文件。

構建持續集成(CI)工作流

對于企業來說,軟件開發一般是一個自動化過程。它會經歷需求、開發、部署、測試、上線這幾個步驟。而這個流程一般是不斷迭代(Iterative)的,需要不斷更新和發布。

以爬蟲為例,您上線了一個爬蟲,這個爬蟲會定期抓取網站數據。但突然有一天您發現數據抓不到了,您快速定位原因,發現原來是網站改版了,您需要更改爬蟲抓取規則來應對網站的改版。總之,您需要發布一個代碼更新。最快的做法是直接在線上更改代碼。但這樣做非常危險:第一,您無法測試您更新后的代碼,只能通過不斷調整線上代碼來測試是否抓取成功;第二,您無法記錄這次更改,后期如果出了問題您很可能會忽略掉這次更改,從而導致 bug。您需要做的,無非是將您的爬蟲代碼用版本管理工具管理起來。我們有很多版本管理工具,最常用的就是 git、subversion,版本管理平臺包括 Gitlab、Bitbucket、自搭 Git 倉庫等。

當我們更新了代碼,我們需要將更新后的代碼發布到線上服務器。這時您需要用自己寫部署腳本,或者更方便的,用 Jenkins 作為持續集成(Continuous Integration)管理平臺。Jenkins 是一個持續集成平臺,可以通過獲取版本庫來更新部署代碼,是非常實用的工具,在很多企業中都有用到。下圖是如何將 Crawlab 爬蟲應用到持續集成工作流程中的例子。

快速搭建python爬蟲管理平臺

ci

要在 Crawlab 中創建或更新爬蟲有兩種方式:

1.上傳打包成后的 zip 文件;

2.通過更改主節點中目錄CRAWLAB_SPIDER_PATH中的爬蟲文件。

我們做持續集成,就是針對第二種方式。步驟如下:

1.用 Gitlab 或其他平臺搭建好代碼倉庫;

2.在 Jenkins 中創建一個項目,在項目中將代碼源指向之前創建的倉庫;

3.在 Jenkins 項目中編寫工作流,將發布地址指向 Crawlab 的CRAWLAB_SPIDER_PATH,如果是 Docker 注意將該地址掛載到宿主機文件系統;

4.Jenkins 項目的工作可以直接編寫,也可以用 Jenkinsfile,具體可以查相關資料;

5.這樣,每一次代碼更新提交到代碼倉庫后,Jenkins 就會將更新后的代碼發布到 Crawlab 里,Crawlab 主節點會將爬蟲代碼同步到工作節點,以待抓取。

總結

本篇文章主要介紹了爬蟲管理平臺的定義、如何選擇爬蟲管理平臺,著重介紹了如何搭建開源爬蟲管理平臺 Crawlab,另外還講到了如何集成 scrapy 爬蟲以及如何打造持續集成工作流。本篇文章沒有涉及到的內容還有很多,包括如何 Crawlab 的原理和架構詳情、如何使用 Crawlab、如何編寫大規模爬蟲、如何使用 Jenkins 等等。這些內容可能會在其他文章中發布,請感興趣的讀者多多關注。另外,Crawlab 還有一些需要提升的地方,例如異常監控(零值、空值)、可配置爬蟲、可視化抓取、日志集中收集等等。這些功能都將在以后陸續開發和發布,請大家也多多關注。

以上就是快速搭建python爬蟲管理平臺的詳細內容,更多關于搭建python爬蟲平臺的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 人成精品视频三区二区一区 | 中美日韩在线网免费毛片视频 | 国产精品久久久久久久免费 | 一区二区三区免费在线视频 | 日韩一区二区三区在线免费观看 | 一级毛片不卡 | 欧美另类交视频 | 精品一区二区三区免费视频 | 三级美国 | 特级毛片免费观看视频 | www.99精品视频在线播放 | 热e国产 | 中国a级毛片免费 | 国产一级爱 | 久久99国产亚洲精品观看 | 国产91丝袜在线播放九色 | 91免费版网站 | 免费一区二区三区在线视频 | 免费 欧美 自拍 在线观看 | 美国免费一级片 | 91精品久久久久亚洲国产 | 国产91精品一区二区 | 日韩 欧美 国产 师生 制服 | 免费亚洲黄色 | 一级特黄aaa大片在 一级特黄aaa大片在线观看 | 久久国产精品二国产精品 | 久久精品免费播放 | 精品 日韩 国产 欧美在线观看 | 91黑丝国产线观看免费 | 99er精品| 久久久久视频精品网 | 国产aaaaa一级毛片 | 久久精品国产亚洲网站 | 国产孕妇孕交视频 | 久久精品夜色国产 | 免费五级在线观看日本片 | 美女拍拍拍爽爽爽爽爽爽 | 日韩欧美一级毛片视频免费 | 日韩国产欧美成人一区二区影院 | 欧美色大成网站www永久男同 | 久久手机免费视频 |