一个网站下载程序遇到的问题

Python+Flask搭建一个电影下载网站 1. 写在前面的话 依旧想把Python学好,基础语法部分早就学了,应用部分一点点的渗透,可以往数据分析,爬虫, web,机器学习等方面发展,还有很长的路要走。OK,废话不多说,开始编程。 2. 搭建项目结构 一个好的项目,结构脉络一定要清晰,这样团队合作什么的才能更好协调。虽然我每次的结构也不是很好,但是尽量向这方面发展。如下图: 3. 写好配置文件以及命令行操作文件 需要用到 阅读详情
 贴的这些代码,是我一个构想,代码太长了,没全贴,就是把别人的网站下载下来,替换上自己的内容,简单的说就是网站下载程序
 这样,我就可以快速建站,我准备先拿一个具体站点做实验,然后做成通用的 
 在下载别的站点网页的时候,发现以下问题,大家能否解答下?
 1、发现有很多网址现在不规范,造成在识别时候,写很多种情况,也没法正确识别,例如abc.aspx?id=1&&c=1,这还算好识别的,还有/do?abc=0这种URL基本就没什么规律了
 2、正则表达式效率很高,但是编写实在复杂,花很久才能调试对一个正则表达式,有什么抓取内容的替代方案?
 3、程序运行后,效率不高,处理一个实例需要不少时间,我用.net内存分析工具,发现内存增长很快,不知道是我电脑不行还是什么原因,1小时左右偶然会内存溢出
    且有大量string字符串在托管堆上无法回收?
    大家分析下代码?


public static void RecURLDone(int urlID)
        {
            string sql = "update SiteInfo set DownloadDone=1 where  ID="+urlID;
            //DBUtility db2 = new DBUtility();
            IDataBase mydb;
            DataBaseFactory dbFactory = new DataBaseFactory();
            mydb = dbFactory.MakeDataBase(EnvConfig.getSystemDataBase(SystemDataBaseEnum.Oracle));
            mydb.OperateDB2(sql);
        }
        public  string[] predoURL(string[] UrlArry,string CurrUrl)
        {
            string[] urlArry=new string[UrlArry.Length]; 
            urlArry=UrlArry;
            for (int i = 0; i < urlArry.Length; i++)
            {
                if (urlArry[i] != "")
                {
                    if (urlArry[i] == "#")
                    {
                        urlArry[i] = "";
                    }
                    else
                    {
                        string str = urlArry[i].ToLower().Trim();
                        string firstLetter = str.Substring(0, 1);
                        if (firstLetter == "/")
                        {
                            //html_sb = html_sb.Replace("\"" + urlArry[i] + "\"", "\"" + getCurrUrlRoot(CurrUrl) + urlArry[i] + "\"");
                            //html_sb = html_sb.Replace("'" + urlArry[i] + "'", "'" + getCurrUrlRoot(CurrUrl) + urlArry[i] + "'");
                            urlArry[i] = getCurrUrlRoot(CurrUrl) + urlArry[i];
                            //urlArry[i] = urlArry[i].Replace("//", "/");
                        }
                        else 
                        { 
                            if (!str.Contains("http://"))
                            {
                                if (firstLetter != "/")
                                {
                                    //html_sb = html_sb.Replace("\"" + urlArry[i] + "\"", "\"" + getCurrUrlRoot(CurrUrl) + "/" + urlArry[i] + "\"");
                                    //html_sb = html_sb.Replace("'" + urlArry[i] + "'", "'" + getCurrUrlRoot(CurrUrl) + "/" + urlArry[i] + "'");
                                    urlArry[i] = getCurrUrlRoot(CurrUrl) + "/" + urlArry[i];
                                }   
                            }
                        }
                    }


                }
            }
            return urlArry;
        }
        public string predoURL(string UrlArry, string CurrUrl)
        {
            //string[] urlArry = new string[UrlArry.Length];
            string urlArry = UrlArry;
                if (urlArry != "")
                {
                    if (urlArry == "#")
                    {
                        urlArry = "";
                    }
                    else
                    {
                        string str = urlArry;
                        string firstLetter = str.Substring(0, 1);
                        if (firstLetter == "/")
                        {
                            urlArry = getCurrUrlRoot(CurrUrl) + urlArry;
                        }
                        else
                        {
                            if (!str.Contains("http://"))
                            {
                                if (firstLetter != "/")
                                {
                                    urlArry= getCurrUrlRoot(CurrUrl) + "/" + urlArry;
                                }
                            }
                        }
                    }
                }
                if (urlArry.Contains("http:// www"))
                { 
                    int pp = 0; }
            return urlArry;
        }
        private  string getCurrUrlRoot(string _url)
        {
            string url = _url;
            string url_front = "";
            url = url.Replace("http://", "");
            if (url.Contains("/"))
            {
                int tt = url.IndexOf("/");
                url_front = url.Substring(0, tt);
                //url_back = url.Substring(tt + 1);
            }
            else
            {
                url_front = url;
            }
            if (url_front.Contains(" "))
            {
                int pp = 0;
            }
            return "http://"+url_front;
        }
        public  string[] analysisURL(string _url,string currURL)
        {
            string AppRoot = EnvConfig.AppPath;
            string url = _url;
            url=url.Trim().ToLower();
            //url=url;
            url = predoURL(url, currURL);
            //url = url.Replace("http://", "");
            int tmp_position = 0;
            int tmp_length = 0;
            string tmp_str = "";
            string url_front="";
            string url_back="";
            string root_site="";
            string saveFileName = "";
            string newUrl ="";


            int siteType = 2000;
            int sitePos = 2000;


            url = url.Replace("http://", "");
            if (url.Contains("/"))
            {
                int tt = url.IndexOf("/");
                url_front = url.Substring(0, tt);
                url_back = url.Substring(tt);
            }
            else
            {
                url_front = url;
            }
   
            //tmp_position = url.IndexOf(EnvConfig.SiteTypeList[siteType]);


            //tmp_length = EnvConfig.SiteTypeList[siteType].Length;
            //        url_front=url.Substring(0,tmp_position+tmp_length);
            //        url_back=url.Substring(tmp_position+tmp_length);
            root_site = url_front.Replace("http://", "");
            //root_site=url_front.Replace("")
            string[] temp_dirs=null;
            string t_dirs = "/";//构造存储目录变量
            if (url_back.Length > 2 && url_back.Contains("/"))
            {
                temp_dirs = Regex.Split(url_back,"/");
                //url_back.Split(
            }


            //如果URL中没有文件名,保存为 index.htm
            bool _findFileName = true;//发现URL包含文件名标志
            bool _findQuestionMark = false;
            if (_url.Contains("?"))
            {
                _findQuestionMark = true;
            }
            if ((temp_dirs != null) && (temp_dirs[temp_dirs.Length - 1]!=""))
            {
                saveFileName = temp_dirs[temp_dirs.Length-1];
            }
            else
            { saveFileName = "index.htm"; _findFileName = false; }//如果未发现文件名,则文件名为空


            bool chg=false;
            for (int i = 0; i < EnvConfig.downLoadFileTypeList.Length; i++)
            {
                if (saveFileName.Contains(EnvConfig.downLoadFileTypeList[i])) chg = true;
                
            }
            if ((!chg)&&(_findQuestionMark==false))
            {
                tmp_position = saveFileName.LastIndexOf(".");
                if (tmp_position >= 0)
                {
                    saveFileName = saveFileName.Substring(0, tmp_position) + ".htm";
                }
                else
                {
                    saveFileName += ".htm";
                }
            }
            if ((!chg) && (_findQuestionMark == true) && url_front.Contains(EnvConfig.MinhttpURL))
            {
                string _res = "";
                string[] _fileName ;
                _fileName = url_back.Split('?');
                string _frontFileName = _fileName[0];
                string _backFileName = _fileName[1];
                int p1 = _frontFileName.IndexOf(".");
                if ((_frontFileName != "")&&(p1>0))
                {
                    _res = _frontFileName.Substring(0, p1);
                }
                string[] tag;
                if (_backFileName.Contains("&"))
                {
                    tag = Regex.Split(_backFileName, "&");
                    for (int i = 0; i < tag.Length; i++)
                    {
                        string[] tmp;
                        tmp = Regex.Split(tag[i], "=");
                        //HttpUtility.UrlEncode()
                        if (tmp.Length >= 2)
                        {
                            _res += "_" + HttpUtility.UrlEncode(tmp[0]) + "_" + HttpUtility.UrlEncode(tmp[1]);
                        }
                        else
                        { _res += tag[i]; }
                    }
                }
                else 
                {
                    string[] tmp;
                    if (_backFileName.Contains("="))
                    {
                        tmp = Regex.Split(_backFileName, "=");
                        _res += "_" + HttpUtility.UrlEncode(tmp[0]) + "_" + HttpUtility.UrlEncode(tmp[1]);
                    }
                    else { _res += _backFileName; }
                }
                _res += ".htm";


                saveFileName = _res;


            }
            int nCount = 0;
            if (temp_dirs != null)
            {
                for (int i = 0; i < temp_dirs.Length; i++)
                {
                    if (temp_dirs[i] != "" && i != (temp_dirs.Length - 1))
                    {
                        nCount++;
                        t_dirs = t_dirs + "/" + temp_dirs[i] + "/";
                    }


                }
            }




            t_dirs = root_site  + t_dirs;
            //控制最小符合URL,防止范围过大
            //if (url_front.Contains(EnvConfig.MinhttpURL))
            //{ chg = true; }
            string desKey=@"南京快餐,南京快餐外送,江宁快餐,江宁快餐配送,南京食堂承包,南京职工食堂承包,http://www.njyhkc.com";


            //替换用户关键字
            if (EnvConfig.replace_DIR != null)
            { 
                int ccc=EnvConfig.replace_DIR.Length/ EnvConfig.replace_DIR.Rank;
                string[,] aaa = EnvConfig.replace_DIR;
                for (int i = 0; i < ccc; i++)
                {
                    t_dirs = t_dirs.Replace(aaa[i,0],aaa[i,1]);
                }
            }


            if (EnvConfig.replace_URL != null)
            {
                int ccc = EnvConfig.replace_URL.Length / EnvConfig.replace_URL.Rank;
                string[,] aaa = EnvConfig.replace_URL;
                for (int i = 0; i < ccc; i++)
                {
                    saveFileName = saveFileName.Replace(aaa[i, 0], aaa[i, 1]);
                }
            }
            
           
告别蓝牙音质妥协:用ESP32和PCM5102搭建WiFi无损音频播放器(附完整代码) 本文详细介绍了如何利用ESP32微控制器和PCM5102 DAC芯片构建一套完整的WiFi无损音频流媒体系统,彻底摆脱蓝牙协议的音质束缚。从硬件原理到软件实现,包括核心器件选型、电路设计、I2S音频驱动实现以及系统优化方案,帮助音频发烧友实现高保真无线音频传输。 阅读详情

相关推荐

解密Android相机框架:从HAL到应用层的全链路解析

本文深入解析Android相机框架的全链路架构,从应用层到硬件抽象层(HAL)再到驱动层,详细介绍了CamX-CHI架构的设计哲学与实战应用。通过HAL3接口、V4L2交互机制及Camera2 API的最佳实践,帮助开发者优化相机性能,解决多摄切换、预览卡顿等常见问题,提升成像效率与稳定性。

weixin_29238147的博客 408

IAR调试there were warnings during download, see log window.异常

简介 在iar编译器中下载程序时,弹出警告窗口⚠️there were warnings during download, see log window,随后程序工作异常,一顿操作(搜索)后找到未果,最后和硬件同事沟通找到原因,原因:芯片不匹配。 引申一 flash写保护,对于写保护可采用stm32 stvp工具解除写保护。工具学习后面再补上,先挖个坑。 引申二 遇事不要一脑子扎进去,多沟通多问问...

xiaogu0322的博客 6913

Anomalib实战:5分钟搞定图像异常检测模型训练(附完整代码)

本文提供了一份基于Anomalib框架的图像异常检测快速实战指南。文章详细介绍了从环境搭建、数据准备到模型训练与推理的完整流程,重点推荐了训练速度快、效果稳定的PatchCore模型,并附带了可运行的完整代码,旨在帮助开发者快速上手工业质检等实际应用。

weixin_29039773的博客 421

IAR中出现There were warnings:during download, see log Window的解决办法

IAR中出现There were warnings:during download, see log Window的解决办法** 在使用IAR对HT6025芯片进行仿真时提示如图所示 查看Log Window,提示Verify error at address:xxxxxx 如图所示: 在IAR中的Options->Debugger->Download界面设置如下: 取消Verify download前的✔,问题解决。 在IAR的help文件中查询Verify Dwonload,得到: 猜

Adentlyloves的博客 5090

解决uc浏览器劫持video标签问题

解决uc视频悬浮播放 ,video标签被浏览器劫持 ,vide0适配

smile_y_y的博客 3449

C#实现不占用串口的串口监听与侦听技术:高效监控串口数据的最佳实践

本文详细介绍了如何实现不占用串口的串口监听与侦听技术,解决了传统串口监听可能带来的串口占用问题。通过使用虚拟串口、外部监听工具或第三方库,我们可以高效地实现串口数据的捕获与处理,适用于各种工业控制、物联网和嵌入式开发的应用场景。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1672

IAR 里的“Download and Debug”和“Debug without Downloading”

“Download and Debug”和“Debug without Downloading”这两个按钮的区别是什么? Download and Debug:是下载代码之后再进行调试。 Debug without Downloading:只调试不下载。也就是说你之前下载过了代码,只需要再点击该按钮即可,否则会出现错误。 这两个按钮图标在编辑和调试模式下略有点差异,在调试模式下可以再次下载/

悟已往之不谏 知来者之可追 5950

向量数据库:PGVector

PGVector 是一个基于 PostgreSQL 的扩展插件,为用户提供了一套强大的向量存储和查询的功能

m0_37559973的博客 1万+

常用系统dll及下载网站

常用系统dll,类似这些(需要可以点击这里免费下载~): mfc140.dll mfc140d.dll msvcp100.dll msvcp140.dll msvcp140d.dll msvcr100.dll ucrtbased.dll vcruntime140.dll 下载网站如下: https://www.ijinshan.com/filerepair/dll.shtml 缺啥下啥,基本都能找到~ ...

u012043391的专栏 4681

MIC(Maximal Information Coefficient)最大互信息系数

MIC(Maximal Information Coefficient)最大互信息系数是一种用于衡量两个变量之间相关性的统计量。它扩展了传统的互信息(MI)和条件互信息(CMI)的概念,具有更广泛的应用范围。MIC能够捕获包括功能性和非功能性的广泛的关联,具有普遍性和公平性。普遍性意味着在足够的样本量下,MIC能够捕捉到广泛的相关关系,而不仅仅局限于特定的功能类型;公平性则意味着MIC对不同类型的包含同等噪声的关系给出了相似的分数。需要注意的是,虽然MIC具有很多优点,但它也有一些局限性。

qlkaicx的博客 4605

卫星测试科普(三):卫星载荷的核心测试设备探秘

总的说来,卫星芯片与元器件,部组件与单机,整机与子系统,系统与整星的设计、定型、制造、验证、总装、发射、在轨等环节都离不开各种测试场景,对于这些卫星测试场景而言,“射频三大件”与高速数字示波器是构成强大测试系统的基础。卫星通信信号生成:覆盖Ka、Q等波段,具备扫频、脉冲、数字调制、噪声信号、雷达信号、数据链信号、OFDM 等多种信号库,用于测试和验证卫星电子设备的电气性能、频率响应、抗干扰能力等。卫星的通信需要高效、快速地传输大量数据,高速信号的质量至关重要,如果卫星信号不佳,卫星就会出现故障或者隐患。

spwbjss的博客 2317

网站自动登陆、数据下载问题!紧急求助

各位高手,本人正在编制一个网站资料自动下载程序,程序要求如下: 1、自动登录到资料发布的网站 2、自动填写用户密码后,自动点击登陆到网站中 3、下载指定页面数据中的数据内容 不知各位高手是否能够提供解决问题的思路,感谢各位高手! 我目前已经通过webbrowse控件解决了单纯页面数据下载的问题,但是自动点击登陆问题还没有解...

aibi9196的博客 241

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

君逍遥o 408

linux下面下载整个网站

linux下可以用wget下载整个网站,而且网站链接中包含utf-8编码的中文也能正确处理。 简要方法记录如下: wget --restrict-file-name=ascii -m -c -nv -np -k -E -p -R=exe,zip http://www.xxx.com 参数释义如下: --restrict-file-name=ascii ,将文件名保存为ASCII格式。这样能

qq_21764267的博客 904

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python下载整个网站_python 下载整个站点

用python实现的下载整个站点工具。核心流程非常easy:1. 输入站点地址2. url。得到响应的内容。3. 依据响应的http报文头,假设类型为html, 则从第4步開始运行。假设是其他类型,则从第6步运行。4. 提取html中href和src属性值。5. 将提取到的url,增加下载队列中。假设url已经存在于下载队列中,则丢弃它。6. 再然后打开url队列中下一个url。7.继续循环运行第...

weixin_39922534的博客 1262

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python 自动下载脚本之家,用Python自动下载网站所有文件

最近维基 jie mi 彻底公开了网站的全部文件,我就在想如何使用 Python 将其下载到本地永久保存,于是就有了这篇文章,写爬虫会遇到很多坑,借鉴他人经验,考虑越全面,出错的概率就越小。假如一个网站,里面有很多链接,有指向文件的,有指向新链接的,新的链接点击进去后,仍然是有指向文件的,有指向新链接的,类似一个文件夹,里面即有文件,又有目录,目录中又有文件和目录。如何从这样的网站上下载所有的文件...

weixin_39606019的博客 716

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python网站下载_python 下载整个网站

用python实现的下载整个网站工具。核心流程很简单:1. 输入网站地址2. url,得到响应的内容。3. 根据响应的http报文头,如果类型为html, 则从第4步开始执行。如果是其它类型,则从第6步执行。4. 提取html中href和src属性值。5. 将提取到的url,加入下载队列中。如果url已经存在于下载队列中,则丢弃它。6. 再然后打开url队列中下一个url。7.继续循环执行第2步,...

weixin_31366459的博客 1145

python会自动保存吗_自动下载并保存博客 Python脚本

谢了一个自动下载指定人的博客的脚本这个脚本是用来下载csdn博客的同样的方法可以下载一般其他网站的博客,如sina有时页面访问会被拒绝,重新运行即可这种程序是在分析了指定网站,我在这儿是csdn,之后编写出的会牵涉到网页的编码问题,有时程序运行会因此终止我自己的博客已经下载忘了只是下载网页使用网页分析后可以整理出文章,那样更实用##blogdownloader_csdn.py#@Author:on...

weixin_39528029的博客 301

网站程序(案例)

Insus.NET分享一个案例网站程序。程序中95%的功能添加与设置在后台管理平台进行,剩余的5%就是前台网页的自定义设计。程序是使用.NET Framework 4.0 + ASP.NET + MS SQL Server 2008 R2 + VB.NET进行开发。功能与特色:文章编辑器使用:CuteEditor 。如果你在运行时,出现license的问题时,如下图:可以从官网上下载,然后覆盖BI...

weixin_34018202的博客 80

android调用python模块_使用Python下载某个Android模块源码

个人感觉Android源码是学习Android开发的最好资料,在这里首先推荐两个看Android源码的网站:androidosandroidxref两个网站的内容都差不多,其中androidos的排版比较舒服,还进行了热门模块的索引,可以很方便的下载某些文件,但是下载整个模块时候就比较坑了,比如下载Music模块时,如图只有8kb,明显这个网站自带的下载只是下载了一级目录下的内容,没有递归下载深层...

weixin_39634067的博客 229

【网站环境搭建】

一、前提准备   本地搭建一个网站都需要哪些基本元素,以及这些元素都有什么作用?在这里小编直接给站长朋友列出来通俗讲解:   1、 Apache服务器:一个很牛逼的web服务器,类似于windows环境下的IIS服务器,它就像一个容器,web应用程序放进去之后,用户就可以通过浏览器去访问指定目录的网站与其交互;   2、 Php:中文名字,超文本预处理器,依托于web服务器,用来解析使用php语言编写的网页程序,使网页呈现为咱们日常接触到的html页面;   3、 Mysql数据库,这个不多说,用来存储网站

m0_74894688的博客 425

记录一个好用的程序图标制作工具

快速制作程序图标,多分辨率支持,绿色操作简单的好工具分享。

u012505629的博客 654

天呐?发现一个媲美 “百度” 的程序员网站

目录有人会问:这样子有什么不好?程序员盒子宝藏功能一:非常全面的编程导航宝藏功能二:人性化设计&高可配置人气功能:C圈热门功能:IData,免费开放的数据接口宝藏功能N:瑞索斯宝藏功能N+1 在日常办公、生活中我们会收藏很多网页、编程工具、学习资料等网站,时间一长基本上也都石沉大海,每当需要的时候又需要重新去百度,一个上午开发下来大部分人都是这样子的(堆了一堆新开页,下次又是如此): 有人会问:这样子有什么不好? 很不好、非常不好!长时间下来你会发现很多的时间其实在不断的百度重复的内容、然后又再.

学Java,找哪吒 1万+

一个有情怀的PPT模板下载网站

关于我 文章首发 | 我的博客 | 欢迎关注 引言 俗话说 工作累死累活,不如PPT做得好! 大家在工作的过程中,总会碰到会议总结,年终汇报,技术分享等等这些需要进行展示的场景,而这种场景下的输出物肯定包含PPT。 一份好的PPT可以让领导看清楚我们想要表达的重点,让乙方了解具体的里程碑和事件。当然!!!,一份差的PPT也会让你们很多努力毁于一旦,因为别人不能从你的汇报中看明白你做了什么,这和你没做又有什么不一样——如果领导不认可。 那么怎么样才能够写出一份优秀的PPT呢?我作为一个从业几年的小菜鸟当然不

三十三重天的博客 2773

快速下载一个网站

有时候我们需要分析一个网站,或者基于一个网站进行魔改,这个就需要一些特殊的手段将网站源码下载到本地了,其实目前大部分网站都是有代码压缩的,很难去有修改。 这里我就教大家如何快速获取一个网站的所有资源,包括源码,图片,js,css。 以这个页面为例 https://loading.io/spinner/ 这个页面所显示的图标都是付费的,但我们可以通过一些简单的手段将所有资源下载到本地。其实这并不是什么神奇的技能,有需求,就有供应,就有牛逼的程序来教你做事。 第一种CTRL+S 浏览器打开https://lo

知无涯 7314
上一篇: 安装了360安全卫士和瑞星杀毒,看迅雷电影很卡,谁有知道的
bbwolfcool
博客等级 码龄24年 6粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值