标题: [文本处理] [已解决]如何根据txt文件中的关键字提取html文件中的网址 [打印本页]
作者: 随风 时间: 2011-5-31 20:16 标题: [已解决]如何根据txt文件中的关键字提取html文件中的网址
如何根据txt文件中的关键字提取html文件中的网址
a.txt为关键字,要提取cs.html中关键字左边的网址,各位有什么好方法.
补充说明:用 sed 等第三方也可以
a.txt- 前扑后继
- 太紧
- 亚克西填词大赛
- 春天的故事
- 答记者问--送点土特产…
- 感谢你,孔子
- 海豚湾
复制代码
cs.html
作者: 随风 时间: 2011-5-31 21:05
用 sed 等第三方也可以
作者: Batcher 时间: 2011-5-31 21:41
- @echo off
- cd.>b.txt
- for /f "delims=" %%a in (a.txt) do (
- sed -n "s/.*<a href=\"\^(.*\^)\" target=.*title=\"%%a\".*/\1/p" cs.html | more >>b.txt
- )
复制代码
http://bbs.bathome.net/thread-3981-1-1.html
作者: 随风 时间: 2011-5-31 22:03
3# Batcher
漏掉了第5个,是什么原因??
作者: Batcher 时间: 2011-5-31 22:07
4# 随风 - @echo off
- cd.>b.txt
- for /f "delims=" %%a in (a.txt) do (
- sed -n "s/.*<a href=\"\^(.*\^)\" target=.*title=.*%%a.*/\1/p" cs.html | more >>b.txt
- )
复制代码
作者: CrLf 时间: 2011-5-31 22:08
4# 随风
关键词含通配
作者: Demon 时间: 2011-5-31 22:11
效率低下- @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:^<=!
- SET html=!html:^>=!
- FINDSTR /R "%%i" !html! 2> error.txt
- FOR /F "delims=" %%k IN (error.txt) DO (
- SET /A line += 1
- SET arr[!line!]=%%k
- ECHO %%k | FINDSTR /R "%%i" > NUL && ( SET /A line -= 2 & CALL ECHO %%i %%arr[!line!]:~26%% )
- )
- )
- )
- DEL error.txt & PAUSE
复制代码
作者: batman 时间: 2011-6-1 01:17
本帖最后由 batman 于 2011-6-1 02:03 编辑
正则搞死人,replace死都搞不定,只好用execute方法了:- Dim regex, fso, vbstr, regstr, vbout
- Set fso = CreateObject("scripting.filesystemobject")
- vbstr = fso.OpenTextFile("cs.html", 1).ReadAll()
- regstr = replace("(" & Replace(fso.OpenTextFile("a.txt", 1).ReadAll(), vbCrLf, "|") & ")", "…", "")
- RegExptest vbstr
- fso.OpenTextFile("url.txt", 2, 1).Write vbout
- Set fso = Nothing
-
- Function RegExptest(rgstr)
- Dim match
- Set regex = New RegExp
- regex.Global = True
- regex.IgnoreCase = True
- regEx.pattern = "<a\s+[.\n]*?href=""(\w+://[^:\s]+)?""[^<>]+""" & regstr & """>"
- For Each match In regex.Execute(rgstr)
- vbout = vbout & match.Submatches(0) & vbCrLf
- Next
- Set regex = Nothing
- End Function
复制代码
作者: batman 时间: 2011-6-1 01:48
本帖最后由 batman 于 2011-6-1 02:03 编辑
干脆帮你把它们全下下来,都保存在韩寒文件夹中:- Dim regex, fso, vbstr, regstr, vbout, oxml, ostream
- Set fso = CreateObject("scripting.filesystemobject")
- If Not fso.FolderExists("韩寒") Then fso.CreateFolder("韩寒")
- Set ohttp = CreateObject("microsoft.xmlhttp")
- Set ostream = CreateObject("adodb.stream")
- vbstr = fso.OpenTextFile("cs.html", 1).ReadAll()
- For Each regstr In Split(replace(fso.OpenTextFile("a.txt", 1).ReadAll(), "…", ""), vbCrLf)
- RegExptest vbstr
- Next
- Set fso = Nothing
- Set ohttp = Nothing
- Set ostream = Nothing
- MsgBox "ok"
-
- Function RegExptest(rgstr)
- Dim match
- Set regex = New RegExp
- regex.Global = True
- regex.IgnoreCase = True
- regEx.pattern = "<a\s+[.\n]*?href=""(\w+://[^:\s]+)?""[^<>]*""" & regstr & """>"
- For Each match In regex.Execute(rgstr)
- dowload match.Submatches(0)
- Next
- Set regex = Nothing
- End Function
-
- Function dowload(url)
- ohttp.open "get", url, False
- Do Until ohttp.readyState = 1 : WScript.Sleep 200 : Loop
- ohttp.send()
- ostream.Mode = 3
- ostream.Type = 1
- ostream.Open()
- ostream.Write ohttp.responseBody
- ostream.SaveToFile "韩寒\" & regstr & ".html", 2
- ostream.Close
- 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
改了一下,效率稍微好点- @ECHO OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
- FOR /F "delims=" %%i IN ('FINDSTR "articleCell" cs.html') DO (
- SET html=%%i
- SET html=!html:^<=!
- SET html=!html:^>=!
- SET html=!html:"_blank" =!
- SET html=!html: target=!
- )
- FINDSTR %html% 2> err.txt
- FOR /F %%i IN (a.txt) DO (
- FOR /F "tokens=1-2 delims==" %%j IN ('FINDSTR "%%i" err.txt') DO (
- ECHO %%i %%k
- )
- )
- 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 |