Board logo

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

作者: 随风    时间: 2011-5-31 20:16     标题: [已解决]如何根据txt文件中的关键字提取html文件中的网址

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

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

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

用 sed 等第三方也可以
作者: Batcher    时间: 2011-5-31 21:41

  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
作者: 随风    时间: 2011-5-31 22:03

3# Batcher

漏掉了第5个,是什么原因??
作者: Batcher    时间: 2011-5-31 22:07

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. )
复制代码

作者: CrLf    时间: 2011-5-31 22:08

4# 随风


关键词含通配
作者: Demon    时间: 2011-5-31 22:11

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

作者: batman    时间: 2011-6-1 01:17

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

作者: batman    时间: 2011-6-1 01:48

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

作者: w1983912    时间: 2011-6-1 06:56

.....php 能直接匹配  并输出或调用   10行代码都不到
作者: Demon    时间: 2011-6-1 09:03

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

作者: Batcher    时间: 2011-6-1 10:03

10# w1983912


那个,批处理不是只有5行么。
作者: Demon    时间: 2011-6-1 10:11

10# w1983912


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

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




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