找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 70283|回复: 17

[文本处理] 批处理如何从多个htm文件中提取有规则url?

[复制链接]
发表于 2011-7-10 05:44:30 | 显示全部楼层 |阅读模式
求助,求助,

有多个*.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
发表于 2011-7-10 10:21:05 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2011-7-10 10:38:50 | 显示全部楼层
  1. sed "/a href=.* target=.*img/!d; s/.*a href="\(.*\)" target=.*/\1/" *.htm >b.txt
复制代码
发表于 2011-7-10 11:13:12 | 显示全部楼层

  1. @echo off
  2. (for /f tokens^=2delims^=^" %%i in ('Findstr /c:"<a href" *.htm') do echo %%i)>1.txt
复制代码
发表于 2011-7-10 11:47:46 | 显示全部楼层
4# lvsehuaxue


htm文件里面肯定有很多a href,findstr里面需要再加点条件。
发表于 2011-7-10 11:47:57 | 显示全部楼层
本帖最后由 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友情提醒"
复制代码
 楼主| 发表于 2011-7-10 12:12:51 | 显示全部楼层
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



没有输出?
 楼主| 发表于 2011-7-10 12:16:52 | 显示全部楼层
@echo off
(for /f tokens^=2delims^=^" %%i in ('Findstr /c:"1.txt

lvsehuaxue 发表于 2011-7-10 11:13



主要是后缀要符合后面这个条件: target="_blank"><img

这句怎么写呢?
还有运行起来怎么只能一个htm文件有效,多个就无效喽。
发表于 2011-7-10 12:32:17 | 显示全部楼层
8# wrrbb
本想简化下正则,谁知道出错,已修改回来,我的bat版试了没有?
发表于 2011-7-10 12:43:54 | 显示全部楼层
本帖最后由 ArdentMan 于 2011-7-10 12:45 编辑

8# wrrbb
应该是因为你的htm文件名中有空格的原因

二楼代码已修改,也是为了简化代码是少写一个~字符
发表于 2011-7-10 12:59:52 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2011-7-10 13:08:06 | 显示全部楼层
@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文件。
目前就只有四楼的可以哦。
发表于 2011-7-10 13:59:49 | 显示全部楼层
请楼主在顶楼给出htm文本格式以调试代码啊
 楼主| 发表于 2011-7-10 16:07:49 | 显示全部楼层

如何提取中间的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
发表于 2011-7-10 16:31:47 | 显示全部楼层
这个问题和楼主的另一个帖子有何本质区别呢?在那个帖子里大家好像都给出可行的答案了吧?貌似没必要另发一贴。
http://bbs.bathome.net/thread-13198-1-1.html
楼主若能给出合理的解释,二话不说撤销扣分
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:34 , Processed in 0.025576 second(s), 10 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表