标题: [文本处理] 如何提取网页中的ed2k链接并将链接中的文件大小转换后添加到链接中的文件名前 [打印本页]
作者: 3518228042 时间: 2017-4-30 23:39 标题: 如何提取网页中的ed2k链接并将链接中的文件大小转换后添加到链接中的文件名前
本帖最后由 pcl_test 于 2017-5-1 01:43 编辑
网页里面有很多ed2k结构是这样的,直接保存下来了:- <a href="ed2k://|file|Donkey%20Kong%2064%20(U)%20(Kiosk%20Demo)%20[b2].z64|25165824|3CF27324022C858374E0E9A7ADADF996|h=ZQBPPEFMIO5SJ6PMJWAJVDCWB4QUFP4J|/">Donkey Kong 64 (U) (Kiosk Demo) [b2]</a><br />
复制代码
这样的连接不能在网页上复制下来,而这样的就能直接复制下来了保存为txt了,下面的纯数字25165824就是容量大小- ed2k://|file|Donkey Kong 64 (U) (Kiosk Demo) [b2].z64|25165824|3CF27324022C858374E0E9A7ADADF996|/
复制代码
我需要的是把网页上面的ed2k长连接提取出来变成ed2k短连接,提取保存为txt文件后进行替换,并且为ed2k的文件名前面添加[容量],小数点后面保留1位,最终效果:- ed2k://|file|[25.1MB]Donkey Kong 64 (U) (Kiosk Demo) [b2].z64|25165824|3CF27324022C858374E0E9A7ADADF996|/
复制代码
这个是我在论坛搜索的相关,只能把这个连接添加个容量,但是怎么把网页里面的先提取出来再进行替换呢?- //&cls&dir /b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
-
- function reStr(file){
- var f = fso.opentextfile(file, 1);
- str = f.ReadAll()
- .replace(/(ed2k:\/\/\|file\|)((?!\[\d+\.\dKB\]).+\|)([0-9]{1,3})([0-9])([0-9]{2}\|[a-z0-9A-Z]{32}\|\/)/g, '$1[$3.$4KB]$2$3$4$5')
- .replace(/(ed2k:\/\/\|file\|)((?!\[\d+\.\dMB\]).+\|)([0-9]{1,3})([0-9])([0-9]{5}\|[a-z0-9A-Z]{32}\|\/)/g, '$1[$3.$4MB]$2$3$4$5')
- .replace(/(ed2k:\/\/\|file\|)((?!\[\d+\.\dGB\]).+\|)([0-9]{1,3})([0-9])([0-9]{7}\|[a-z0-9A-Z]{32}\|\/)/g, '$1[$3.$4GB]$2$3$4$5');
- f.Close();
- var f = fso.opentextfile(file, 2);
- f.Write(str);
- }
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- while(!WScript.StdIn.AtEndOfStream)reStr(WScript.StdIn.ReadLine());
复制代码
我需要的是先把网页里面的ed2k提取出来保存,然后再替换,一个bat一步到位,这个只能替换txt,而网页一般是html和htm的
作者: pcl_test 时间: 2017-5-1 15:07
本帖最后由 pcl_test 于 2017-5-2 18:54 编辑
- @echo off
- powershell ^
- Function FormatSize($s){^
- if($s -lt 1024){^
- return $s.toString('f1')+'B';^
- }elseif($s -lt 1048576){^
- return ($s/1kb).toString('f1')+'KB';^
- }elseif($s -lt 1073741824){^
- return ($s/1mb).toString('f1')+'MB';^
- }else{return ($s/1gb).toString('f1')+'GB';}^
- };^
-
- $web=new-object System.Net.WebClient;^
- $web.Encoding = [System.Text.Encoding]::UTF8;^
- $txt=$web.DownloadString('http://cn163.net/archives/23809/');^
- $m=[Regex]::Matches($txt, 'ed2k:\/\/\^|file\^|.+?\^|\/');^
- [void][System.Reflection.Assembly]::LoadWithPartialName('System.Web');^
- $m^|%%{$url=[System.Web.HttpUtility]::UrlDecode($_.value,[System.Text.Encoding]::UTF8);^
- $tmp=$url.split('^|');^
- $size='['+(FormatSize (1*$tmp[3]))+']';^
- '原链接:'+$_.value;^
- '长链接:'+$url -replace '(?^<=^^.+?\^|file\^|)',$size;^
- '短链接:'+(@($tmp[0], $tmp[1], ($size+$tmp[2]), $tmp[3], $tmp[4]) -join '^|')+\"|/`r`n\";^
- }
- pause
复制代码
作者: 3518228042 时间: 2017-5-1 15:25
本帖最后由 3518228042 于 2017-5-1 15:32 编辑
多个htm和html网页,有文件大小情况下,文件大小出现了重复。[786.4KB][786.4KB]- <a href="ed2k://|file|[786.4KB]SRAM%20Manager%20V2.0%20(PD)%20[a1].z64|786432|77B13047C64522DAE779A81B02F3D064|h=YATOBQYUSJORDPRNRAAMHZJKLMFTQYXZ|/">[786.4KB]SRAM Manager V2.0 (PD) [a1]</a><br />
复制代码
我想把所有网页的ed2k提取后各自保存为txt,然后只对txt进行替换,这个可以吗?方便用于批量下载和以后发帖分享
作者: 3518228042 时间: 2017-5-1 15:58
不知道为什么搜索很多修复方法试了,就是不能用,我记得前阵子还能用
作者: 3518228042 时间: 2017-5-1 20:06
还是没能提取后批量保存为txt,只能在命令窗口显示
作者: ShowCode 时间: 2017-5-1 20:32
回复 5# 3518228042
有可能是PATH环境变量被修改了,在CMD窗口执行这个命令看看结果:复制代码
作者: 3518228042 时间: 2017-5-2 18:05
解决了powershell,发现也是有长链接,本来标题里面有写各自保存为txt,被盖后表达的意思变了。
因为从几个ed2k网站下载了几百个网页,电影、电视剧和游戏,一个个网页单独保存能分辨,合一起不容易区分
作者: 老刘1号 时间: 2017-5-2 20:01
回复 6# ShowCode
直接Path就行
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |