精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文學(xué)會(huì)爬蟲(chóng)技巧

網(wǎng)絡(luò) 通信技術(shù)
作為冷數(shù)據(jù)啟動(dòng)和豐富數(shù)據(jù)的重要工具,爬蟲(chóng)在業(yè)務(wù)發(fā)展中承擔(dān)著重要的作用,我們業(yè)務(wù)在發(fā)展過(guò)程中積累了不少爬蟲(chóng)使用的經(jīng)驗(yàn),在此分享給大家,希望能對(duì)之后的業(yè)務(wù)發(fā)展提供一些技術(shù)選型方向上的思路,以更好地促進(jìn)業(yè)務(wù)發(fā)展

[[336016]]

前言

作為冷數(shù)據(jù)啟動(dòng)和豐富數(shù)據(jù)的重要工具,爬蟲(chóng)在業(yè)務(wù)發(fā)展中承擔(dān)著重要的作用,我們業(yè)務(wù)在發(fā)展過(guò)程中積累了不少爬蟲(chóng)使用的經(jīng)驗(yàn),在此分享給大家,希望能對(duì)之后的業(yè)務(wù)發(fā)展提供一些技術(shù)選型方向上的思路,以更好地促進(jìn)業(yè)務(wù)發(fā)展

我們將會(huì)從以下幾點(diǎn)來(lái)分享我們的經(jīng)驗(yàn)

  • 爬蟲(chóng)的應(yīng)用場(chǎng)景
  • 爬蟲(chóng)的技術(shù)選型
  • 實(shí)戰(zhàn)詳解:復(fù)雜場(chǎng)景下的爬蟲(chóng)解決方案
  • 爬蟲(chóng)管理平臺(tái)

爬蟲(chóng)的應(yīng)用場(chǎng)景

在生產(chǎn)上,爬蟲(chóng)主要應(yīng)用在以下幾種場(chǎng)景

  1. 搜索引擎,Google,百度這種搜索引擎公司每天啟動(dòng)著無(wú)數(shù)的爬蟲(chóng)去抓取網(wǎng)頁(yè)信息,才有了我們使用搜索引擎查詢資料的便捷,全面,高效(關(guān)于搜索引擎工作原理,在這篇文章作了詳細(xì)的講解,建議大家看看)
  2. 冷數(shù)據(jù)啟動(dòng)時(shí)豐富數(shù)據(jù)的主要工具,新業(yè)務(wù)開(kāi)始時(shí),由于剛起步,所以沒(méi)有多少數(shù)據(jù),此時(shí)就需要爬取其他平臺(tái)的數(shù)據(jù)來(lái)填充我們的業(yè)務(wù)數(shù)據(jù),比如說(shuō)如果我們想做一個(gè)類似大眾點(diǎn)評(píng)這樣的平臺(tái),一開(kāi)始沒(méi)有商戶等信息,就需要去爬取大眾,美團(tuán)等商家的信息來(lái)填充數(shù)據(jù)
  3. 數(shù)據(jù)服務(wù)或聚合的公司,比如天眼查,企查查,西瓜數(shù)據(jù)等等
  4. 提供橫向數(shù)據(jù)比較,聚合服務(wù),比如說(shuō)電商中經(jīng)常需要有一種比價(jià)系統(tǒng),從各大電商平臺(tái),如拼多多,淘寶,京東等抓取同一個(gè)商品的價(jià)格信息,以給用戶提供最實(shí)惠的商品價(jià)格,這樣就需要從各大電商平臺(tái)爬取信息。
  5. 黑產(chǎn),灰產(chǎn),風(fēng)控等,比如我們要向某些資金方申請(qǐng)授信,在資金方這邊首先要部署一道風(fēng)控,來(lái)看你的個(gè)人信息是否滿足授信條件,這些個(gè)人信息通常是某些公司利用爬蟲(chóng)技術(shù)在各個(gè)渠道爬取而來(lái)的,當(dāng)然了這類場(chǎng)景還是要慎用,不然正應(yīng)了那句話「爬蟲(chóng)用的好,監(jiān)控進(jìn)得早」

爬蟲(chóng)的技術(shù)選型

接下來(lái)我們就由淺入深地為大家介紹爬蟲(chóng)常用的幾種技術(shù)方案

簡(jiǎn)單的爬蟲(chóng)說(shuō)起爬蟲(chóng),大家可能會(huì)覺(jué)得技術(shù)比較高深,會(huì)立刻聯(lián)想到使用像 Scrapy 這樣的爬蟲(chóng)框架,這類框架確實(shí)很強(qiáng)大,那么是不是一寫(xiě)爬蟲(chóng)就要用框架呢?非也!要視情況而定,如果我們要爬取的接口返回的只是很簡(jiǎn)單,固定的結(jié)構(gòu)化數(shù)據(jù)(如JSON),用 Scrapy 這類框架的話有時(shí)無(wú)異于殺雞用牛刀,不太經(jīng)濟(jì)!

舉個(gè)簡(jiǎn)單的例子,業(yè)務(wù)中有這么一個(gè)需求:需要抓取育學(xué)園中準(zhǔn)媽媽從「孕4周以下」~「孕36個(gè)月以上」每個(gè)階段的數(shù)據(jù)

 

對(duì)于這種請(qǐng)求,bash 中的 curl 足堪大任!

首先我們用 charles 等抓包工具抓取此頁(yè)面接口數(shù)據(jù),如下

 

通過(guò)觀察,我們發(fā)現(xiàn)請(qǐng)求的數(shù)據(jù)中只有 month 的值(代表孕幾周)不一樣,所以我們可以按以下思路來(lái)爬取所有的數(shù)據(jù):

1、 找出所有「孕4周以下」~「孕36個(gè)月以上」對(duì)應(yīng)的 month 的值,構(gòu)建一個(gè) month 數(shù)組 2、 構(gòu)建一個(gè)以 month 值為變量的 curl 請(qǐng)求,在 charles 中 curl 請(qǐng)求我們可以通過(guò)如下方式來(lái)獲取

 

3、 依次遍歷步驟 1 中的 month,每遍歷一次,就用步驟 2 中的 curl 和 month 變量構(gòu)建一個(gè)請(qǐng)求并執(zhí)行,將每次的請(qǐng)求結(jié)果保存到一個(gè)文件中(對(duì)應(yīng)每個(gè)孕期的 month 數(shù)據(jù)),這樣之后就可以對(duì)此文件中的數(shù)據(jù)進(jìn)行解析分析。

示例代碼如下,為了方便演示,中間 curl 代碼作了不少簡(jiǎn)化,大家明白原理就好

  1. #!/bin/bash 
  2.  
  3. ## 獲取所有孕周對(duì)應(yīng)的 month,這里為方便演示,只取了兩個(gè)值 
  4. month=(21 24) 
  5. ## 遍歷所有 month,組裝成 curl 請(qǐng)求 
  6. for month in ${month[@]}; 
  7. do 
  8.     curl -H 'Host: yxyapi2.drcuiyutao.com'  
  9.     -H 'clientversion: 7.14.1'  
  10.         ... 
  11.     -H 'birthday: 2018-08-07 00:00:00'   
  12.     --data "body=month%22%3A$month"  ## month作為變量構(gòu)建 curl 請(qǐng)求 
  13.     --compressed 'http://yxyapi2.drcuiyutao.com/yxy-api-gateway/api/json/tools/getBabyChange' > $var.log ## 將 curl 請(qǐng)求結(jié)果輸出到文件中以便后續(xù)分析 
  14. done 

前期我們業(yè)務(wù)用 PHP 的居多,不少爬蟲(chóng)請(qǐng)求都是在 PHP 中處理的,在 PHP 中我們也可以通過(guò)調(diào)用 libcurl 來(lái)模擬 bash 中的 curl 請(qǐng)求,比如業(yè)務(wù)中有一個(gè)需要抓取每個(gè)城市的天氣狀況的需求,就可以用 PHP 調(diào)用 curl,一行代碼搞定!

 

看了兩個(gè)例子,是否覺(jué)得爬蟲(chóng)不過(guò)如此,沒(méi)錯(cuò),業(yè)務(wù)中很多這種簡(jiǎn)單的爬蟲(chóng)實(shí)現(xiàn)可以應(yīng)付絕大多數(shù)場(chǎng)景的需求!

腦洞大開(kāi)的爬蟲(chóng)解決思路

按以上介紹的爬蟲(chóng)思路可以解決日常多數(shù)的爬蟲(chóng)需求,但有時(shí)候我們需要一些腦洞大開(kāi)的思路,簡(jiǎn)單列舉兩個(gè)

1、 去年運(yùn)營(yíng)同學(xué)給了一個(gè)天貓精選的有關(guān)奶粉的 url 的鏈接

  1. https://m.tmall.com/mblist/de_9n40_AVYPod5SU93irPS-Q.html,他們希望能提取此文章的信息,同時(shí)找到天貓精選中所有提到奶粉關(guān)鍵字的文章并提取其內(nèi)容, 這就需要用到一些搜索引擎的高級(jí)技巧了, 我們注意到,天貓精選的 url 是以以下形式構(gòu)成的 
  1. https://m.tmall.com/mblist/de_ + 每篇文章獨(dú)一無(wú)二的簽名 

利用搜索引擎技巧我們可以輕松搞定運(yùn)營(yíng)的這個(gè)需求

 

對(duì)照?qǐng)D片,步驟如下:

  1. 首先我們用在百度框輸入高級(jí)查詢語(yǔ)句「奶粉 site:m.tmall.com inurl:mblist/de_」,點(diǎn)擊搜索,就會(huì)顯示出此頁(yè)中所有天貓精選中包含奶粉的文章 title
  2. 注意地址欄中瀏覽器已經(jīng)生成了搜索的完整 url,拿到這個(gè) url 后,我們就可以去請(qǐng)求此 url,此時(shí)會(huì)得到上圖中包含有 3, 4 這兩塊的 html 文件
  3. 拿到步驟 2 中獲取的 html 文件后,在區(qū)域 3 每一個(gè)標(biāo)題其實(shí)對(duì)應(yīng)著一個(gè) url(以 ..... )的形式存在,根據(jù)正則表達(dá)式就可以獲取每個(gè)標(biāo)題對(duì)應(yīng)的 url,再請(qǐng)求這些 url 即可獲取對(duì)應(yīng)的文章信息。
  4. 同理,拿到步驟 2 中獲取的 html 文件后,我們可以獲取區(qū)域 4 每一頁(yè)對(duì)應(yīng)的 url,再依次請(qǐng)求這些 url,然后重復(fù)步驟 2,即可獲取每一頁(yè)天貓精選中包含有奶粉的文章

通過(guò)這種方式我們也巧妙地實(shí)現(xiàn)了運(yùn)營(yíng)的需求,這種爬蟲(chóng)獲取的數(shù)據(jù)是個(gè) html 文件,不是 JSON 這些結(jié)構(gòu)化數(shù)據(jù),我們需要從 html 中提取出相應(yīng)的 url 信息(存在 標(biāo)簽里),可以用正則,也可以用 xpath 來(lái)提取。

比如 html 中有如下 div 元素

  1. <div id="test1">大家好!</div> 

 

可以用以下的 xpath 來(lái)提取
  1. data = selector.xpath('//div[@id="test1"]/text()').extract()[0] 

就可以把「大家好!」提取出來(lái),需要注意的是在這種場(chǎng)景中,「依然不需要使用 Scrapy 這種復(fù)雜的框架」,在這種場(chǎng)景下,由于數(shù)據(jù)量不大,使用單線程即可滿足需求,在實(shí)際生產(chǎn)上我們用 php 實(shí)現(xiàn)即可滿足需求

2、 某天運(yùn)營(yíng)同學(xué)又提了一個(gè)需求,想爬取美拍的視頻

通過(guò)抓包我們發(fā)現(xiàn)美拍每個(gè)視頻的 url 都很簡(jiǎn)單,輸入到瀏覽器查看也能正常看視頻,于是我們想當(dāng)然地認(rèn)為直接通過(guò)此 url 即可下載視頻,但實(shí)際我們發(fā)現(xiàn)此 url 是分片的(m3u8,為了優(yōu)化加載速度而設(shè)計(jì)的一種播放多媒體列表的檔案格式),下載的視頻不完整,后來(lái)我們發(fā)現(xiàn)打開(kāi)`http://www.flvcd.com/`網(wǎng)站

輸入美拍地址轉(zhuǎn)化一下就能拿到完整的視頻下載地址

 

「如圖示:點(diǎn)擊「開(kāi)始GO!」后就會(huì)開(kāi)始解析視頻地址并拿到完整的視頻下載地址」

進(jìn)一步分析這個(gè)「開(kāi)始GO!」按鈕對(duì)應(yīng)的請(qǐng)求是「http://www.flvcd.com/parse.php?format=&kw= + 視頻地址」,所以只要拿到美拍的視頻地址,再調(diào)用 flvcd 的視頻轉(zhuǎn)換請(qǐng)求即可拿到完整的視頻下載地址,通過(guò)這種方式我們也解決了無(wú)法拿到美拍完整地址的問(wèn)題。

復(fù)雜的爬蟲(chóng)設(shè)計(jì)

上文我們要爬取的數(shù)據(jù)相對(duì)比較簡(jiǎn)單, 數(shù)據(jù)屬于拿來(lái)即用型,實(shí)際上我們要爬取的數(shù)據(jù)大部分是非結(jié)構(gòu)化數(shù)據(jù)(html 網(wǎng)頁(yè)等),需要對(duì)這些數(shù)據(jù)做進(jìn)一步地處理(爬蟲(chóng)中的數(shù)據(jù)清洗階段),而且每個(gè)我們爬取的數(shù)據(jù)中也很有可能包含著大量待爬取網(wǎng)頁(yè)的 url,也就是說(shuō)需要有 url 隊(duì)列管理,另外請(qǐng)求有時(shí)候還需求登錄,每個(gè)請(qǐng)求也需要添加 Cookie,也就涉及到 Cookie 的管理,在這種情況下考慮 Scrapy 這樣的框架是必要的!不管是我們自己寫(xiě)的,還是類似 Scrapy 這樣的爬蟲(chóng)框架,基本上都離不開(kāi)以下模塊的設(shè)計(jì)

  • url 管理器
  • 網(wǎng)頁(yè)(HTML)下載器, 對(duì)應(yīng) Python 中的urllib2, requests等庫(kù)
  • (HTML)解析器,主要有兩種方式來(lái)解析

下圖詳細(xì)解釋了各個(gè)模塊之間是如何配合使用的

  • 正則表達(dá)式
  • 以css, xpath為代表的結(jié)構(gòu)化解析(即將文檔以DOM樹(shù)的形式重新組織,通過(guò)查找獲取節(jié)點(diǎn)進(jìn)而提取數(shù)據(jù)的方式), Python中的 html.parser,BeautifulSoup,lxml 皆是此類范疇

 

  • 首先調(diào)度器會(huì)詢問(wèn) url 管理器是否有待爬取的 url
  • 如果有,則獲取出其中的 url 傳給下載器進(jìn)行下載
  • 下載器下載完內(nèi)容后會(huì)將其傳給解析器做進(jìn)一步的數(shù)據(jù)清洗,這一步除了會(huì)提取出有價(jià)值的數(shù)據(jù),還會(huì)提取出待爬取的URL以作下一次的爬取
  • 調(diào)度器將待爬取的URL放到URL管理器里,將有價(jià)值的數(shù)據(jù)入庫(kù)作后續(xù)的應(yīng)用
  • 以上過(guò)程會(huì)一直循環(huán),直到再無(wú)待爬取URL

可以看到,像以上的爬蟲(chóng)框架,如果待爬取 URL 很多,要下載,解析,入庫(kù)的工作就很大(比如我們有個(gè)類似大眾點(diǎn)評(píng)的業(yè)務(wù),需要爬取大眾點(diǎn)評(píng)的數(shù)據(jù),由于涉及到幾百萬(wàn)量級(jí)的商戶,評(píng)論等爬取,數(shù)據(jù)量巨大!),就會(huì)涉及到多線程,分布式爬取,用 PHP 這種單線程模型的語(yǔ)言來(lái)實(shí)現(xiàn)就不合適了,Python 由于其本身支持多線程,協(xié)程等特性,來(lái)實(shí)現(xiàn)這些比較復(fù)雜的爬蟲(chóng)設(shè)計(jì)就綽綽有余了,同時(shí)由于 Python 簡(jiǎn)潔的語(yǔ)法特性,吸引了一大波人寫(xiě)了很多成熟的庫(kù),各種庫(kù)拿來(lái)即用,很是方便,大名鼎鼎的 Scrapy 框架就是由于其豐富的插件,易用性俘獲了大批粉絲,我們的大部分爬蟲(chóng)業(yè)務(wù)都是用的scrapy來(lái)實(shí)現(xiàn)的,所以接下來(lái)我們就簡(jiǎn)要介紹一下 Scrapy,同時(shí)也來(lái)看看一個(gè)成熟的爬蟲(chóng)框架是如何設(shè)計(jì)的。

我們首先要考慮一下爬蟲(chóng)在爬取數(shù)據(jù)過(guò)程中會(huì)可能會(huì)碰到的一些問(wèn)題,這樣才能明白框架的必要性以后我們自己設(shè)計(jì)框架時(shí)該考慮哪些點(diǎn)

  • url 隊(duì)列管理:比如如何防止對(duì)同一個(gè) url 重復(fù)爬取(去重),如果是在一臺(tái)機(jī)器上可能還好,如果是分布式爬取呢
  • Cookie 管理:有一些請(qǐng)求是需要帳號(hào)密碼驗(yàn)證的,驗(yàn)證之后需要用拿到的 Cookie 來(lái)訪問(wèn)網(wǎng)站后續(xù)的頁(yè)面請(qǐng)求,如何緩存住 Cookie 以便后續(xù)進(jìn)一步的操作
  • 多線程管理:前面說(shuō)了如果待爬取URL很多的話,加載解析的工作是很大的,單線程爬取顯然不可行,那如果用多線程的話,管理又是一件大麻煩
  • User-Agent 與動(dòng)態(tài)代理的管理: 目前的反爬機(jī)制其實(shí)也是比較完善的,如果我們用同樣的UA,同樣的IP不節(jié)制地連續(xù)對(duì)同一個(gè)網(wǎng)站多次請(qǐng)求,很可能立馬被封, 此時(shí)我們就需要使用 random-ua ,動(dòng)態(tài)代理來(lái)避免被封
  • 動(dòng)態(tài)生成數(shù)據(jù)的爬取:一般通過(guò) GET 請(qǐng)求獲取的網(wǎng)頁(yè)數(shù)據(jù)是包含著我們需要的數(shù)據(jù)的,但有些數(shù)據(jù)是通過(guò) Ajax 請(qǐng)求動(dòng)態(tài)生成,這樣的話該如何爬取
  • DEBUG
  • 爬蟲(chóng)管理平臺(tái): 爬蟲(chóng)任務(wù)多時(shí),如何查看和管理這些爬蟲(chóng)的狀態(tài)和數(shù)據(jù)

從以上的幾個(gè)點(diǎn)我們可以看出寫(xiě)一個(gè)爬蟲(chóng)框架還是要費(fèi)不少功夫的,幸運(yùn)的是,scrapy 幫我們幾乎完美地解決了以上問(wèn)題,讓我們只要專注于寫(xiě)具體的解析入庫(kù)邏輯即可, 來(lái)看下它是如何實(shí)現(xiàn)以上的功能點(diǎn)的

  • url 隊(duì)列管理: 使用 scrapy-redis 插件來(lái)做 url 的去重處理,利用 redis 的原子性可以輕松處理url重復(fù)問(wèn)題
  • Cookie管理: 只要做一次登錄校驗(yàn),就會(huì)緩存住Cookie,在此后的請(qǐng)求中自動(dòng)帶上此Cookie,省去了我們自己管理的煩惱
  • 多線程管理: 只要在中間件中指定線程次數(shù)CONCURRENT_REQUESTS = 3,scrapy就可以為我們自己管理多線程操作,無(wú)需關(guān)心任何的線程創(chuàng)建毀滅生命周期等復(fù)雜的邏輯
  • User-Agent與動(dòng)態(tài)代理的管理: 使用random-useragent插件為每一次請(qǐng)求隨機(jī)設(shè)置一個(gè)UA,使用螞蟻(mayidaili.com)等代理為每一個(gè)請(qǐng)求頭都加上proxy這樣我們的 UA 和 IP 每次就基本都不一樣了,避免了被封的窘境
  • 動(dòng)態(tài)數(shù)據(jù)(通過(guò) ajax 等生成)爬取: 使用Selenium + PhantomJs來(lái)抓取抓動(dòng)態(tài)數(shù)據(jù)
  • DEBUG: 如何有效測(cè)試爬取數(shù)據(jù)是否正確非常重要,一個(gè)不成熟的框架很可能在我們每次要驗(yàn)證用 xpath,正則等獲取數(shù)據(jù)是否正確時(shí)每一次都會(huì)重新去下載網(wǎng)頁(yè),效率極低,但Scray-Shell 提供了很友好的設(shè)計(jì),它會(huì)先下載網(wǎng)頁(yè)到內(nèi)存里,然后你在 shell 做各種 xpath 的調(diào)試,直到測(cè)試成功!
  • 使用 SpiderKeeper+Scrapyd 來(lái)管理爬蟲(chóng), GUI 操作,簡(jiǎn)單易行

可以看到 Scrapy 解決了以上提到的主要問(wèn)題,在爬取大量數(shù)據(jù)時(shí)能讓我們專注于寫(xiě)爬蟲(chóng)的業(yè)務(wù)邏輯,無(wú)須關(guān)注 Cookie 管理,多線程管理等細(xì)節(jié),極大地減輕了我們的負(fù)擔(dān),很容易地做到事半功倍!

(注意! Scrapy 雖然可以使用 Selenium + PhantomJs 來(lái)抓取動(dòng)態(tài)數(shù)據(jù),但隨著 Google 推出的 puppeter 的橫空出世,PhantomJs 已經(jīng)停止更新了,因?yàn)?Puppeter 比 PhantomJS 強(qiáng)大太多,所以如果需要大量地抓取動(dòng)態(tài)數(shù)據(jù),需要考慮性能方面的影響,Puppeter 這個(gè) Node 庫(kù)絕對(duì)值得一試,Google 官方出品,強(qiáng)烈推薦)

理解了 Scrapy 的主要設(shè)計(jì)思路與功能,我們?cè)賮?lái)看下如何用 Scrapy 來(lái)開(kāi)發(fā)我們某個(gè)音視頻業(yè)務(wù)的爬蟲(chóng)項(xiàng)目,來(lái)看一下做一個(gè)音視頻爬蟲(chóng)會(huì)遇到哪些問(wèn)題

音視頻爬蟲(chóng)實(shí)戰(zhàn)

一、先從幾個(gè)方面來(lái)簡(jiǎn)單介紹我們音視頻爬蟲(chóng)項(xiàng)目的體系

1、四個(gè)主流程

  • 爬取階段
  • 資源處理(包括音頻,視頻,圖片下載及處理)
  • 正式入庫(kù)
  • 后處理階段(類似去水印)

2、目前支持的功能點(diǎn)

  • 各類視頻音頻站點(diǎn)的爬取(喜馬拉雅,愛(ài)奇藝,優(yōu)酷,騰訊,兒歌點(diǎn)點(diǎn)等)
  • 主流視頻音頻站點(diǎn)的內(nèi)容同步更新(喜馬拉雅,優(yōu)酷)
  • 視頻去水印(視頻 logo)
  • 視頻截圖(視頻內(nèi)容無(wú)封面)
  • 視頻轉(zhuǎn)碼適配(flv 目前客戶端不支持)

3、體系流程分布圖

 

二、分步來(lái)講下細(xì)節(jié)

1. 爬蟲(chóng)框架的技術(shù)選型

說(shuō)到爬蟲(chóng),大家應(yīng)該會(huì)很自然與 python 劃上等號(hào),所以我們的技術(shù)框架就從 python 中比較脫穎而出的三方庫(kù)選。scrapy 就是非常不錯(cuò)的一款。相信很多其他做爬蟲(chóng)的小伙伴也都體驗(yàn)過(guò)這個(gè)框架。

那么說(shuō)說(shuō)這個(gè)框架用了這么久感受最深的幾個(gè)優(yōu)點(diǎn):

  • request 觸發(fā)底層采用的是 python 自帶的 yied 協(xié)程,可以節(jié)省內(nèi)容的同時(shí),回調(diào)式的編程方式也顯得優(yōu)雅舒適
  • 對(duì)于 html 內(nèi)容的高效篩選處理能力,selecter 的 xpath 真的很好用
  • 由于迭代時(shí)間已經(jīng)很長(zhǎng)了,具備了很完善的擴(kuò)展 api,例如:middlewares 就可以全局 hook 很多事件點(diǎn),動(dòng)態(tài) ip 代理就可以通過(guò) hook request_start 實(shí)現(xiàn)

2. 爬蟲(chóng)池 db 的設(shè)計(jì)

爬蟲(chóng)池 db 對(duì)于整個(gè)爬取鏈路來(lái)說(shuō)是非常重要的關(guān)鍵存儲(chǔ)節(jié)點(diǎn),所以在早教這邊也是經(jīng)歷了很多次的字段更迭。

最初我們的爬蟲(chóng)池 db 表只是正式表的一份拷貝,存儲(chǔ)內(nèi)容完全相同,在爬取完成后,copy 至正式表,然后就失去相應(yīng)的關(guān)聯(lián)。這時(shí)候的爬蟲(chóng)池完全就是一張草稿表,里面有很多無(wú)用的數(shù)據(jù)。

后來(lái)發(fā)現(xiàn)運(yùn)營(yíng)需要看爬蟲(chóng)的具體來(lái)源,這時(shí)候爬蟲(chóng)池里面即沒(méi)有網(wǎng)站源鏈接,也無(wú)法根據(jù)正式表的專輯 id 對(duì)應(yīng)到爬蟲(chóng)池的數(shù)據(jù)內(nèi)容。所以,爬蟲(chóng)池 db 做出了最重要的一次改動(dòng)。首先是建立爬蟲(chóng)池?cái)?shù)據(jù)與爬取源站的關(guān)聯(lián),即source_link 與 source_from 字段,分別代表內(nèi)容對(duì)應(yīng)的網(wǎng)站原鏈接以及來(lái)源聲明定義。第二步則是建立爬蟲(chóng)池內(nèi)容與正式庫(kù)內(nèi)容的關(guān)聯(lián),為了不影響正式庫(kù)數(shù)據(jù),我們添加 target_id 對(duì)應(yīng)到正式庫(kù)的內(nèi)容 id 上。此時(shí),就可以滿足告知運(yùn)營(yíng)爬取內(nèi)容具體來(lái)源的需求了。

后續(xù)運(yùn)營(yíng)則發(fā)現(xiàn),在大量的爬蟲(chóng)數(shù)據(jù)中篩選精品內(nèi)容需要一些源站數(shù)據(jù)的參考值,例如:源站播放量等,此時(shí)爬蟲(chóng)池db 和正式庫(kù) db 存儲(chǔ)內(nèi)容正式分化,爬蟲(chóng)池不再只是正式庫(kù)的一份拷貝,而是代表源站的一些參考數(shù)據(jù)以及正式庫(kù)的一些基礎(chǔ)數(shù)據(jù)。

而后來(lái)的同步更新源站內(nèi)容功能,也是依賴這套關(guān)系可以很容易的實(shí)現(xiàn)。

整個(gè)過(guò)程中,最重要的是將本來(lái)毫無(wú)關(guān)聯(lián)的 「爬取源站內(nèi)容」 、 「爬蟲(chóng)池內(nèi)容」 、「正式庫(kù)內(nèi)容」 三個(gè)區(qū)塊關(guān)聯(lián)起來(lái)。

3. 為什么會(huì)產(chǎn)生資源處理任務(wù)

本來(lái)的話,資源的下載以及一些處理應(yīng)該是在爬取階段就可以一并完成的,那么為什么會(huì)單獨(dú)產(chǎn)生資源處理這一流程。

首先,第一版的早教爬蟲(chóng)體系里面確實(shí)沒(méi)有這一單獨(dú)的步驟,是在scrapy爬取過(guò)程中串行執(zhí)行的。但是后面發(fā)現(xiàn)的缺點(diǎn)是:

  • scrapy 自帶的 download pipe 不太好用,而且下載過(guò)程中并不能并行下載,效率較低
  • 由于音視頻文件較大,合并資源會(huì)有各種不穩(wěn)定因素,有較大概率出現(xiàn)下載失敗。失敗后會(huì)同步丟失掉爬取信息。
  • 串行執(zhí)行的情況下,會(huì)失去很多擴(kuò)展性,重跑難度大。

針對(duì)以上的問(wèn)題,我們?cè)黾恿伺老x(chóng)表中的中間態(tài),即資源下載失敗的狀態(tài),但保留已爬取的信息。然后,增加獨(dú)立的資源處理任務(wù),采用 python 的多線程進(jìn)行資源處理。針對(duì)這些失敗的內(nèi)容,會(huì)定時(shí)跑資源處理任務(wù),直到成功為止。(當(dāng)然一直失敗的,就需要開(kāi)發(fā)根據(jù)日志排查問(wèn)題了)

4. 說(shuō)說(shuō)為什么水印處理不放在資源處理階段,而在后處理階段(即正式入庫(kù)后)

首先需要了解我們?nèi)ニ〉脑硎怯?ffmpeg 的 delogo 功能,該功能不像轉(zhuǎn)換視頻格式那樣只是更改封裝。它需要對(duì)整個(gè)視頻進(jìn)行重新編碼,所以耗時(shí)非常久,而且對(duì)應(yīng)于 cpu 的占用也很大。

基于以上,如果放在資源處理階段,會(huì)大大較低資源轉(zhuǎn)移至 upyun 的效率,而且光優(yōu)酷而言就有不止 3 種水印類型,對(duì)于整理規(guī)則而言就是非常耗時(shí)的工作了,這個(gè)時(shí)間消耗同樣會(huì)降低爬取工作的進(jìn)行。而首先保證資源入庫(kù),后續(xù)進(jìn)行水印處理,一方面,運(yùn)營(yíng)可以靈活控制上下架,另一方面,也是給了開(kāi)發(fā)人員足夠的時(shí)間去整理規(guī)則,還有就是,水印處理出錯(cuò)時(shí),還存在源視頻可以恢復(fù)。

5. 如何去除圖片水印

不少爬蟲(chóng)抓取的圖片是有水印的,目前沒(méi)發(fā)現(xiàn)完美的去水印方法,可使用的方法:

原始圖片查找,一般網(wǎng)站都會(huì)保存原始圖和加水印圖,如果找不到原始鏈接就沒(méi)辦法

裁剪法,由于水印一般是在圖片邊角,如果對(duì)于被裁減的圖片是可接受的,可以將包含水印部分直接按比例裁掉

使用 opencv 庫(kù)處理,調(diào)用 opencv 這種圖形庫(kù)進(jìn)行圖片類似PS的圖片修復(fù),產(chǎn)生的效果也差不多,遇到復(fù)雜圖形修復(fù)效果不好。

三、遇到的問(wèn)題和解決方案

資源下載階段經(jīng)常出現(xiàn)中斷或失敗等問(wèn)題【方案:將資源下載及相關(guān)處理從爬取過(guò)程中獨(dú)立出來(lái),方便任務(wù)重跑】

雖然是不同平臺(tái),但是重復(fù)資源太多,特別是視頻網(wǎng)站【方案:資源下載前根據(jù)title匹配,完全匹配則過(guò)濾,省下了多余的下載時(shí)間消耗】

大量爬取過(guò)程中,會(huì)遇到ip被封的情況【方案:動(dòng)態(tài) ip 代理】

大型視頻網(wǎng)站資源獲取規(guī)則頻繁替換(加密,視頻切割,防盜鏈等),開(kāi)發(fā)維護(hù)成本高【方案:you-get 三方庫(kù),該庫(kù)支持大量的主流視頻網(wǎng)站的爬取,大大減少開(kāi)發(fā)維護(hù)成本】

  • app相關(guān)爬取被加密【方案:反編譯】
  • 優(yōu)酷和騰訊視頻會(huì)有 logo【方案:ffmpeg delogo 功能】
  • 爬過(guò)來(lái)的內(nèi)容沒(méi)有主播關(guān)聯(lián)像盜版【方案:在內(nèi)容正式入庫(kù)時(shí),給內(nèi)容穿上主播馬甲】
  • 爬取源站內(nèi)容仍在更新中,但是我們的平臺(tái)內(nèi)容無(wú)法更新【方案:db 存入原站鏈接,根據(jù)差異性進(jìn)行更新】
  • 類似優(yōu)酷,愛(ài)奇藝等主流視頻網(wǎng)站的專輯爬取任務(wù)媒介存于服務(wù)器文本文件中,并需開(kāi)發(fā)手動(dòng)命令觸發(fā),耗費(fèi)人力【方案:整合腳本邏輯,以 db 為媒介,以定時(shí)任務(wù)檢測(cè)觸發(fā)】
  • 運(yùn)營(yíng)需要添加一些類似原站播放量等的數(shù)據(jù)到運(yùn)營(yíng)后臺(tái)顯示,作為審核,加精,置頂?shù)炔僮鞯囊罁?jù)【方案:之前爬蟲(chóng)表在將數(shù)據(jù)導(dǎo)入正式表后失去關(guān)聯(lián),現(xiàn)在建立起關(guān)聯(lián),在爬蟲(chóng)表添加爬蟲(chóng)原站相關(guān)數(shù)據(jù)字段】
  • 由于自己的很多資源是爬過(guò)來(lái)的,所以資源的安全性和反扒就顯得很重要,那么怎么保證自己資源在接口吐出后仍然安全【方案:upyun的防盜鏈空間,該空間下的資源地址有相應(yīng)的時(shí)效性】
  • 接口中沒(méi)有媒體文件相關(guān)信息,而自己平臺(tái)需要,例如:時(shí)長(zhǎng)【方案:ffmpeg 支持的媒體文件解析】
  • 下載后的視頻很多在客戶端無(wú)法播放【方案:在資源上傳 upyun 前,進(jìn)行格式和碼率驗(yàn)證,不符合則進(jìn)行相應(yīng)的轉(zhuǎn)碼】

四、最后做下總結(jié)

對(duì)于我們視頻的音視頻爬蟲(chóng)代碼體系,不一定能通用于所有的業(yè)務(wù)線,但是同類問(wèn)題的思考與解決方案確是可以借鑒與應(yīng)用于各個(gè)業(yè)務(wù)線的,相信項(xiàng)目主對(duì)大家會(huì)有不少啟發(fā)

爬蟲(chóng)管理平臺(tái)

當(dāng)爬蟲(chóng)任務(wù)變得很多時(shí),ssh+crontab 的方式會(huì)變得很麻煩, 需要一個(gè)能隨時(shí)查看和管理爬蟲(chóng)運(yùn)行狀況的平臺(tái),

SpiderKeeper+Scrapyd 目前是一個(gè)現(xiàn)成的管理方案,提供了不錯(cuò)的UI界面。功能包括:

1.爬蟲(chóng)的作業(yè)管理:定時(shí)啟動(dòng)爬蟲(chóng)進(jìn)行數(shù)據(jù)抓取,隨時(shí)啟動(dòng)和關(guān)閉爬蟲(chóng)任務(wù)

2.爬蟲(chóng)的日志記錄:爬蟲(chóng)運(yùn)行過(guò)程中的日志記錄,可以用來(lái)查詢爬蟲(chóng)的問(wèn)題

3.爬蟲(chóng)運(yùn)行狀態(tài)查看:運(yùn)行中的爬蟲(chóng)和爬蟲(chóng)運(yùn)行時(shí)長(zhǎng)查看

 

總結(jié)

從以上的闡述中,我們可以簡(jiǎn)單地總結(jié)一下爬蟲(chóng)的技術(shù)選型

  1. 如果是結(jié)構(gòu)化數(shù)據(jù)(JSON 等),我們可以使用 curl,PHP 這些單線程模塊的語(yǔ)言來(lái)處理即可
  2. 如果是非結(jié)構(gòu)化數(shù)據(jù)(html 等),此時(shí) bash 由于無(wú)法處理這類數(shù)據(jù),需要用正則, xpath 來(lái)處理,可以用 php, BeautifulSoup 來(lái)處理,當(dāng)然這種情況僅限于待爬取的 url 較少的情況
  3. 如果待爬取的 url 很多,單線程無(wú)法應(yīng)付,就需要多線程來(lái)處理了,又或者需要 Cookie 管理,動(dòng)態(tài) ip 代理等,這種情況下我們就得考慮 scrapy 這類高性能爬蟲(chóng)框架了

 

 

根據(jù)業(yè)務(wù)場(chǎng)景的復(fù)雜度選擇相應(yīng)的技術(shù)可以達(dá)到事半功倍的效果。我們?cè)诩夹g(shù)選型時(shí)一定要考慮實(shí)際的業(yè)務(wù)場(chǎng)景。

本文轉(zhuǎn)載自微信公眾號(hào)「碼海」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼海公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 碼海
相關(guān)推薦

2021-04-30 07:33:35

效率提升技巧

2020-04-20 10:47:57

Redis數(shù)據(jù)開(kāi)發(fā)

2021-06-28 14:13:34

OOM內(nèi)存事故

2021-04-28 07:22:13

HiveJson數(shù)組

2021-06-26 09:26:01

Jupyter主題目錄

2020-08-31 06:54:37

注解脫敏ELK

2021-03-29 08:24:18

KubeadmKubernetes1運(yùn)維

2021-08-04 07:47:18

IDEJTAGSWD

2025-01-14 00:00:00

場(chǎng)景線程數(shù)據(jù)

2023-11-01 10:49:50

Python面向?qū)ο?/a>

2023-09-26 12:22:37

隊(duì)列Python

2021-04-07 08:13:28

LirbeNMS開(kāi)源SNMP

2023-07-31 08:18:50

Docker參數(shù)容器

2019-03-21 09:45:11

TypeScript編程語(yǔ)言Javascript

2019-11-12 09:15:18

MySQL復(fù)制拓?fù)?/a>Orchestrato

2021-07-30 06:51:28

Nginx運(yùn)維web

2020-04-19 21:41:13

Python數(shù)據(jù)可視化

2016-08-18 00:21:12

網(wǎng)絡(luò)爬蟲(chóng)抓取網(wǎng)絡(luò)

2024-09-26 09:10:08

2019-07-26 06:29:22

MySQL數(shù)據(jù)庫(kù)SQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

无吗不卡中文字幕| 成人久久视频在线观看| zzijzzij亚洲日本成熟少妇| 涩涩网站在线看| 日本片在线观看| 久久天堂av综合合色蜜桃网| 91精品久久久久久| 国产精品1000| 日韩精品中文字幕第1页| 日韩女优av电影| 成人一级片网站| 在线黄色网页| 国产欧美日本一区二区三区| 91精品国产高清久久久久久91裸体 | 亚洲国产精品女人| 亚洲 小说区 图片区 都市| 老司机精品福利视频| 久久的精品视频| 7788色淫网站小说| 亚洲老司机网| 欧美视频在线观看免费网址| 欧美一级免费在线观看| 三级无遮挡在线观看| 国产福利视频一区二区三区| 欧美一性一乱一交一视频| 国产黄在线免费观看| 欧美人妖在线| 亚洲国产日韩欧美在线99| 久热精品在线观看视频| 一本大道色婷婷在线| 亚洲另类在线制服丝袜| 日韩高清专区| 五月婷婷伊人网| 懂色av一区二区三区免费观看| 国产精品入口夜色视频大尺度| 日韩少妇裸体做爰视频| 国产精品草草| 欧美成年人在线观看| 国产欧美小视频| 久久综合色占| 精品在线欧美视频| 亚洲香蕉中文网| 亚洲国产中文在线二区三区免| 7777精品伊人久久久大香线蕉经典版下载| 亚洲熟女乱色一区二区三区 | 91大神福利视频在线| 欧美人妻一区二区| 中文字幕日韩欧美精品高清在线| 最新的欧美黄色| 久久婷婷五月综合| 亚洲自拍电影| 国产视频精品一区二区三区| 超碰男人的天堂| 精品国产影院| 亚洲黄色av网站| 在线观看成人动漫| 国产精品极品| 亚洲精品成人久久| 97人妻精品一区二区三区免| 五月天亚洲一区| 亚洲欧美国产视频| 性猛交ⅹxxx富婆video| 深爱激情综合| 色婷婷**av毛片一区| 国产精品suv一区二区88| 99热国内精品| 久久成人精品视频| 久久久久久久久久综合| 伊人久久成人| 欧美怡红院视频一区二区三区| 啦啦啦免费高清视频在线观看| 另类激情亚洲| 国产精品久久久久影院日本| 中文字幕一区二区三区波野结| 麻豆精品一区二区三区| 91色p视频在线| www.日韩高清| 91免费在线视频观看| 欧美日韩电影一区二区| 一级毛片视频在线观看| 亚洲精品欧美二区三区中文字幕| 亚洲一区二区三区加勒比| 欧美69xxx| 亚洲国产日韩av| 国产福利视频在线播放| 亚洲最大的免费视频网站| 欧美大片在线观看一区| 一二三不卡视频| 999久久久91| 欧美激情在线播放| 亚洲天堂视频在线播放| 国产成人在线视频免费播放| 精品欧美一区二区精品久久| 成人在线免费观看| 亚洲乱码国产乱码精品精的特点| 69堂免费视频| 在线欧美激情| 精品一区精品二区| 日韩在线观看视频一区二区| 国产一区91| 成人免费看黄网站| 午夜视频www| 亚洲视频一区二区在线观看| 欧美一区二区三区爽大粗免费| 日韩成人精品一区二区三区| 亚洲国产精品99| 成人午夜免费影院| 亚洲一区久久| 91久久国产自产拍夜夜嗨| 久久精品国产亚洲a∨麻豆| 自拍偷拍亚洲综合| 日韩欧美在线免费观看视频| xxxx日韩| 久久精品视频在线观看| 亚洲s码欧洲m码国产av| 国产成人av电影| 亚洲国产另类久久久精品极度| caoporn视频在线| 欧美精品1区2区3区| 亚洲 小说 欧美 激情 另类| 黄色欧美日韩| 亚洲va久久久噜噜噜| 户外极限露出调教在线视频| 亚洲高清在线精品| ass极品水嫩小美女ass| 色喇叭免费久久综合| 1769国产精品| 天天射天天色天天干| 亚洲精品写真福利| 黄色三级视频在线| 九一成人免费视频| 9.1国产丝袜在线观看| www.蜜臀av| 亚洲另类在线一区| 色戒在线免费观看| 日本不卡二三区| 91精品国产网站| 噜噜噜久久,亚洲精品国产品| 亚洲欧美另类小说视频| 国产一区二区在线观看免费视频| av在线不卡顿| 国产精品欧美日韩久久| 国产51人人成人人人人爽色哟哟| 欧美日韩激情小视频| 欧美日韩人妻精品一区在线| 狠狠色丁香久久综合频道| 亚洲在线观看视频网站| 搞黄网站在线观看| 欧美一区二区女人| 欧美成人片在线观看| 国产白丝网站精品污在线入口| 日韩 欧美 自拍| 国产电影一区| 欧美精品中文字幕一区| 国产黄a三级三级三级| 亚洲美女偷拍久久| 日本少妇xxx| 激情文学一区| 久久久综合亚洲91久久98| 伊人久久精品一区二区三区| 精品夜色国产国偷在线| 9i精品福利一区二区三区| 国产三区在线成人av| 中文字幕欧美人妻精品一区| 日韩av片子| 91久久综合亚洲鲁鲁五月天| 2024最新电影免费在线观看| 亚洲第一综合天堂另类专| 日韩免费视频网站| 91捆绑美女网站| 成人免费视频久久| 天天综合亚洲| 国产成人av一区二区三区| 国产在线看片免费视频在线观看| 精品在线小视频| 欧美在线视频精品| 亚洲视频在线观看三级| 麻豆精品国产传媒av| 午夜在线视频观看日韩17c| 欧美一级二级三级| 亚洲一区二区av| 国内偷自视频区视频综合| 免费在线看v| 欧美精品一卡二卡| 国产无遮挡又黄又爽又色| 2021国产精品久久精品| 性生活免费在线观看| 亚洲午夜精品久久久久久app| 久久精品国产美女| 日本成人一区二区| 性欧美xxxx| 色大18成网站www在线观看| 日韩美女天天操| 精品久久久久久久久久久国产字幕| 国产精品久久国产精麻豆99网站| 女王人厕视频2ⅴk| 在线亚洲观看| 色中文字幕在线观看| 欧美黑人巨大videos精品| 国产精品一二三视频| 超碰在线网站| 日韩在线观看免费av| 少妇精品视频一区二区| 欧美理论片在线| 日韩精品1区2区| 亚洲男人的天堂一区二区| www.av欧美| 成人激情动漫在线观看| 国产九九在线观看| 亚洲永久字幕| 999久久欧美人妻一区二区| 青青草91久久久久久久久| 国产精品日韩高清| 精品视频在线一区| 国产成人精品午夜| 欧亚在线中文字幕免费| 久久99热精品这里久久精品| 香蕉视频在线播放| 亚洲欧美精品一区| 无码精品一区二区三区在线| 91精品国产综合久久婷婷香蕉 | 欧美大胆的人体xxxx| 中文字幕免费精品一区高清| 水莓100在线视频| 欧美变态凌虐bdsm| av手机免费看| 69堂精品视频| 伊人久久国产精品| 91福利精品视频| 青青草免费观看视频| 亚洲高清免费一级二级三级| 欧美人禽zoz0强交| 国产精品国产三级国产三级人妇| 色欲狠狠躁天天躁无码中文字幕 | 欧美性生交大片| 国产女人18水真多18精品一级做| 亚洲最大的黄色网| 99亚偷拍自图区亚洲| 99riav国产精品视频| 国产精品一级二级三级| 男女污污视频网站| 久久se这里有精品| 亚洲人视频在线| 蜜臀久久99精品久久久画质超高清| 妺妺窝人体色www在线小说| 亚洲国产片色| 五十路熟女丰满大屁股| 亚洲三级影院| av网站在线观看不卡| 西西人体一区二区| 久久久久久久久久久久久久国产| 国产精品一级| 日韩欧美xxxx| 日本欧洲一区二区| 日本不卡一区在线| 国产一区二区三区蝌蚪| 九九热视频免费| 国产成人av一区| 色婷婷免费视频| 久久精品视频网| 日韩精品久久久久久久的张开腿让| 亚洲国产精品ⅴa在线观看| 国产一级淫片久久久片a级| 国产精品久久久久久福利一牛影视| 久久久精品少妇| 亚洲主播在线观看| 在线观看中文字幕视频| 在线精品视频一区二区三四| 中文字幕人妻色偷偷久久| 欧美一区二区在线看| 国产自产一区二区| 日韩精品视频中文在线观看| 欧美老女人性开放| 色悠悠国产精品| 日本成人不卡| 欧美有码在线观看| 日韩有码欧美| 国产精品美女诱惑| 蜜桃一区二区三区| 日本丰满少妇黄大片在线观看| 亚洲精品人人| 中文字幕网av| 成人一区二区视频| 夜夜春很很躁夜夜躁| 亚洲免费毛片网站| 男人午夜免费视频| 欧美精品少妇一区二区三区| 成人午夜精品福利免费| 国产香蕉精品视频一区二区三区| 麻豆网在线观看| 7m第一福利500精品视频| 看片一区二区| 国产精品久久国产精品| 成人免费在线观看av| 国产一区二区三区乱码| 蜜桃视频在线一区| 美女伦理水蜜桃4| 中文字幕国产一区二区| 亚洲国产精品成人无久久精品| 欧洲另类一二三四区| 成人毛片在线免费观看| www.久久撸.com| 中文字幕乱码在线播放| 91久久爱成人| 日本在线电影一区二区三区| 国产极品在线视频| 国产精品资源站在线| 内射毛片内射国产夫妻| 精品国产精品三级精品av网址| 国产又粗又猛又黄又爽无遮挡| 亚洲精品视频二区| 欧美黑人猛交的在线视频| 国产区精品在线观看| 偷窥自拍亚洲色图精选| 亚洲色成人www永久在线观看| 另类综合日韩欧美亚洲| 巨胸大乳www视频免费观看| 亚洲综合999| 91久久国语露脸精品国产高跟| 亚洲乱码国产乱码精品精| 久久www人成免费看片中文| 国产在线日韩在线| 精品视频亚洲| 国产精品宾馆在线精品酒店| 成人午夜激情在线| 五月婷婷一区二区| 91精品久久久久久蜜臀| av在线播放av| 日韩免费在线免费观看| 美女一区二区在线观看| 91精品国产91久久久久麻豆 主演| 国产乱人伦精品一区二区在线观看| 中文字幕精品亚洲| 欧美写真视频网站| 国产福利小视频在线| 欧美影院久久久| 亚洲激情播播| 黄色片久久久久| www激情久久| 99精品在线播放| 亚洲欧美国产精品专区久久| 综合日韩av| 人禽交欧美网站免费| 香蕉精品999视频一区二区| 免费看黄色aaaaaa 片| 天天综合网天天综合色| 姝姝窝人体www聚色窝| 国内精品视频一区| 欧美色图五月天| 国产福利视频在线播放| 国产日韩亚洲欧美综合| 中文字幕激情视频| www.色综合| 免费一级欧美片在线观看网站| 中文字幕第一页亚洲| 国产成人亚洲精品狼色在线| 国产亚洲第一页| 日韩av网站电影| 日韩精品一区二区三区| 亚洲精品在线免费| 精品一区二区三区免费毛片爱| √天堂中文官网8在线| 日韩欧美国产电影| av在线私库| 欧美日韩精品一区| 日本欧美大码aⅴ在线播放| 国产精品夜夜夜爽阿娇| 日韩三级av在线播放| 国产免费拔擦拔擦8x在线播放| 久久人人97超碰人人澡爱香蕉| 日韩一区欧美二区| 国产高清视频免费在线观看| 日韩女优电影在线观看| 日韩av影片| 亚洲综合欧美日韩| 国产不卡高清在线观看视频| 天天操天天操天天操天天| 正在播放欧美一区| 日韩一区二区三区在线看| 日本在线xxx| 国产精品久久久久影院色老大| 国产三级午夜理伦三级| 午夜精品一区二区三区在线视频| 欧美精选视频在线观看| 韩国三级丰满少妇高潮| 精品久久久久久| 在线观看免费版| 高清日韩一区| 日韩av电影免费观看高清完整版| 全程偷拍露脸中年夫妇| 亚洲色图15p| 日韩精品一区二区三区中文| 成年网站在线免费观看| 亚洲男女毛片无遮挡| 免费在线超碰| 成人动漫在线视频| 丝袜美腿成人在线| 九九热只有精品| 自拍偷拍亚洲一区| 午夜先锋成人动漫在线|