Use Python para descargar y guardar el audio de Lazy People's Listening to Books, productos secos puros, ¡sin tonterías!

Use Python para rastrear hasta la dirección de descarga de audio y luego use Internet Download Manager para descargar automáticamente en lotes

# - * - coding: utf-8 - * - 
"" " 
Creado el viernes 14 de diciembre 21:07:11 2018 
@author: fuwen 
" "" 
from subprocess import call 
import os, 
orders , base64, json, time import jsonpath 
import html 
de bs4 import BeautifulSoup 
type = 1 
#https: //www.lrts.me/album/400485 bookid 
BookID = 99144 
# 
Sections = 0 # 
Cuántos capítulos en total Chapter 
= 92 #Save 
path 
FilePath = 'd: \\ mp3' 
# Elimine todos los archivos de la carpeta y vuelva a crear 
def delDir (TitleName): 
    global FilePath 
    FilePath = FilePath + "\\" + TitleName 
    si os.path.exists (FilePath) es True: 
        os.system ('RD / q / s' + Ruta de archivo)
    print () 
#Utilice  
    os.mkdir (FilePath)
    
IDM para instalar y descargar IdmPath = 'd: \\ Internet Download Manager \\ IDMan.exe' #Cierre el 
programa autoit para detectar el cuadro emergente y haga clic en el programa 
exe_name = "lrts.exe" 
def kill_exe (exe_name): 
    "" " 
    Kill exe process 
    : param exe_name: process name 
    : return: none 
    " "" 
    os.system ('taskkill / f / t /im'+exe_name)#MESMTPC.exe nombre del programa 
    print ("kill process {}". format (exe_name)) 
def get_json_value (json_data, key_name): 
    '' 'Obtiene el valor de cualquier clave en json, y el resultado está en formato de lista' '' 
    # key_value = jsonpath.jsonpath (json_data, '$ .. (key_name)'. formato (nombre_clave = nombre_clave)) 
    # https://blog.csdn.net/nail_ciclaje/article/details/80980296
    key_value = jsonpath.jsonpath (json_data, '$ [*]. {key_name}'. format (key_name = key_name)) format (key_name = key_name)) 
    # el valor de la clave no es una cadena vacía o vacía (el vacío siempre se escribe vacío en el caso de uso) devuelve el valor correspondiente; de ​​lo contrario, devuelve vacío
    
    return key_value 
def getChapterTitle (html): 
        soup = BeautifulSoup (html, 'html.parser') 
        
        
        tilename = soup. find ('h1', attrs = {"class": "nowrap"}) # 查找 span class 为 red 的 字符串
        return tilename.text 
def IdmDownLoad (DownloadUrl, Mp3Name): 
    call ([IdmPath, '/ d', DownloadUrl , '/ p', FilePath, '/ f', Mp3Name, '/ n']) 
def IdmDownLoadChangeName (DownloadUrl, Mp3Name): 
    # call ([IdmPath, '/ d', DownloadUrl, '/ p', FilePath, ' / n ']) 
    begin = DownloadUrl.rfind (' / ') 
    end = DownloadUrl.rfind ('? ') 
    src_name = DownloadUrl [begin + 1: end]
    os.rename (FilePath + "\\" + src_name, FilePath + "\\" + Mp3Name) 
def ChangeFileName (nombre de archivo): 
    filename = filename.replace ('\\', '') 
if __name__ == "__main__": 
    nombre de archivo = nombre de archivo.reemplazar ('/', '') 
    nombre de archivo = nombre de archivo.replace (':', '')
    filename = filename.replace ('*', '') 
    filename = filename.replace ('“', '') 
    filename = filename.replace ('”', '') 
    filename = filename.replace ('<', ' ') 
    nombre de archivo = nombre de archivo.replace ('> ',' ') 
    nombre de archivo = nombre de archivo.replace (' | ',' ') 
    nombre de archivo = nombre de archivo.replace ('? ','? ') 
    nombre de archivo = nombre de archivo.replace (' ( ',' (') 
    nombre de archivo = nombre de archivo.replace (chr (65279),' ') # UTF-8 + BOM 
# print (ord (nombre de archivo [0])) 
    nombre de archivo = nombre de archivo.split (' (') [0] 
    return html.unescape (nombre de archivo) 
    Mp3ListJsonUrl = 'https://www.lrts.me/ajax/album/{0}/{1}/{2}'.formato (BookID, Secciones, Capítulos)
    headers = {'User-Agent': 'Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 55.0.2883.95 Safari / 537.36'} 
    TitleUrl = 'https: // www. lrts.me/album/{0}'.format(BookID) 
    conn = 
    orders.session () Mp3ListDic = {} 
    Mp3ListJson = conn.get (Mp3ListJsonUrl, headers = headers) 
    Mp3TitleJson = conn.get (TitleUrl, headers = headers) 
    
    titlename = getChapterTitle (Mp3TitleJson.text) 
    si el título es None: 
        print ("没 找到 这个 题目") 
        exit () 
    print (titlename)  
    delDir (nombre del título)
    Mp3ListJson = json.loads (Mp3ListJson.text) 
    
    # print (Mp3ListJson ["data"] [" datos "]) 
    Josndata = Mp3ListJson [" datos "]["datos"] 
    Mp3IdList = get_json_value (Josndata, "id") 
    # print (Mp3IdList) 
    Mp3IdNameList = get_json_value (Josndata, "nombre") 
    para el elemento en Mp3IdNameList: 
        index = Mp3IdNameList.index (elemento) 
        Mp3ListDic [html.unescape (elemento)] = Mp3IdList [índice] 
        # Mp3ListDic [Mp3IdList [índice] .unescape (artículo) 
    # imprimir (Mp3ListDic) 
    Mp3List = Josndata 
    Mp3NameList = [Mp3dict ['nombre'] para Mp3dict en Mp3List] 
    Mp3NameList = [ChangeFileName (i) para i en Mp3NameList] 
    # print (Mp3NameList)
    AlreadyDown = [FileName.replace ('. Mp3', '') para FileName en os.listdir (FilePath)] 
    Count = 0 
    os.startfile (exe_name) 
    time.sleep (2) 
    para Mp3Name en Mp3NameList: 
        Count + = 1 
        # if Count == 2: 
        # romper 
        si Mp3Name en AlreadyDown:
            continue 
        # type = 1 & resourcesid = 99144 & section = 1 \ 
        Mp3JsonUrl = "https://www.lrts.me/ajax/playlist/{0}/{1}/{2}" .format (tipo, BookID , Count) 
        Mp3Url = conn.get (Mp3JsonUrl, headers = headers) 
        # print (Mp3Url.text) 
        html = Mp3Url.text 
        soup = BeautifulSoup (html, 'html.parser') 
        mp3id = "section" + str (Mp3ListDic [Mp3Name ]) 
        imprimir (mp3id) 
        s1 = soup .find ('li', attrs = {"id": mp3id}) # 查找 span class 为 red 的 字符串
        DownloadUrl = s1.find ('input') ["value"] 
        print (DownloadUrl) 
        try: 
            
            IdmDownLoad (DownloadUrl , Mp3Name + '. Mp3') 
            tiempo.dormir (2) 
        excepto:
            imprimir ( '% s, no haya sido comprado, se saltó ...' Mp3Name%) 
    kill_exe (exe_name) 
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828103104858105888107132109116134127112130118103104858105888107132

Luego use autoit para escribir un programa para cerrar el molesto cuadro de mensaje de idm

$ winTitle = "Administrador de descargas de Internet" 
Mientras que 1 
	$ winHandle = WinGetHandle ($ winTitle); 
	ConsoleWrite (WinGetTitle ($ winHandle)) 
	Si WinGetTitle ($ winHandle) == "Administrador de descargas de Internet", entonces 
	WinActivate ($ winHandle) 
	EndIf 
	If WinWaitActive ("Administrador de descargas de Internet") Entonces 
		; ConsoleWrite ($ winHandle) 
	ControlClick ($ winHandle, " "," [ID: 7] ") 
	EndIf 
	
	
	Sleep (100) 
	WEnd

 

Supongo que te gusta

Origin blog.csdn.net/weixin_43881394/article/details/109073518
Recomendado
Clasificación