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

第三方扩展包地址:

这个网址上包的下载是通过点击事件,触发一段js代码来实现文件的下载。

链接如下:

1460000023253683

click事件调用dl方法,dl方法如下:

1460000023253684

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

"""

"""

ad3‑2.2.1‑cp38‑cp38‑win_amd64.whl

"""

# 目标网址。

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

#

# get_lib_url(a, b)

后面再添加百度网盘api的调用,cmd下载完成之后,调用api上传whl文件到网盘里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值