見出し画像

Pythonスクレイピングで動画の楽々ファイルリネームしてみた(FANZA,MGS,FC2的なやつ対応)

手持ちの動画ファイルを超絶手軽にリネームしたい。
ただそれだけを追求するために、Python初心者が試行錯誤してみた。


※2021年9月編集
※初心者がやってみたので、文法もへったくれもありません。結果オーライ。
※サイトの仕様変更で使えなくなるかもしれませんので、ご了承ください。
※本記事で紹介したスクリプト等の使用は自己責任でお願いいたします。
 違法行為を助長するためのものではありません。
※DMMのアフィ(API)申請が却下くらったので、仕方なくスクレイピングした。

前提

検証した環境(用意するもの)
・Windows 10 64bit
・Python 3.9.7 ※インストーラーはここからどうぞ
・VS Code 1.60  ※実行に必須ではない

PATHは通した前提ですが、分からなければ
「環境変数PATHを設定する python」で検索してみてください。

検索可能なファイル名条件
・AAA-000.mp4
・BBB 000.mp4
・CCC_000.mp4
・FC2 PPV 0000000.mp4
・fc2_ppv_0000000.mp4


①何はなくともスクレイピングに必要なライブラリをインストール。

 ・requests
 ・beautifulsoup4

インストール方法
「Windowsキー+R」 で 「ファイル名を指定して実行」を表示させ
名前欄に「cmd」と入力し、「OK」でコマンドプロンプトを起動。

画像1


下記コマンドでライブラリを1個ずつインストールする。

pip install requests
pip install beautifulsoup4


②pythonファイルを作成

実際にPythonでコードを書いてみた。
好きなところに好きな名前でPythonファイルとして保存する。

今回は「jav.py」という名前で、Cドライブ直下に「jav_renamer」という名前のフォルダを作成し、そこに保存した。
C:\jav_renamer\jav.py

import sys
import os.path
import time
import re
import unicodedata

import requests 
import bs4

#下記リストに女優名を登録すると、ファイル名先頭に「★」がつく
#############################################
Favorite = ["本庄鈴",
          "うみ",
          "もあ"
]
#############################################

 #リネーム def rename(filename):
   keyword = filename
   keyword = re.sub('hhd800_com', '', keyword)
   keyword = re.sub('_', '-', keyword)
   keyword = re.sub(' ', '-', keyword)
   keyword = keyword.upper()
   return(keyword)

#FANZA検索
def fanza(filename):
   
   keyword = filename
   url = "https://www.dmm.co.jp/search/=/searchstr=" + keyword + "/sort=date/"

   res = requests.get(url)
   res.raise_for_status() #エラーチェック
   soup = bs4.BeautifulSoup(res.text, 'html.parser')
   elems = soup.find_all(class_='img')

   if not elems:
       title_name = "見つかりませんでした"
   else:
       min_title = 0
       for elem in elems:
           title_temp = elem('img')[0]['alt']
           
           if min_title == 0:
               min_title = len(title_temp)

           if min_title >= len(title_temp):
               min_title = len(title_temp)
               title_name = title_temp

   return(title_name)

#MGStage検索
def mgstage(filename):
   
   keyword = filename
   url2 = "https://www.mgstage.com/search/cSearch.php?search_word=" + keyword
   
   cookie = {'adc': '1'}  # 名前:コンテンツ
   res = requests.get(url2, cookies=cookie)
   soup = bs4.BeautifulSoup(res.content, 'html.parser')
   elems = soup.find_all('p', class_='title lineclamp')

   if not elems:
       title_name = "見つかりませんでした"
   else:
       min_title = 0
       for elem in elems:
           title_temp = elem.text
           #print(len(title_temp))
           
           if min_title == 0:
               min_title = len(title_temp)

           if min_title >= len(title_temp):
               min_title = len(title_temp)
               title_name = title_temp

   return(title_name)


###########ここからmain###########
file_paths = sys.argv[1:]

#.pyを起動した場合、引数のファイルがないので強制終了
if len(file_paths) == 0:
   print("引数(ファイル名)が認識できません")
   time.sleep(2)
   exit()

#現状のファイルネーム
old_filename = os.path.splitext(os.path.basename(file_paths[0]))[0]
print("現状ファイルネーム:" + old_filename)

#ファイル名に全角文字(日本語)があると強制終了
for c in old_filename:
   if unicodedata.east_asian_width(c) == "W":
       print("ファイル名に全角があるので終了")
       time.sleep(1)
       exit()

#FC2動画判定
print(old_filename)
if "fc2" in str.lower(old_filename):
   print("fc2ファイル")
   old_filename = re.sub('-', ' ', old_filename)
   search_title = old_filename[old_filename.rfind(" ") + 1:]

   print("検索No:" + search_title)
   url = "https://adult.contents.fc2.com/article/" + search_title + "/"

   res = requests.get(url)
   res.raise_for_status() #エラーチェック
   soup = bs4.BeautifulSoup(res.text, 'html.parser')
   elems = soup.find_all("h3")

   if not "申し訳" in elems[0].text:
       if elems[0].text.find("OFF!") > 0:
           title_name = elems[0].text[7:]
       else:
           title_name = elems[0].text
       print(title_name)
       
       new_filename = old_filename + " " + title_name + ".mp4"
       print(new_filename)
       path = os.path.dirname(file_paths[0])
       os.rename(file_paths[0], path + "\\" + new_filename)
   else:
       print("検索結果無し")
       time.sleep(2)
       exit()
       
#FC2動画じゃない場合
else:
   #ファイルのリネーム
   search_title = rename(old_filename)
   print("検索タイトル:" + search_title)

   #分割ファイル(A~Dまで対応)
   if search_title[-1] == "A":
       end = search_title[-1]
       search_title = search_title[0:-1]
       print("分割ファイル", end)
   elif search_title[-1] == "B":
       end = search_title[-1]
       search_title = search_title[0:-1]
       print("分割ファイル", end)
   elif search_title[-1] == "C":
       end = search_title[-1]
       search_title = search_title[0:-1]
       print("分割ファイル", end)
   elif search_title[-1] == "D":
       end = search_title[-1]
       search_title = search_title[0:-1]
       print("分割ファイル", end)
   else:
       end = ""


   #fanzaで検索
   title_name = fanza(search_title)
   print("FANZA検索結果:" + title_name)
   print()

   #FANZAで見つからない場合はMGStageで検索
   if title_name == "見つかりませんでした":
       title_name = mgstage(search_title)
       print("MGStage検索結果:" + title_name)
       print()


   #ファイル名をリネーム
   if not title_name == "見つかりませんでした":
       path = os.path.dirname(file_paths[0])

       #お気に入り女優チェック
       for fav in Favorite:
           if fav in title_name:
               print()
               print("******お気に入りHIT******")
               print()
               new_filename = "★[]" + search_title + end + " " + title_name + ".mp4"
               break
           else:
               new_filename = search_title + end + " " + title_name + ".mp4"
       print(new_filename)

       os.rename(file_paths[0], path + "\\" + new_filename)
   else:
       path = os.path.dirname(file_paths[0])

       new_filename = search_title + ".mp4"
       print(new_filename)

       os.rename(file_paths[0], path + "\\" + new_filename)


#print("この画面は3秒間表示されます。")
time.sleep(3)

ここから先は

800字 / 1ファイル

¥ 250

この記事が気に入ったらサポートをしてみませんか?