2018-03-03

Python 機械学習のための画像収集①:アダルトサイトからAV女優6000名の名簿データをスクレイピングし、スプレッドシートを公開しました

#やりたいこと

  • Microsoft AzureのFace APIを使って、Lineから送られてきた画像から、似ているAV女優を取得する





#実装のためのステップ分け

  • AV女優の名簿作成 ←いまココ
    • AV女優の名前を検索
    • AV女優の複数の画像を取得(学習データ)
  • AV女優画像の保存
    • Microsoft Azure Storageに画像をすべて保存
  • AV女優の学習
    • Microsoft Face APIを利用して、画像をすべて学習させる
  • Line Botとの連携
    • AV女優の画像を送信
    • AV女優の画像をGoogle App ScriptでMicrosoft Azure Face APIに送信
    • 似ているAV女優の画像を受信
    • Line Botに返す


#AV女優の名簿作成


#スクリプト


  • 前に書いたスクリプトのCSSセレクター変えただけなので10分で実装
  • リファクタリングとかは一回しか使わないので気にしてないです




getAVActressList.py

import sys
import os
from selenium import webdriver
import pandas
import time

"""***************************************
もろもろの設定
***************************************"""
browser = webdriver.Chrome(executable_path='/mnt/c/workspace/pydev/chromedriver.exe') 
df = pandas.read_csv('default.csv', index_col=0) #女優名・女優の画像URLが列に入っている
url = "http://wav.tv/actresses/" #エロサイトの女優リストのページ

"""******************************
CSS SELECTORの設定
******************************"""

PAGER_NEXT = "a.m-pagination--next.is-last.step" #次へボタン
POSTS = "div.m-actress-wrap"
ACTRESS_NAME = ".m-actress--title" #女優名
IMAGE = ".m-actress--thumbnail-img img" #サムネイル画像のURL、srcで画像ファイルを取得できる

"""***************************************
実行部分
***************************************"""

browser.get(url)

while True: #continue until getting the last page

    #5-1

    if len(browser.find_elements_by_css_selector(PAGER_NEXT)) > 0:
        print("Starting to get posts...")
        posts = browser.find_elements_by_css_selector(POSTS) #ページ内のタイトル複数
        print (len(posts))
        for post in posts:
            try:
                name = post.find_element_by_css_selector(ACTRESS_NAME).text
                print(name)
                thumnailURL = post.find_element_by_css_selector(IMAGE).get_attribute("src")
                print(thumnailURL)
                se = pandas.Series([name,thumnailURL],["name", "image"])    
                df = df.append(se, ignore_index=True)
            except Exception as e:
                print(e)


        btn = browser.find_element_by_css_selector(PAGER_NEXT).get_attribute("href")
        print("next url:{}".format(btn))
        browser.get(btn)
        print("Moving to next page......")
    else:
        print("no pager exist anymore")
        break
#6
print("Finished Scraping. Writing CSV.......")
df.to_csv("output.csv")
print("DONE")


# 次にやること



  • 画像が1枚しかないのは微妙
    • DMM APIから、別の画像を取得してくる
  • 人多すぎ
    • 6000名からもう少し減らしてみる
  • あと、かなり古いばばぁが多い
    • ばばぁに似ているといわれていてもそこまでうれしくないし、それがサジェストされてしまうのはむかつく
    • ボリュームゾーンの20-40代の、現役の画像だけ取得したい

#途中成果物


https://docs.google.com/spreadsheets/d/e/2PACX-1vQ6y7n8FhjDHQPJNuuaaKaO83QtOYqPokux0fh2jY3woItroN8uOFUe3qoix97AIZauyb2g5H8NsH9Q/pubhtml


注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...