• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何批量下载Python第三方扩展包

python 搞代码 4年前 (2022-02-20) 12次浏览 已收录 0个评论

第三方扩大包地址:

​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('&lt;','<');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="&nbsp;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], &quot;D<C91AF48E5<2:3:3627><F27><F2D1=;E?5G03DB@&quot;);&nbsp;&quot;javascript: dl(&quot;" title="[614&nbsp;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('&lt;', '<')
    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文件到网盘里。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何批量下载Python第三方扩展包

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址