标题: [文本处理] [已解决]批处理怎样从多个shtml文件中提取swf文件网址? [打印本页]
作者: liuxi001 时间: 2011-1-8 03:46 标题: [已解决]批处理怎样从多个shtml文件中提取swf文件网址?
从学习网站下载视频教程,下下来的全是shtml文件,这些文件里面有swf格式视频的网址。怎么从几百个shtml文件里面提取全部的swf视频网址呢
谢谢2楼和3楼的朋友,通过你们的帮助,我得到了文本1.txt。但是文本里面的内容很杂,导入到迅雷只提示有类似“http://www.enet.com.cn/eschool/inforcenter/article.jsp?articleid=20040421304259”的网页文件,swf视频网址导不进来。
能不能只提取的swf网址,像下面这样
http://myarticle.enet.com.cn/images/200409/1094549986327.swf
http://www.enet.com.cn/eschool/includes/zhuanti/ps/flash/k/02.swf
http://www.enet.com.cn/eschool/includes/zhuanti/ps/flash/m/02.swf
上传一个shtml文件样本,网站不能上传shtml,扩展名改成txt了。1.txt也上传了。(附件shtml文件大了,我上传前面一部分吧)
感谢大家热心帮忙!
[ 本帖最后由 liuxi001 于 2011-1-10 20:24 编辑 ]
作者: CUer 时间: 2011-1-8 12:05
- grep -h -o "http:.*\.swf" *.shtml | more >1.txt
复制代码
作者: hanyeguxing 时间: 2011-1-8 13:30
grep下载地址:http://bbs.bathome.net/attachment.php?aid=1468
作者: tmplinshi 时间: 2011-1-8 19:19
- type "*.shtml" | geturls /e:"'" | findstr /i "\.swf$" >swf_list.txt
复制代码
geturls.exe 下载:
http://bathome.net/thread-10581-1-1.html
geturls.exe 是以 空格、英文双引号、>、< 这四个作为网址的结束分隔符。
如果还有其他分隔符,用 /e:"分隔符" 来指定。例如添加单引号和竖线: /e:"'|"
[ 本帖最后由 tmplinshi 于 2011-1-9 19:14 编辑 ]
作者: asnahu 时间: 2011-1-8 23:49 标题: 回复 2楼 的帖子
不知是否版本问题,运行兄台的代码似乎有很多冗余的内容。俺不太会用grep,一般直接用sed。- sed "s/\x22/\n/g" *.shtml | grep "^http.*zhuanti.*swf$"
复制代码
[ 本帖最后由 asnahu 于 2011-1-9 13:25 编辑 ]
作者: tmplinshi 时间: 2011-1-9 07:43
之前少了一个双引号。。现在加上去了。
作者: CUer 时间: 2011-1-9 11:13 标题: 回复 5楼 的帖子
我用的这个版本:
C:\Test>grep --version
grep (GNU grep) 2.5.1
作者: liuxi001 时间: 2011-1-9 15:36 标题: 回复 9楼 10楼 11楼
用4楼 9楼的方法解决了,谢谢大家。
回2楼CUer:
我也是用的grep (GNU grep) 2.5.1这个版本,生成的txt有很多冗余的内容。
回4楼 11楼 tmplinshi:可以了。- type "*.shtml" | geturls /e:"'" | findstr /i "\.swf$" >swf_list.txt
复制代码
回5楼asnahu :
可以了,不过每一个网址后面都多了一个黑色方块,不知道怎么去掉,不过对导入迅雷没有影响。稍微改了一下?- sed "s/\x22/\n/g" *.shtml | grep "^http.*swf$" >2.txt
复制代码
每一个swf都会找到的几个相同的网址,怎么删掉多余的?还有最后$有什么用?
回9楼Batcher:可以了,去掉了黑色方块。
- sed "s/\x22/\n/g" *.shtml | grep "^http.*swf$" | more >2.txt
复制代码
需要同时下sed.exe和grep两个文件
不过有一个问题,用4楼的方法得到的文本每一个网址会出现5次,用9楼的方法得到的文本同一个网址出现3次。
回10楼:是这样用吗?
- sed "s/\x22/\n/g" *.shtml | grep "^http.*swf$" | more >2.txt
- sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'
复制代码
我试了没有效果。
我完全不懂批处理,你说的直接用wget的-nc(skip downloads that would download to existing files.)参数直接过滤掉重复下载的内容,也不知道该怎么做。
还想请问一下,如果下载下来的是.html .htm或者.txt类型的文件可不可以直接套用上面的代码呀?
[ 本帖最后由 liuxi001 于 2011-1-9 22:25 编辑 ]
作者: Batcher 时间: 2011-1-9 15:53 标题: 回复 8楼 的帖子
这样行吗?- sed "s/\x22/\n/g" *.shtml | grep "^http.*swf$" | more >2.txt
复制代码
$是正则表达式里面的,代表行尾。
作者: asnahu 时间: 2011-1-9 18:08
一般来说,直接用wget的-nc(skip downloads that would download to existing files.)参数直接过滤掉重复下载的内容,或者使用sed的高级命令:
- sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'
复制代码
此命令太高级,俺解释不清。-_-!
作者: tmplinshi 时间: 2011-1-9 19:20 标题: 回复 8楼 的帖子
用非 IE 内核浏览器(chrome 和 Opera)编辑帖子时,切换了下“Discuz! 代码模式”和“所见即所得模式”,就出现了很多乱码。。正确的代码是这样的:- type "*.shtml" | geturls /e:"'" | findstr /i "\.swf$" >swf_list.txt
复制代码
作者: liuxi001 时间: 2011-1-9 22:34
刚刚测试下面代码可以做到删除相同行:- @echo off
- echo 正在查找文本相同行,请等待.....
- (echo 清除重复行后的文件内容:& echo.)>str_.txt
-
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (2.txt) do (
- if not defined %%i set %%i=A & echo %%i>>str_.txt)
-
- echo 清理完毕,清理后的文件保存在:str_.txt
- pause>nul
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |