知乎美女挖掘指南--Python實現自動化圖片抓取、顏值評分

聲明:文中所有文字、圖片以及相關外鏈中直接或間接、明示或暗示涉及性別、顏值分數等信息全部由相關人臉檢測接口給出。無任何客觀性,僅供參考。

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 分是最高分。個人對其中的排序表示反對,老婆竟然不是最高分

acf5402a7caf416fb146c733549d2aa3


7ee6f2e8c2a14b8c943e683e50460f30


8b32e0bc3c384760973ea5f14b270811


57fa3c5ee5e8431dad3187493a1b79a9


8 代碼

本文代碼長達百行,鑑於微信公衆號上代碼閱讀體驗實在不佳,小編已將源代碼進行保存,請前往微信公衆號後臺回覆關鍵字「知乎爬蟲」獲取。


17085a25a6994640a2d771a8efc3292b



微信後臺傳送門


9 運行準備

  • 安裝 Python 3,Download Python

  • 安裝 requests、lxml、baidu-aip 庫,都可以通過 pip 安裝,一行命令

  • 申請百度雲檢測服務,免費。人臉識別-百度AI

a5e361c2af354e97afa5faab68ed4b96


要求登錄,百度帳號可以直接使用(貼吧/網盤通用),沒有隻能註冊

6af1707b2ecb49ac8c4ed0f007225266


點擊創建應用

c24ebd9e060d433fb309b69569618994


隨便填下

bce650a2556147209a8b85dfa2d33146


將 AppID ApiKek SecretKey 填寫到 代碼 中

  • (可選)配置自定義信息,如圖片存儲目錄、顏值閾值、人臉置信度等

  • (可選)若請求知乎失敗,返回如下。需更改 AUTHORIZATION,可從開發者工具中獲取(如下圖)


{ "error": { "message": "ZERR_NO_AUTH_TOKEN", "code": 100, "name": "AuthenticationInvalidRequest"
 }
}

ad47411fe0e54409b13ae21612bf6239


Chrome 瀏覽器;找一個知乎鏈接點進去,打開開發者工具,查看 HTTP 請求 header;無需登錄

  • 運行 ^*^


10 結語

  • 因是人臉檢測,所以可能有些福利會被篩掉。百度圖像識別 API 還有一個叫做×××識別。這個 API 可以識別不可描述以及性感指數程度,可以用這個 API 來找福利(逃

  • 如果實在不想申請百度雲服務,可以直接把人臉檢測部分註釋掉,當做單純的爬蟲使用

  • 人臉檢測部分可以替換成其他廠商服務或者本地模型,這裏用百度雲是因爲它不要錢

  • 抓了幾千張照片,效果還是挺不錯的。有興趣可以把代碼貼下來跑跑試試

  • 這邊文章只是基礎爬蟲 + 數據過濾來獲取較高質量數據的示例,希望有興趣者可以 run 下,代碼裏有很多地方可以很容易的修改,從最簡單的數據源話題變更、抓取數據字段增加和刪除到圖片過濾條件修改都很容易。如果再稍微花費時間,變更爲抓取某人動態(比如輪子哥,數據質量很高)、探索 HTTP 請求中哪些 header 和 query 是必要的,文中代碼都只需要非常局部性的修改。至於人臉探測,或者其他機器學習接口,可以提供非常多的功能用於數據過濾,但哪些過濾是具備高可靠性,可信賴的且具備可用性,這個大概是經驗和反覆試驗,這就是額外的話題了;順便希望大家有良好的編碼習慣

  • 最後再次聲明,顏值得分以及性別過濾存在 bad case,請勿認真對待


作者:鄧卓

來源:https://zhuanlan.zhihu.com/p/34425618

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章