最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)下載網(wǎng)頁并將資源改為本地相對路徑

 更新時間:2026年01月03日 08:48:28   作者:weixin_46244623  
這篇文章主要為大家詳細介紹了如何使用Python輕松實現(xiàn)下載網(wǎng)頁并將資源改為本地相對路徑,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

一、教程目標

本教程實現(xiàn)以下功能:

1、下載指定 URL 的 HTML 頁面

2、自動下載頁面中引用的:

  • CSS 文件
  • JS 文件
  • 圖片(img)

3、解析 CSS 文件中的:

  • 背景圖片(url(…))
  • 字體文件(@font-face)

4、將 HTML 和 CSS 中的外鏈資源全部修改為本地相對路徑

5、最終生成一個可離線訪問的網(wǎng)頁目錄

適合用于:

  • 網(wǎng)頁備份
  • 離線瀏覽
  • 頁面模板保存
  • 簡單靜態(tài)站點克隆

二、環(huán)境準備

1. Python 版本

建議使用 Python 3.7 及以上版本

2. 安裝依賴庫

pip install requests beautifulsoup4

三、完整代碼(中文注釋版)

import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse, urljoin
import re


def download_file(url, folder):
    """
    下載單個文件并保存到指定目錄
    :param url: 文件的絕對 URL
    :param folder: 保存目錄
    """
    response = requests.get(url)
    if response.status_code == 200:
        # 從 URL 中解析出文件名
        filename = os.path.basename(urlparse(url).path)
        save_path = os.path.join(folder, filename)

        # 以二進制方式寫入文件
        with open(save_path, 'wb') as f:
            f.write(response.content)


def download_and_modify_links(html_url, save_folder, domain_to_remove):
    """
    下載 HTML 頁面,并將其中的 CSS、JS、IMG 等資源下載到本地,
    同時把所有鏈接修改為相對路徑
    :param html_url: 目標網(wǎng)頁 URL
    :param save_folder: 本地保存目錄
    :param domain_to_remove: 預留參數(shù)(當前版本未使用)
    """

    response = requests.get(html_url)
    if response.status_code != 200:
        print(f"頁面下載失敗,狀態(tài)碼:{response.status_code}")
        return

    # 使用 BeautifulSoup 解析 HTML
    soup = BeautifulSoup(response.text, 'html.parser')

    # 創(chuàng)建保存資源的目錄
    os.makedirs(save_folder, exist_ok=True)

    # 處理 link、img、script 標簽
    # link -> CSS
    # img  -> 圖片
    # script -> JS
    for tag, attribute in [('link', 'href'), ('img', 'src'), ('script', 'src')]:
        elements = soup.find_all(tag, {attribute: True})
        for element in elements:
            original_link = element[attribute]

            # 將相對路徑轉換為絕對路徑
            absolute_link = urljoin(html_url, original_link)

            # 提取文件名
            filename = os.path.basename(urlparse(absolute_link).path)
            if not filename:
                continue

            # 修改 HTML 中的引用為相對路徑
            element[attribute] = f"./{filename}"

            # 下載資源文件
            download_file(absolute_link, save_folder)

    # 單獨處理 CSS 文件,解析其中的圖片和字體
    css_elements = soup.find_all('link', {'rel': 'stylesheet'})
    for css_element in css_elements:
        css_url = urljoin(html_url, css_element['href'])
        css_response = requests.get(css_url)

        if css_response.status_code != 200:
            continue

        css_text = css_response.text

        # 處理 CSS 中的 url(...) 圖片
        image_urls = re.findall(r'url\((.*?)\)', css_text)
        for image_url in image_urls:
            clean_url = image_url.strip('\'"')
            absolute_image_url = urljoin(css_url, clean_url)

            filename = os.path.basename(urlparse(absolute_image_url).path)
            if not filename:
                continue

            # 替換 CSS 中的路徑為本地相對路徑
            css_text = css_text.replace(image_url, f"./{filename}")

            # 下載圖片
            download_file(absolute_image_url, save_folder)

        # 處理 @font-face 中的字體文件
        font_urls = re.findall(r'@font-face.*?url\((.*?)\)', css_text, re.S)
        for font_url in font_urls:
            clean_url = font_url.strip('\'"')
            absolute_font_url = urljoin(css_url, clean_url)

            filename = os.path.basename(urlparse(absolute_font_url).path)
            if not filename:
                continue

            css_text = css_text.replace(font_url, f"./{filename}")
            download_file(absolute_font_url, save_folder)

        # 保存修改后的 CSS 文件
        css_filename = os.path.basename(urlparse(css_url).path)
        css_save_path = os.path.join(save_folder, css_filename)

        with open(css_save_path, 'w', encoding='utf-8') as f:
            f.write(css_text)

        # 修改 HTML 中的 CSS 引用路徑
        css_element['href'] = f"./{css_filename}"

    # 保存最終修改后的 HTML 文件
    html_save_path = os.path.join(save_folder, 'index.html')
    with open(html_save_path, 'w', encoding='utf-8') as f:
        f.write(str(soup))

    print("HTML 頁面及相關資源已成功下載并本地化")

四、主程序入口示例

if __name__ == "__main__":
    html_url = "http://example.com/"
    save_folder = "downloaded_files"
    domain_to_remove = "http://example.com"

    download_and_modify_links(html_url, save_folder, domain_to_remove)

五、運行結果目錄結構示例

downloaded_files/
├── index.html

打開 index.html 即可離線訪問網(wǎng)頁。

到此這篇關于Python實現(xiàn)下載網(wǎng)頁并將資源改為本地相對路徑的文章就介紹到這了,更多相關Python下載網(wǎng)頁資源內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 超詳細注釋之OpenCV制作圖像Mask

    超詳細注釋之OpenCV制作圖像Mask

    這篇文章主要介紹了OpenCV制作圖像Mask,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 詳解python方法之綁定方法與非綁定方法

    詳解python方法之綁定方法與非綁定方法

    這篇文章主要介紹了python方法之綁定方法與非綁定方法的相關資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-08-08
  • 基于Python matplotlib庫繪制箱線圖

    基于Python matplotlib庫繪制箱線圖

    這篇文章主要為大家分享了如何利用Python中的matplotlib庫實現(xiàn)繪制箱線圖與異常值的輸出,文中的示例代碼講解詳細,需要的可以參考一下
    2022-04-04
  • Python爬蟲 bilibili視頻彈幕提取過程詳解

    Python爬蟲 bilibili視頻彈幕提取過程詳解

    這篇文章主要介紹了Python爬蟲 bilibili視頻彈幕提取過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python基礎入門學習筆記(Python環(huán)境搭建)

    python基礎入門學習筆記(Python環(huán)境搭建)

    這篇文章主要介紹了python基礎入門學習筆記,這是開啟學習python基礎知識的第一篇,夯實Python基礎,才能走的更遠,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 用Python計算三角函數(shù)之a(chǎn)cos()方法的使用

    用Python計算三角函數(shù)之a(chǎn)cos()方法的使用

    這篇文章主要介紹了用Python計算三角函數(shù)之a(chǎn)cos()方法的使用,是Python學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Python3多線程操作簡單示例

    Python3多線程操作簡單示例

    這篇文章主要介紹了Python3多線程操作,結合實例形式分析了Python3兼容Python2使用_thread進行多線程操作的簡單實現(xiàn)技巧,需要的朋友可以參考下
    2018-05-05
  • Python光學仿真理解Jones矩陣學習

    Python光學仿真理解Jones矩陣學習

    這篇文章主要為大家介紹了Python光學仿真理解Jones矩陣的學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-10-10
  • Python常用庫推薦

    Python常用庫推薦

    本文給大家推薦的是在Python學習使用中經(jīng)常需要用到的第三方庫和工具,非常的實用,有需要的小伙伴可以參考下
    2016-12-12
  • python逆向入門教程

    python逆向入門教程

    這篇文章主要介紹了python逆向入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論

博罗县| 临夏市| 普陀区| 沁阳市| 襄樊市| 汤原县| 洛浦县| 铅山县| 克什克腾旗| 沾益县| 都匀市| 霸州市| 中山市| 平乐县| 晴隆县| 恭城| 绥芬河市| 龙岩市| 南华县| 长汀县| 浙江省| 阿拉善盟| 天长市| 岳池县| 潞西市| 景东| 莱阳市| 宜春市| 吉林市| 沅江市| 那曲县| 蚌埠市| 长兴县| 土默特左旗| 修水县| 峨边| 禹城市| 武陟县| 琼中| 宜黄县| 合水县|