Board logo

标题: [文本处理] 批处理如何从多个htm文件中提取有规则url? [打印本页]

作者: wrrbb    时间: 2011-7-10 05:44     标题: 批处理如何从多个htm文件中提取有规则url?

求助,求助,

有多个*.htm文件,现要从中提取所需的URL。
如下
  1. <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 编辑
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "tokens=4-8 delims==<>: " %%a In ('Findstr /c:"<a href" *.htm') Do (
  3.   If /i "%%~a%%d%%~e" EQU "httptarget_blank" Set "Str=%%a:%%b=%%c"&Echo !Str:~1,-1!
  4. ))>1.txt
  5. Start 1.txt
复制代码

作者: CUer    时间: 2011-7-10 10:38

  1. sed "/a href=.* target=.*img/!d; s/.*a href=\"\(.*\)\" target=.*/\1/" *.htm >b.txt
复制代码

作者: lvsehuaxue    时间: 2011-7-10 11:13

  1. @echo off
  2. (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正则提取
  1. Dim FSO, Path, vbStr, File, REGEX, OutStr
  2. Path = CreateObject("Wscript.Shell").CurrentDirectory
  3. Set FSO = CreateObject("Scripting.FileSystemObject")
  4. For Each File In FSO.GetFolder(Path).Files
  5.   If LCase(FSO.GetExtensionName(File)) = "htm" Then
  6.     vbStr = vbStr & FSO.OpenTextFile(File).ReadAll() & vbCrLf
  7.   End If
  8. Next
  9. Set REGEX = New RegExp
  10. REGEX.Global = True
  11. REGEX.IgnoreCase = True
  12. REGEX.Pattern = ".*?<a href=\x22([^<>\s\x22]+)?\x22 target=\x22_blank\x22>.*?\r\n"
  13. OutStr = REGEX.Replace(vbStr, "$1" & vbCrLf)
  14. FSO.OpenTextFile("1.txt", 2, True).Write OutStr
  15. Set FSO = Nothing
  16. Set REGEX = Nothing
  17. 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 编辑
  1. @echo off
  2. 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

  1. <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
  1. sed "s/.*>\(http:.*\)<.*/\1/" a.htm
复制代码

作者: Hello123World    时间: 2011-7-11 13:16

  1. @echo off
  2. (for /f "delims=" %%i in ('findstr /c:"a href" *.html') do (
  3. for /f tokens^=2^ delims^=^" %%a in ("%%i") do echo %%a)
  4. )>3.txt
  5. pause>nul
复制代码
再次用zm的研究成果——"作为分隔符。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2