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

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

如何根据txt文件中的关键字提取html文件中的网址
a.txt为关键字,要提取cs.html中关键字左边的网址,各位有什么好方法.

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

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

评分人数

技术问题请到论坛发帖求助!

10# w1983912


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

先用C语言写个EXE,然后用批处理调用,只需要1行。

TOP

10# w1983912


那个,批处理不是只有5行么。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

效率低下
@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
复制代码
1

评分人数

    • zm900612: 用for是个进步,但是findstr却过于频繁PB + 2

TOP

.....php 能直接匹配  并输出或调用   10行代码都不到

TOP

本帖最后由 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
复制代码
***共同提高***

TOP

本帖最后由 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
复制代码
***共同提高***

TOP

效率低下
  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
复制代码
1

评分人数

TOP

4# 随风


关键词含通配

TOP

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

评分人数

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

TOP

3# Batcher

漏掉了第5个,是什么原因??
技术问题请到论坛发帖求助!

TOP

  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

评分人数

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

TOP

用 sed 等第三方也可以
技术问题请到论坛发帖求助!

TOP

返回列表