[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样从多个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 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. grep -h -o "http:.*\.swf" *.shtml | more >1.txt
复制代码

TOP

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  1. 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 编辑 ]

TOP

回复 2楼 的帖子

不知是否版本问题,运行兄台的代码似乎有很多冗余的内容。俺不太会用grep,一般直接用sed。
  1. sed "s/\x22/\n/g" *.shtml | grep "^http.*zhuanti.*swf$"
复制代码

[ 本帖最后由 asnahu 于 2011-1-9 13:25 编辑 ]

TOP

之前少了一个双引号。。现在加上去了。

TOP

回复 5楼 的帖子

我用的这个版本:

C:\Test>grep --version
grep (GNU grep) 2.5.1

TOP

回复 9楼 10楼 11楼

用4楼 9楼的方法解决了,谢谢大家。

回2楼CUer:
我也是用的grep (GNU grep) 2.5.1这个版本,生成的txt有很多冗余的内容。

回4楼 11楼 tmplinshi:可以了。
  1. type "*.shtml" | geturls /e:"'" | findstr /i "\.swf$" >swf_list.txt
复制代码
回5楼asnahu :
可以了,不过每一个网址后面都多了一个黑色方块,不知道怎么去掉,不过对导入迅雷没有影响。稍微改了一下?
  1. sed "s/\x22/\n/g" *.shtml | grep "^http.*swf$"  >2.txt
复制代码
每一个swf都会找到的几个相同的网址,怎么删掉多余的?还有最后$有什么用?

回9楼Batcher可以了,去掉了黑色方块。
  1. sed "s/\x22/\n/g" *.shtml | grep "^http.*swf$" | more >2.txt
复制代码

需要同时下sed.exe和grep两个文件




不过有一个问题,用4楼的方法得到的文本每一个网址会出现5次,用9楼的方法得到的文本同一个网址出现3次。
回10楼:是这样用吗?
  1. sed "s/\x22/\n/g" *.shtml | grep "^http.*swf$" | more >2.txt
  2. 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 编辑 ]

TOP

回复 8楼 的帖子

这样行吗?
  1. sed "s/\x22/\n/g" *.shtml | grep "^http.*swf$" | more >2.txt
复制代码
$是正则表达式里面的,代表行尾。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

一般来说,直接用wget的-nc(skip downloads that would download to existing files.)参数直接过滤掉重复下载的内容,或者使用sed的高级命令:
  1. sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'
复制代码

此命令太高级,俺解释不清。-_-!

TOP

回复 8楼 的帖子

用非 IE 内核浏览器(chrome 和 Opera)编辑帖子时,切换了下“Discuz! 代码模式”和“所见即所得模式”,就出现了很多乱码。。正确的代码是这样的:
  1. type "*.shtml" | geturls /e:"'" | findstr /i "\.swf$" >swf_list.txt
复制代码

TOP

刚刚测试下面代码可以做到删除相同行:
  1. @echo off
  2. echo 正在查找文本相同行,请等待.....
  3. (echo 清除重复行后的文件内容:& echo.)>str_.txt
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%i in (2.txt) do (
  6.     if not defined %%i set %%i=A & echo %%i>>str_.txt)
  7. echo 清理完毕,清理后的文件保存在:str_.txt
  8. pause>nul
复制代码

TOP

返回列表