宣告:文中所有文字、圖片以及相關外鏈中直接或間接、明示或暗示涉及性別、顏值分數等資訊全部由相關人臉檢測介面給出。無任何客觀性,僅供參考。
1 資料源
知乎 話題『美女』下所有問題中回答所出現的圖片
2 抓取工具
Python 3,並使用第三方庫 Requests、lxml、AipFace,程式碼共 100 + 行
3 必要環境
Mac / Linux / Windows (Linux 沒測過,理論上可以。Windows 之前較多反應出現異常,後查是 windows 對本地檔案名中的字元做了限制,已使用正則過濾),無需登入知乎(即無需提供知乎帳號密碼),人臉檢測服務需要一個百度雲帳號(即百度網盤 / 貼吧帳號)
4 人臉檢測庫
AipFace,由百度雲 AI 開放平臺提供,是一個可以進行人臉檢測的 Python SDK。可以直接透過 HTTP 訪問,免費使用
5 檢測過濾條件
-
過濾所有未出現人臉圖片(比如風景圖、未露臉身材照等)
-
過濾所有非女性(在抓取中,發現知乎男性圖片基本是明星,故不考慮;存在 AipFace 性別識別不準的情況)
-
過濾所有非真實人物,比如動漫人物 (AipFace Human 置信度小於 0.6)
-
過濾所有顏值評分較低圖片(AipFace beauty 屬性小於 45,為了節省儲存空間;再次宣告,AipFace 評分無任何客觀性)
6 實現邏輯
-
透過 Requests 發起 HTTP 請求,獲取『美女』下的部分討論串列
-
透過 lxml 解析抓取到的每個討論中 HTML,獲取其中所有的 img 標簽相應的 src 屬性
-
透過 Requests 發起 HTTP 請求,下載 src 屬性指向圖片(不考慮動圖)
-
透過 AipFace 請求對圖片進行人臉檢測
-
判斷是否檢測到人臉,並使用 『4 檢測過濾條件』過濾
-
將過濾後的圖片持久化到本地檔案系統,檔案名為 顏值 + 作者 + 問題名 + 序號
-
傳回第一步,繼續
7 抓取結果
直接存放在檔案夾中(angelababy 實力出境)。另外說句,目前抓下來的圖片,除 baby 外,88 分是最高分。個人對其中的排序表示反對,老婆竟然不是最高分
8 程式碼
本文程式碼長達百行,鑒於微信公眾號上程式碼閱讀體驗實在不佳,小編已將原始碼進行儲存,請前往微信公眾號後臺回覆關鍵字「知乎爬蟲」獲取。
微信後臺傳送門
9 執行準備
-
安裝 Python 3,Download Python
-
安裝 requests、lxml、baidu-aip 庫,都可以透過 pip 安裝,一行命令
-
申請百度雲檢測服務,免費。人臉識別-百度AI
-
(可選)配置自定義資訊,如圖片儲存目錄、顏值閾值、人臉置信度等
-
(可選)若請求知乎失敗,傳回如下。需更改 AUTHORIZATION,可從開發者工具中獲取(如下圖)
{
"error": {
"message": "ZERR_NO_AUTH_TOKEN",
"code": 100,
"name": "AuthenticationInvalidRequest"
}
}
-
執行 ^*^
10 結語
-
因是人臉檢測,所以可能有些福利會被篩掉。百度影象識別 API 還有一個叫做色情識別。這個 API 可以識別不可描述以及性感指數程度,可以用這個 API 來找福利(逃
-
如果實在不想申請百度雲服務,可以直接把人臉檢測部分註釋掉,當做單純的爬蟲使用
-
人臉檢測部分可以替換成其他廠商服務或者本地模型,這裡用百度雲是因為它不要錢
-
抓了幾千張照片,效果還是挺不錯的。有興趣可以把程式碼貼下來跑跑試試
-
這邊文章只是基礎爬蟲 + 資料過濾來獲取較高質量資料的示例,希望有興趣者可以 run 下,程式碼裡有很多地方可以很容易的修改,從最簡單的資料源話題變更、抓取資料欄位增加和刪除到圖片過濾條件修改都很容易。如果再稍微花費時間,變更為抓取某人動態(比如輪子哥,資料質量很高)、探索 HTTP 請求中哪些 essay-header 和 query 是必要的,文中程式碼都只需要非常區域性性的修改。至於人臉探測,或者其他機器學習介面,可以提供非常多的功能用於資料過濾,但哪些過濾是具備高可靠性,可信賴的且具備可用性,這個大概是經驗和反覆試驗,這就是額外的話題了;順便希望大家有良好的編碼習慣
-
最後再次宣告,顏值得分以及性別過濾存在 bad case,請勿認真對待
作者:鄧卓
來源:https://zhuanlan.zhihu.com/p/34425618
《Python人工智慧和全棧開發》2018年07月23日即將在北京開課,120天衝擊Python年薪30萬,改變速約~~~~
*宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。
– END –
更多Python好文請點選【閱讀原文】哦
↓↓↓