标题: [文本处理] 批处理如何从多个htm文件中提取有规则url? [打印本页]
作者: wrrbb 时间: 2011-7-10 05:44 标题: 批处理如何从多个htm文件中提取有规则url?
求助,求助,
有多个*.htm文件,现要从中提取所需的URL。
如下- <a href="http://item.taobao.com/item.htm?id=8099035641" target="_blank"><img
复制代码
我要提取其中的http://item.taobao.com/item.htm?id=8099035641
然后一行一条放入1.txt文件内
现知,只要符合这个正则表达式<a href="(.+?)" target="_blank"><img 都是需要的URL。
怎么写bat,我看了半天看不懂。T_T
作者: ArdentMan 时间: 2011-7-10 10:21
本帖最后由 ArdentMan 于 2011-7-10 12:41 编辑
- @Echo Off&SetLocal EnableDelayedExpansion
- (For /F "tokens=4-8 delims==<>: " %%a In ('Findstr /c:"<a href" *.htm') Do (
- If /i "%%~a%%d%%~e" EQU "httptarget_blank" Set "Str=%%a:%%b=%%c"&Echo !Str:~1,-1!
- ))>1.txt
- Start 1.txt
复制代码
作者: CUer 时间: 2011-7-10 10:38
- sed "/a href=.* target=.*img/!d; s/.*a href=\"\(.*\)\" target=.*/\1/" *.htm >b.txt
复制代码
作者: lvsehuaxue 时间: 2011-7-10 11:13
- @echo off
- (for /f tokens^=2delims^=^" %%i in ('Findstr /c:"<a href" *.htm') do echo %%i)>1.txt
复制代码
作者: Batcher 时间: 2011-7-10 11:47
4# lvsehuaxue
htm文件里面肯定有很多a href,findstr里面需要再加点条件。
作者: ArdentMan 时间: 2011-7-10 11:47
本帖最后由 ArdentMan 于 2011-7-10 12:31 编辑
vbs正则提取- Dim FSO, Path, vbStr, File, REGEX, OutStr
- Path = CreateObject("Wscript.Shell").CurrentDirectory
- Set FSO = CreateObject("Scripting.FileSystemObject")
- For Each File In FSO.GetFolder(Path).Files
- If LCase(FSO.GetExtensionName(File)) = "htm" Then
- vbStr = vbStr & FSO.OpenTextFile(File).ReadAll() & vbCrLf
- End If
- Next
- Set REGEX = New RegExp
- REGEX.Global = True
- REGEX.IgnoreCase = True
- REGEX.Pattern = ".*?<a href=\x22([^<>\s\x22]+)?\x22 target=\x22_blank\x22>.*?\r\n"
- OutStr = REGEX.Replace(vbStr, "$1" & vbCrLf)
- FSO.OpenTextFile("1.txt", 2, True).Write OutStr
- Set FSO = Nothing
- Set REGEX = Nothing
- MsgBox "提取完成!", , "ArdentMan友情提醒"
复制代码
作者: wrrbb 时间: 2011-7-10 12:12
vbs正则提取
Dim FSO, Path, vbStr, File, REGEX
Path = CreateObject("Wscript.Shell").CurrentDirectory
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each File In FSO.GetFolder(Path).Files
...
ArdentMan 发表于 2011-7-10 11:47
没有输出?
作者: wrrbb 时间: 2011-7-10 12:16
@echo off
(for /f tokens^=2delims^=^" %%i in ('Findstr /c:"1.txt
lvsehuaxue 发表于 2011-7-10 11:13
主要是后缀要符合后面这个条件: target="_blank"><img
这句怎么写呢?
还有运行起来怎么只能一个htm文件有效,多个就无效喽。
作者: ArdentMan 时间: 2011-7-10 12:32
8# wrrbb
本想简化下正则,谁知道出错,已修改回来,我的bat版试了没有?
作者: ArdentMan 时间: 2011-7-10 12:43
本帖最后由 ArdentMan 于 2011-7-10 12:45 编辑
8# wrrbb
应该是因为你的htm文件名中有空格的原因
二楼代码已修改,也是为了简化代码是少写一个~字符
作者: lvsehuaxue 时间: 2011-7-10 12:59
本帖最后由 lvsehuaxue 于 2011-7-10 13:23 编辑
- @echo off
- for %%a in (*.mtl) do for /f tokens^=2delims^=^" %%i in ('findstr /r ".* target=\"_blank\"><img" "%%a"') do echo %%i
复制代码
作者: wrrbb 时间: 2011-7-10 13:08
@echo off
(for /f tokens^=2delims^=^" %%i in ('Findstr /c:"1.txt
lvsehuaxue 发表于 2011-7-10 11:13
哦,多少文件都行,刚才我设置错误了,呵呵,现在可以了,但是就是提取出来的,比目标的多,因为我后面需要一个必要条件,后面跟着 target="_blank"><img
这个不知道怎么加。。。
2楼和6楼的,我都试了,2楼的出来就把整个文件用txt格式又重新输出了,6楼输出空白的txt文件。
目前就只有四楼的可以哦。
作者: ArdentMan 时间: 2011-7-10 13:59
请楼主在顶楼给出htm文本格式以调试代码啊
作者: wrrbb 时间: 2011-7-10 16:07 标题: 如何提取中间的URL
- <textarea wrap="hard" cols="70" rows="6" readonly="readonly" onclick="this.select();" id="txt_urlcode" name="foroverflow">http://www.taobao.com/t_1?i=qXssIzFlOef33HI%3D&p=12_10011550_0_0&n=11</textarea>
复制代码
要提取中间的URL,怎么实现呢?
http://www.taobao.com/t_1?i=qXss ... 011150_0_0&n=11
作者: CrLf 时间: 2011-7-10 16:31
这个问题和楼主的另一个帖子有何本质区别呢?在那个帖子里大家好像都给出可行的答案了吧?貌似没必要另发一贴。
http://bbs.bathome.net/thread-13198-1-1.html
楼主若能给出合理的解释,二话不说撤销扣分
作者: wrrbb 时间: 2011-7-10 21:31
15# zm900612
用同样的方法,我试了,提取不了我另外一个帖子发的内容。
作者: CUer 时间: 2011-7-10 21:38
14# wrrbb - sed "s/.*>\(http:.*\)<.*/\1/" a.htm
复制代码
作者: Hello123World 时间: 2011-7-11 13:16
- @echo off
- (for /f "delims=" %%i in ('findstr /c:"a href" *.html') do (
- for /f tokens^=2^ delims^=^" %%a in ("%%i") do echo %%a)
- )>3.txt
- pause>nul
复制代码
再次用zm的研究成果——"作为分隔符。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |