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

[文本处理] [已解决]如何根据txt文件中的关键字提取html文件中的网址

[复制链接]
发表于 2011-5-31 20:16:55 | 显示全部楼层 |阅读模式
如何根据txt文件中的关键字提取html文件中的网址
a.txt为关键字,要提取cs.html中关键字左边的网址,各位有什么好方法.

补充说明:用 sed 等第三方也可以

a.txt

  1. 前扑后继
  2. 太紧
  3. 亚克西填词大赛
  4. 春天的故事
  5. 答记者问--送点土特产…
  6. 感谢你,孔子
  7. 海豚湾
复制代码
cs.html

评分

参与人数 1PB +2 收起 理由
zm900612 + 2 例行公事...

查看全部评分

 楼主| 发表于 2011-5-31 21:05:20 | 显示全部楼层
用 sed 等第三方也可以
发表于 2011-5-31 21:41:26 | 显示全部楼层
  1. @echo off
  2. cd.>b.txt
  3. for /f "delims=" %%a in (a.txt) do (
  4.     sed -n "s/.*<a href="\^(.*\^)" target=.*title="%%a".*/\1/p" cs.html | more >>b.txt
  5. )
复制代码
http://bbs.bathome.net/thread-3981-1-1.html

评分

参与人数 1技术 +1 收起 理由
zm900612 + 1 boss出手了

查看全部评分

 楼主| 发表于 2011-5-31 22:03:46 | 显示全部楼层
3# Batcher

漏掉了第5个,是什么原因??
发表于 2011-5-31 22:07:46 | 显示全部楼层
4# 随风
  1. @echo off
  2. cd.>b.txt
  3. for /f "delims=" %%a in (a.txt) do (
  4.     sed -n "s/.*<a href="\^(.*\^)" target=.*title=.*%%a.*/\1/p" cs.html | more >>b.txt
  5. )
复制代码

评分

参与人数 1技术 +1 收起 理由
随风 + 1 谢谢!

查看全部评分

发表于 2011-5-31 22:08:21 | 显示全部楼层
4# 随风


关键词含通配
发表于 2011-5-31 22:11:21 | 显示全部楼层
效率低下

  1. @ECHO OFF
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. FOR /F %%i IN (a.txt) DO (
  4.     FOR /F "delims=" %%j IN ('FINDSTR /R "%%i" cs.html') DO (
  5.         SET html=%%j
  6.         SET html=!html:^<=!
  7.         SET html=!html:^>=!
  8.         FINDSTR /R "%%i" !html! 2> error.txt
  9.         FOR /F "delims=" %%k IN (error.txt) DO (
  10.             SET /A line += 1
  11.             SET arr[!line!]=%%k
  12.             ECHO %%k | FINDSTR /R "%%i" > NUL && ( SET /A line -= 2 & CALL ECHO %%i %%arr[!line!]:~26%% )
  13.         )
  14.     )
  15. )
  16. DEL error.txt & PAUSE
复制代码

评分

参与人数 1PB +2 收起 理由
tmplinshi + 2 乐于助人

查看全部评分

发表于 2011-6-1 01:17:12 | 显示全部楼层
本帖最后由 batman 于 2011-6-1 02:03 编辑

正则搞死人,replace死都搞不定,只好用execute方法了:

  1. Dim regex, fso, vbstr, regstr, vbout
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. vbstr = fso.OpenTextFile("cs.html", 1).ReadAll()
  4. regstr = replace("(" & Replace(fso.OpenTextFile("a.txt", 1).ReadAll(), vbCrLf, "|") & ")", "…", "")
  5. RegExptest vbstr
  6. fso.OpenTextFile("url.txt", 2, 1).Write vbout
  7. Set fso = Nothing

  8. Function RegExptest(rgstr)
  9.   Dim match
  10.   Set regex = New RegExp
  11.   regex.Global = True
  12.   regex.IgnoreCase = True
  13.   regEx.pattern = "<a\s+[.\n]*?href=""(\w+://[^:\s]+)?""[^<>]+""" & regstr & """>"
  14.   For Each match In regex.Execute(rgstr)
  15.     vbout = vbout & match.Submatches(0) & vbCrLf
  16.   Next
  17.   Set regex = Nothing
  18. End Function
复制代码
发表于 2011-6-1 01:48:44 | 显示全部楼层
本帖最后由 batman 于 2011-6-1 02:03 编辑

干脆帮你把它们全下下来,都保存在韩寒文件夹中:

  1. Dim regex, fso, vbstr, regstr, vbout, oxml, ostream
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. If Not fso.FolderExists("韩寒") Then fso.CreateFolder("韩寒")
  4. Set ohttp = CreateObject("microsoft.xmlhttp")
  5. Set ostream = CreateObject("adodb.stream")
  6. vbstr = fso.OpenTextFile("cs.html", 1).ReadAll()
  7. For Each regstr In  Split(replace(fso.OpenTextFile("a.txt", 1).ReadAll(), "…", ""), vbCrLf)
  8.   RegExptest vbstr
  9. Next
  10. Set fso = Nothing
  11. Set ohttp = Nothing
  12. Set ostream = Nothing
  13. MsgBox "ok"

  14. Function RegExptest(rgstr)
  15.   Dim match
  16.   Set regex = New RegExp
  17.   regex.Global = True
  18.   regex.IgnoreCase = True
  19.   regEx.pattern = "<a\s+[.\n]*?href=""(\w+://[^:\s]+)?""[^<>]*""" & regstr & """>"
  20.   For Each match In regex.Execute(rgstr)
  21.     dowload match.Submatches(0)
  22.   Next
  23.   Set regex = Nothing
  24. End Function

  25. Function dowload(url)
  26.   ohttp.open "get", url, False
  27.   Do Until ohttp.readyState = 1 : WScript.Sleep 200 : Loop
  28.   ohttp.send()
  29.   ostream.Mode = 3
  30.   ostream.Type = 1
  31.   ostream.Open()
  32.   ostream.Write ohttp.responseBody
  33.   ostream.SaveToFile "韩寒" & regstr & ".html", 2
  34.   ostream.Close
  35. End Function
复制代码
发表于 2011-6-1 06:56:49 | 显示全部楼层
.....php 能直接匹配  并输出或调用   10行代码都不到
发表于 2011-6-1 09:03:44 | 显示全部楼层
效率低下
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F %%i IN (a.txt) DO (
    FOR /F "delims=" %%j IN ('FINDSTR /R "%%i" cs.html') DO (
        SET html=%%j
        SET html=!html:^=!
      ...
Demon 发表于 2011-5-31 22:11

改了一下,效率稍微好点

  1. @ECHO OFF
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. FOR /F "delims=" %%i IN ('FINDSTR "articleCell" cs.html') DO (
  4.     SET html=%%i
  5.     SET html=!html:^<=!
  6.     SET html=!html:^>=!
  7.     SET html=!html:"_blank" =!
  8.     SET html=!html: target=!
  9. )
  10. FINDSTR %html% 2> err.txt
  11. FOR /F %%i IN (a.txt) DO (
  12.     FOR /F "tokens=1-2 delims==" %%j IN ('FINDSTR "%%i" err.txt') DO (
  13.         ECHO %%i %%k
  14.     )
  15. )
  16. DEL err.txt & PAUSE
复制代码

评分

参与人数 1PB +2 收起 理由
zm900612 + 2 用for是个进步,但是findstr却过于频繁

查看全部评分

发表于 2011-6-1 10:03:27 | 显示全部楼层
10# w1983912


那个,批处理不是只有5行么。
发表于 2011-6-1 10:11:28 | 显示全部楼层
10# w1983912


那个,批处理不是只有5行么。
Batcher 发表于 2011-6-1 10:03

先用C语言写个EXE,然后用批处理调用,只需要1行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 13:13 , Processed in 0.024373 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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