第三方扩大包地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/
这个网址上包的下载是通过点击事件,触发一段js代码来实现文件的下载。
链接如下:
click事件调用dl办法,dl办法如下:
dl办法外面调用dl1办法,来生成下载链接。
为了不便,用Python改写了相干的代码,而后调用idm来实现批量下载。
以下为代码:
# -*- coding:utf-8 -*- # __author__ = "chendd" from bs4 import BeautifulSoup from subprocess import call import os import json """ 目标:下载python extend package for windows 作者:东东 QQ:540465036 dl(ml,mi){mi=mi.replace('<','<');mi=mi.replace('>','>');mi=mi.replace('&','&');setTimeout(function(l){dl1(ml,mi)},1500, 1);} dl1(ml,mi){var ot="https://download.lfd.uci.edu/pythonlibs/";for(var j=0;j<mi.length;j++)ot+=String.fromCharCode(ml[mi.charCodeAt(j)-47]);location.href=ot;} """ """ <a href="javascript:;" onclick=" javascript:dl([101,52,105,45,46,115,100,49,99,47,113,50,95,51,110,112,109,108,118,104,106,119,97,56,54], "D<C91AF48E5<2:3:3627><F27><F2D1=;E?5G03DB@"); "javascript: dl("" title="[614 KB] [Oct 17, 2019]">ad3‑2.2.1‑cp38‑cp38‑win_amd64.whl</a> """ # 指标网址。 ds = 'https://www.lfd.uci.edu/~gohlke/pythonlibs/' # 指标网址网页内容。刚开始筹备用request申请网址获取网页内容,因为异步加载及网速问题, # 间接申请拿不到全副网页内容。于是就关上网页拉到底之后查看网页源码获取全部内容 ds_file = r'D:\IDMDownload\py_libs\html.txt' # 关上网页内容文件,习惯的话,能够用with fp = open(ds_file, 'r', encoding='utf-8') content = fp.read() fp.close() # idm的执行文件门路 imd = r'D:\IDM\IDMan.exe' # package寄存门路 down_path = r'D:\IDMDownload\py_libs' # bs4加载网页内容 soup = BeautifulSoup(content, ) # ul = soup.select('.pylibs') # # print(ul) # print(type(ul)) # ul_content = ul[0] # 间接查找所有的链接 a_list = soup.find_all('a') # print(type(a_list)) # 这个是下载链接的解密办法,能够在网页内容中找到对应的js def get_lib_url(ml, mi): mi.replace('<', '<') mi.replace('>', '>') mi.replace('&', '&') ot = "https://download.lfd.uci.edu/pythonlibs/" for j in range(0, len(mi)): ot += chr(ml[ord(mi[j]) - 47]) # print(ot) return ot # 遍历所有的a标签 for a in a_list: # package下载链接中蕴含onClikc属性,其余的链接则没有 if 'onclick' in a.attrs: onclick = a.attrs['onclick'] # 以下是获取解密下载链接须要的两个参数 onclick_data = onclick.split('javascript')[1].split('(')[1].split(')')[0].split() ml_str = onclick_data[0].strip()[:-1] mi_str = onclick_data[1][1:-1] ml_list = json.loads(ml_str) # 利用获取的解密字段来生成package的下载链接 lib_link = get_lib_url(ml_list, mi_str) package_whl = lib_link.split('/')[-1] package_name = package_whl.split('-')[0] package_dir = os.path.join(down_path, package_name) # 新建package的子目录 if not os.path.exists(package_dir): os.makedirs(package_dir) # 跳过已下载的 package_path = os.path.join(package_dir, package_whl) if os.path.exists(package_path): continue # 将下载工作增加到idm的工作队列中 call([imd, '/d', lib_link, '/p', package_dir, '/f', package_whl, '/n', '/a']) # print(lib_link) # print(package_name) print(package_whl) # break # 启动下载队列 call([imd, '/s']) # a = [101, 52, 105, 45, 46, 115, 100, 49, 99, 47, 113, 50, 95, 51, 110, 112, 109, 108, 118, 104, 106, 119, 97, 56, 54] # b = "D<C91AF48E5<2:3:3627><F27><F2D1=;E?5G03DB@" # # get_lib_url(a, b)
前面再增加百度网盘api的调用,cmd下载实现之后,调用api上传whl文件到网盘里。