Cette fois, je vais faire un simple grattage. Je ne pense pas qu'il y ait beaucoup de gens qui aiment collecter des sources sonores localement à l'apogée de l'abonnement et même étiqueter des chansons, des compositions et des arrangements, mais j'aimerais les présenter car ils peuvent être facilement étiquetés avec cela.
Le premier est la structure du site Tower Records. Quand j'ai recherché le xpath, qui était rempli d'informations importantes, il ressemblait à ce qui suit.
//*[@id="RelationArtist_0_1_sub"]/div/div[3]/div[2]/a/text()
Ceci représente les informations d'écriture de morceau pour le premier morceau sur Disc1. À partir du numéro précédent, numéro de disque, numéro de trace, paroles ou composition ou arrangement. Veuillez ne pas jouer avec le dernier numéro.
Écrivons en fait le code. Les bibliothèques utilisées sont lxml (scraping), urllib (autour du net) et mutagen (lié aux balises musicales).
tagget.py
om mutagen.flac import FLAC
from urllib import request
import requests
from lxml import html
import os
import requests
import json
class Net():
def Tower(self, no, html2, disc, item):
content = list()
if item=="W": #Jugez l'une des paroles, la composition et l'arrangement, et entrez le nombre approprié.
i = "3"
elif item=="C":
i = "4"
elif item=="A":
i = "5"
contentr = html2.xpath('//*[@id="RelationArtist_'+str(disc)+'_'+str(no)+'_sub"]/div/div['+i+']/div[2]/a/text()') #Spécifiez l'emplacement
try:
content.append(contentr[0].strip('\'').strip()) #Ce n'est pas intelligent, mais cela correspond au cas où plusieurs valeurs sont entrées
content.append(contentr[1].strip('\'').strip()) #Utilisons pour ou While!
content.append(contentr[2].strip('\'').strip())
content.append(contentr[3].strip('\'').strip())
except IndexError:
print(content) #Si la valeur n'est plus saisie, une erreur sera émise pour afficher le type de balise acquis.
return content
class Main():
def Towerget(self,files,url):
n = Net()
r = requests.get(url) #Chargez la page
html2 = html.fromstring(r.content) #Analyser la page
for f in files:
tag = FLAC(f) #Chargement des balises
no = tag['tracknumber'][0].lstrip("0") #J'ai entré le numéro de disque à 1 chiffre en tant que 0x, donc je l'ai façonné selon Tower Records.
disc = int(tag['discnumber'][0].lstrip("0")) - 1 #Le nombre représentant le disque commence à 0, alors ajustez-le.
print(no)
tag['word'] = n.Tower(no, html2, disc, item="W") #Entrée d'étiquette d'écriture de chanson
tag['composer'] = n.Tower(no, html2, disc, item='C') #Entrée d'étiquette de composition
tag['arranger'] = n.Tower(no, html2, disc, item="A") #Entrée d'étiquette d'arrangement
tag.pprint()
tag.save() #Enregistrer la balise
os.chdir("E:\music\Non organisé\Frapper le club de la porte de la prison-15 prisons") #Le chemin du fichier à baliser
files0 = os.listdir(os.getcwd()) #Obtenez une liste de dossiers
files = list()
for f in files0: #Étant donné que le même fichier contient des fichiers de gestion Google Drive, des photos de jaquettes, etc., ne retirez que flac
if f.endswith(".flac"):
files.append(f)
print(f)
else:
print("not "+f)
m = Main()
url = "https://tower.jp/item/4936516/15 prisons" #L'URL de la page Tower Records
m.Towerget(files, url)
Ce n'est pas un code très propre, mais vous pouvez l'obtenir pour le moment.
・ Les chansons telles que Overture qui n'ont pas de chanson et pas de paroles ne sont pas synchronisées. ・ Tower Records n'a peut-être pas conclu l'arrangement. ・ Je souhaite obtenir automatiquement l'URL de la page Tower Records (cela semble difficile).
Recommended Posts