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

[文本处理] 批处理如何从多个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 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
复制代码
一路飘过的鸟~~~

TOP

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

TOP

  1. @echo off
  2. (for /f tokens^=2delims^=^" %%i in ('Findstr /c:"<a href" *.htm') do echo %%i)>1.txt
复制代码

TOP

4# lvsehuaxue


htm文件里面肯定有很多a href,findstr里面需要再加点条件。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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友情提醒"
复制代码
一路飘过的鸟~~~

TOP

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



没有输出?

TOP

@echo off
(for /f tokens^=2delims^=^" %%i in ('Findstr /c:"1.txt

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



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

这句怎么写呢?
还有运行起来怎么只能一个htm文件有效,多个就无效喽。

TOP

8# wrrbb
本想简化下正则,谁知道出错,已修改回来,我的bat版试了没有?
一路飘过的鸟~~~

TOP

本帖最后由 ArdentMan 于 2011-7-10 12:45 编辑

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

二楼代码已修改,也是为了简化代码是少写一个~字符
一路飘过的鸟~~~

TOP

本帖最后由 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
复制代码

TOP

@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文件。
目前就只有四楼的可以哦。

TOP

请楼主在顶楼给出htm文本格式以调试代码啊
一路飘过的鸟~~~

TOP

如何提取中间的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

TOP

这个问题和楼主的另一个帖子有何本质区别呢?在那个帖子里大家好像都给出可行的答案了吧?貌似没必要另发一贴。
http://bbs.bathome.net/thread-13198-1-1.html
楼主若能给出合理的解释,二话不说撤销扣分

TOP

返回列表