IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【站长工具】jsdelivr挂了后我是如何拯救我的个人网站的(halo) -> 正文阅读

[Python知识库]【站长工具】jsdelivr挂了后我是如何拯救我的个人网站的(halo)

前言

众所周知,在去年年底,知名的免费cdn服务提供商jsdelivr由于大陆域名备案的问题,没有国内的CDN加速了,目前都只能解析到海外,不但速度慢,还会偶发性无法连接到服务器。因此国内超多网站都受到了影响。
有人说可以批量修改引用的url,都改成 unpkg.com,但实测,我的个人网站上有一半的js和css在这个站点上是没有的。

由于我的个人站点并没有提供多少花里胡哨的内容,所以我就想着把所有要从jsdelivr获取的文件都下载到服务器本地,不再从外部获取,没准哪天海外服务都没了那就芭比Q了。

操作步骤

  1. 打开博客模板文件夹,找出所有包含jsdelivr的链接,去重后发现有39个链接
    image.png
    image.png

  2. 然后写入一个文本文件
    image.png

  3. 编写下载程序
    可以看到这个目录结构相当复杂,如果要做最少的改动,应该让下载文件后的目录与链接路径保持一致,于是我想到了我以前曾经用网际快车下载过整个网站,但这玩意早就过时了,也懒得装软件。现在用python应该就可以实现,为避免重复造轮子,这种想法肯定有人也曾有过,于是先搜,轻松找到一篇文章
    image.png
    让Python自动下载网站所有文件 ! https://zhuanlan.zhihu.com/p/62876301

我把里面的程序复制出来,修改了入口函数,遍历url列表传入

import urllib.request
import requests
import re, os
# 基于 https://zhuanlan.zhihu.com/p/62876301 修改

def get_file(url):
    '''
    递归下载网站的文件
    :param url:
    :return:
    '''

    if isFile(url):
        print(url)
        try:
            download(url)
        except:
            pass
    else:
        urls = get_url(url)
        for u in urls:
            get_file(u)

def isFile(url):
    '''
    判断一个链接是否是文件
    :param url:
    :return:
    '''
    if url.endswith('/'):
        return False
    else:
        return True

def download(url):
    '''
    :param url:文件链接
    :return: 下载文件,自动创建目录
    '''
    full_name = url.split('//')[-1]
    filename = full_name.split('/')[-1]
    dirname = "/".join(full_name.split('/')[:-1])
    if os.path.exists(dirname):
        pass
    else:
        os.makedirs(dirname, exist_ok=True)
    urllib.request.urlretrieve(url, full_name)

def get_url(base_url):
    '''
    :param base_url:给定一个网址
    :return: 获取给定网址中的所有链接
    '''
    text = ''
    try:
        text = requests.get(base_url).text
    except Exception as e:
        print("error - > ",base_url,e)
        pass
    reg = '<a href="(.*)">.*</a>'
    urls = [base_url + url for url in re.findall(reg, text) if url != '../']
    return urls

if __name__ == '__main__':
    with open('list.txt', 'r') as f:
        lines = f.readlines()
        url_list = []
        for line in lines:
            get_file(line.strip('\n'))
  1. 执行
    将上面的代码保存成py文件后执行,就会在当前目录下生成cdn.jsdelivr.net的主目录及其子目录和文件
    image.png

  2. 上传文件夹到服务器
    由于我是使用的halo博客,可以自定义添加静态资源,直接把下载的gh和npm两个文件夹整个拖到/root/.halo/static目录即可
    image.png

  3. 修改博客模板中的链接
    这个就容易了,直接打开模板中的所有文件,批量将cdn.jsdelivr.net替换成我网站的域名,并保存,覆盖到服务器上
    image.png

  4. 最终效果
    image.png

说点题外的

有不少程序员习惯使用国外的免费服务,比如github和本文中提到的jsdelivr,大家也应该已经发现了这两个东西在国内已经是属于间歇性抽风的状态了。
当前国际形势越来越紧张,把东西放在国外的服务器上所要承担的风险越来越大,也应该要考虑将国外服务器上的东西迁移回本国了,否则哪天一个制裁,轻则断连,中则账号拉黑,重则把你数据直接删了也说不定。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:27:16  更:2022-03-10 22:28:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:30:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码