第三方扩展包地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/这个网站包的下载就是触发一块js代码通过点击事件来下载文件。链接如下:点击事件调用dl方法,dl方法如下:dl方法调用dl1方法生成下载链接。为了方便,将相关代码用Python重写,然后调用idm实现批量下载。以下是代码:#-*-coding:utf-8-*-#__author__="chendd"frombs4importBeautifulSoupfromsubprocessimportcallimportosimportjson"""目的:下载pythonextendpackageforwindows作者:东东QQ:540465036dl(ml,mi){mi=mi.replace('<','<');mi=mi.replace('>','>');mi=mi.replace('&','&');setTimeout(函数(l){dl1(ml,mi)},1500,1);}dl1(ml,mi){varot="https://download.lfd.uci.edu/pythonlibs/";for(varj=0;jad3?2.2.1?cp38?cp38?win_amd64.whl"""#目标URL。ds='https://www.lfd.uci.edu/~gohlke/pythonlibs/'#目标URL网页内容。一开始我是打算通过请求URL来获取网页内容的。由于异步加载和网速问题,#直接请求无法获取网页的全部内容。于是打开网页拉到最后查看网页源码获取全部内容='utf-8')content=fp.read()fp.close()#idm执行文件路径imd=r'D:\IDM\IDMan.exe'#包存放路径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))#这就是解密下载链接的方法,可以在网页内容中找到对应的jsdefget_lib_url(ml,mi):mi.replace('<','<')mi.replace('>','>')mi.replace('&','&')ot="https://download.lfd.uci.edu/pythonlibs/"forjinrange(0,len(mi)):ot+=chr(ml[ord(mi[j])-47])#print(ot)returnot#遍历a_list中a的所有a标签:#包下载链接包含onClikc属性,其他链接没有if'onclick'ina.attrs:onclick=a.attrs['onclick']#以下是e两个获取解密下载链接需要一个参数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)#使用获取解密字段生成包的下载链接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.exists(package_path):continue#将下载任务添加到idmcall([imd,'/d',lib_link,'/p',package_dir,'/f',package_whl,'/n','/a'])#print(lib_link)#print(package_name)print(package_whl)#break#开始下载队列调用([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