繁体   English   中英

如何使用 Python 从 cdnjs 下载完整的项目结构

[英]How to download the complete project structure from cdnjs using Python

我想将整个项目从 cdnjs 云下载到本地文件夹。 我试过这个:

import requests
files = requests.get("https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML%2CSafe.js&ver=4.1")
with open("mathjax.js","w") as file:
    file.write(files.text)

现在这个下载js文件。 当我尝试使用相同的代码而不是 js 文件来获取项目时,output 很奇怪。

所以我尝试使用 cdnjs 并检查当我使用 cdnjs 云和使用本地文件时会发生什么。

如图所示,我得到了这种差异:

使用 cdnjs
cdnjs 输出

使用本地文件
本地输出

如何获得与使用 cdnjs 时类似的结构?
请给我建议。

您提供给 requests 模块的 URL 只是一个文件MathJax.js的 URL ,这就是为什么您只获得该文件为 output.js 你想要的是下载完整的目录mathjax/2.7.5/ 但是,如果我们请求整个目录,服务器会禁止此类请求。

另一种方法是从主目录中获取所有文件的相对路径,如图所示,您已经拥有该路径。 然后,您可以独立下载每个文件并将其存储到各自的文件夹中。 最后,您将准备好整个目录。

为此,请尝试以下代码。

import requests
import os

baseUrl="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/" #Base URL for the main directory
#List containing relative paths of all required files
relativePaths=['config/Safe.js?V=2.7.5',
       'config/TeX-AMS-MML_HTMLorMML.js?V=2.7.5',
       'extensions/Safe.js?V=2.7.5',
       'jax/output/SVG/fonts/TeX/fontdata.js?V=2.7.5',
       'jax/output/SVG/jax.js?V=2.7.5',
       'MathJax.js?config=TeX-AMS-MML_HTMLorMML%2CSafe.js&ver=4.1']

parentDir='\\'.join(baseUrl.split('/')[-3:]) #Parent directory from URL
for path in relativePaths: #For all files
    req=requests.get(baseUrl+path) #forming url

    filename=path.split("/")[-1].split("?")[0] #extracting filename out of url
    directory=os.path.join(parentDir,"\\".join(path.split('/')[:-1])) #Extracting directories path for local path formation
    if not os.path.exists(directory): #Creating local direcories if they do not exist
        os.makedirs(directory)

    with open(os.path.join(directory,filename),"wb+") as file: #Storing results into files
        file.write(req.content)

本地目录结构 Output:

下载所有文件后的本地目录

除了遍历已定义的文件列表之外,您还可以查看其他几个选项,这些选项可以采用更动态的方法从 CDN 获取文件。

  1. cdnjs 由 GitHub 存储库提供支持,因此您可以探索克隆它并提取文件(由于存储库大小,如果您这样做,我建议使用 sparse-checkout),或者您可以查看使用 GitHub ZDB97423871048CA8DE634ACE1 导航存储库文件:github.com/cdnjs/cdnjs/tree/master/ajax/libs/mathjax/2.7.5

  2. 我们实际上有一个可用于 cdnjs 的 API,它允许您相当轻松地获取库版本中的所有文件。 使用该列表,您可以执行与 Hamza 建议的类似的迭代解决方案,以在本地获取所有文件的副本: https://api.cdnjs.com/libraries/mathjax?fields=assets (令人讨厌的是,我们还没有每个版本实施 API 导航)

希望有帮助,马特。 cdnjs 维护者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM