簡體   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