1. 程式人生 > 實用技巧 >python爬蟲--看看某牙女主播中誰顏值最高,自己動手測測你的顏值

python爬蟲--看看某牙女主播中誰顏值最高,自己動手測測你的顏值

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於騰訊雲 作者:萌萌噠的瓤瓤

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )

爬蟲

網頁連結:https://www.huya.com/g/4079
這裡的主要步驟其實還是和我們之前分析的一樣,如下圖所示:

這裡再簡單帶大家看一下就行,重點是我們的第二部分。

既然網頁結構我們已經分析完了,那麼我還是選擇用之前的xpath來爬取我們所需要的資源。

#
獲取所有的主播資訊 def getDatas(html): datalist=[] parse=parsel.Selector(html) lis=parse.xpath('//li[@class="game-live-item"]').getall() # print(lis) for li in lis: data = [] parse1=parsel.Selector(li) img_src=parse1.xpath('//img[@class="pic"]/@data-original').get("data
") data.append(img_src) title=parse1.xpath('//i[@class="nick"]/@title').get("data") data.append(title) redu=parse1.xpath('//i[@class="js-num"]/text()').get("data") data.append(redu) datalist.append(data) return datalist

這樣我們就能獲取到我們所需要的所有資源,之後將圖片儲存下來即可。這其中有兩種檔案的下載方式,一種是通過 with open開啟檔案的方式 ,另外一種就是通過 urllib.request.urlretrieve(data,path) 的方法,網上說第二種方式的下載速度會相對快一點,並且第二種有點 set 集合的意思,可以自動進行 去重 的操作,下載的資料夾中沒有該檔案就下載,否則就跳過。

#儲存主播頭像
def download(datalist):
    for data in datalist:
        #第一種下載方式
        with open("D:/software/python/python爬蟲/虎牙顏值主播排名/", 'wb') as f:
            f.write(data[0])
        #第二種下載方式
        urllib.request.urlretrieve(data[0],"D:/software/python/python爬蟲/虎牙顏值主播排名"+"/"+data[1]+".jpg")
        print(data[1]+"下載完成")

百度人臉識別介面

百度AI開放平臺連結:https://ai.baidu.com/

輸入相應的應用名稱以及簡介即可。

這樣我們的應用就算建立完畢了。選中的部分也是我們接下來會用到的。

之後我們先去看一下sdk檔案

看使用說明即可,不用著急下載,之後我們直接在pycharm中安裝模組就行。

之後我們來看一下簡單的操作流程首先先建立客戶端:


之後我們就是呼叫介面解析圖片,因為我們需要返回顏值分數這一個引數,所以還需要帶引數進行請求,否則無法將分數資訊返回給我們。如下圖:


這樣我們顏值檢測的介面流程基本就已經理清楚了,程式碼如下:

def face_rg(file_path):
    """ 你的 APPID AK SK """
    APP_ID = '你的 App ID'
    API_KEY = '你的 Api Key'
    SECRET_KEY = '你的 Secret Key'

    client = AipFace(APP_ID, API_KEY, SECRET_KEY)

    with open(file_path,'rb')as file:
        data=base64.b64encode(file.read())


    image=data.decode()

    imageType = "BASE64"

    """ 如果有可選引數 """
    options = {}
    options["face_field"] = "beauty"


    """ 帶引數呼叫人臉檢測 """
    result=client.detect(image, imageType, options)
    # print(result)
    return  result['result']['face_list'][0]['beauty']

之後我們就只需要編寫一個遍歷資料夾下面的圖片進行檢測,之後將整個資訊按照顏值分數進行降序排列:

path=r"D:\software\python\python爬蟲\虎牙顏值主播排名"
image_list=os.listdir(path)
name_score={}
for image in image_list:
    try:
        print(image.split(".")[0]+"顏值評分為:%d"%face_rg(path+"/"+image))
        name_score[image.split(".")[0]]=face_rg(path+"/"+image)
    except:
        pass
second_score=sorted(name_score.items(),key=lambda x:x[1],reverse=True)
print("-------------------------------------檢測結束-------------------------------------")
print("-------------------------------------以下是排名-------------------------------------")
for a,b in enumerate(second_score):
    print("{}的顏值評分為:{},排名第{}".format(second_score[a][0],second_score[a][1],a+1))

效果演示