标题: 100元求个文本处理的批处理 [打印本页]
作者: hijackle 时间: 2013-9-3 03:32 标题: 100元求个文本处理的批处理
本帖最后由 hijackle 于 2013-9-3 14:07 编辑
附件好像过大,不让上传。请到以下地址下载http://ison.cn/web.rar
要求把网页中每一行的信息以及改行点击的url地址导出到新的文本.
拿第一行为例,要求导出的文本的第一行如下:
靓装中变████ ████人气爆满 今天通宵固顶 精品推荐 9月全新改版 ━━━最新更新双倍爆率<全部免费>━-通宵固顶 客服QQ:╳人气爆棚╳ 点击查看 http://aaa.yx79.com/
高手帮忙,100元支付宝或者网银交易辛苦费。
作者: Lumiere 时间: 2013-9-3 15:44
回复 1# hijackle
试了下,目标文件里面的文本太乱了,没法处理,如果都和刚开始一样的格式还好,后面简直就是乱七八糟一堆一堆的字符。
作者: PowerShell 时间: 2013-9-3 16:15
你是要能用多次的脚本啊,还是要一个page的处理结果啊?
作者: DAIC 时间: 2013-9-3 16:20
- @echo off
- grep -v "<TR.*<TD" web.html | grep -A 9 "<TR bgColor=" > web_1.html
- sed -r "/^<TR/d; s#^</TR>.*##; /点击查看/ s/.*a href=(http[^ ]+) .*/点击查看 \1/; s/<[^>]+>//g" web_1.html > web_2.html
- gawk -v RS="\n\n+" "$1=$1" web_2.html | findstr "http:" | gawk "!a[$0]++" > web.txt
- del /f web_1.html web_2.html
复制代码
grep.exe sed.exe gawk.exe 下载地址:
http://code.google.com/p/gnu-on-windows/downloads/list
作者: terse 时间: 2013-9-3 17:01
纯P 一个- @echo off&setlocal enabledelayedexpansion
- set str=&findstr "<TD.*/TD>" web.html>$
- (for /f "tokens=1-8 delims=<>" %%a in ($) do (
- if /i "%%h" == "/TD" (
- if /i "%%g" == "/a" (set "str=!str!%%e") else set "str=!str! %%b %%e"
- ) else if /i "%%c%%d%%e%%f" == "/TD" (
- set "str=!str! %%b"
- ) else if /i "%%f%%g%%h" == "/TD" (
- set "str=!str! %%b %%d"
- ) else if /i "%%d%%e%%f%%g%%h" == "/a/TD" (
- if /i "%%c" == "点击查看" (
- for /f "tokens=3 delims== " %%i in ("%%b") do echo;!str! %%c %%i
- set "str="
- ) else set "str=!str! %%c"
- )
- ))>web.txt
- del $
复制代码
作者: hijackle 时间: 2013-9-3 17:26
回复3L,只要能达到效果随便怎样都可以
回复4L,程序执行没有问题,但是导出的web.txt只有400条左右,web.html里面应该有至少上千条信息
回复5L,同4L一样的问题,程序执行没有问题,但是导出的web.txt只有400条左右,web.html里面应该有至少上千条信息
作者: batman 时间: 2013-9-3 17:30
本帖最后由 batman 于 2013-9-3 17:40 编辑
为你解决问题后,请把钱捐到论坛基金中,具体事项找Batcher。。。- Dim objDOM, objSHELL, objFSO, Path
- Set objSHELL = CreateObject("Wscript.Shell")
- Set objFSO = CreateObject("Scripting.FileSystemObject")
- Path = objSHELL.CurrentDirectory & "\"
- Set objDOM = GetObject(Path & "web.html","htmlfile")
- Do Until objDOM.Readystate = "complete" : WScript.Sleep 200 : Loop
- Dim objTRs, objTR, objTexts, objText, subStr, Wstr
- Set objTRs = objDOM.GetElementsByTagName("TR")
- For Each objTR In objTRs
- If InStr(objTR.InnerText, "点击查看") Then
- Set objTextS = objTR.GetElementsByTagName("td")
- subStr = vbNullString
- For each objText In objTextS
- url = Split(objText.InnerHtml, Chr(34))
- subStr = subStr & objText.InnerText & " "
- Next
- If InStr(Wstr, subStr) = 0 Then Wstr = Wstr & subStr & " "& url(1) & vbCrLf
- End If
- Next
- objFSO.OpenTextFile("list.txt",2,1).Write Wstr
- objSHELL.Run "cmd /cstart list.txt", 0, 0
- Set objDOM = Nothing
- Set objFSO = Nothing
- Set objSHELL = Nothing
复制代码
作者: DAIC 时间: 2013-9-3 17:50
回复 6# hijackle
我修改了一下,现在可以取到两千多条数据了。- @echo off
- sed "s#></TR>#>\n</TR>#; s#><TD#>\n<TD#g" web.html > web_0.html
- grep -v "<TR.*<TD" web_0.html | grep -A 9 "<TR bgColor=" > web_1.html
- sed -r "/^<TR/d; s#^</TR>.*##; /点击查看/ s/.*a href=(http[^ ]+) .*/点击查看 \1/; s/<[^>]+>//g" web_1.html > web_2.html
- gawk -v RS="\n\n+" "$1=$1" web_2.html | findstr "http:" | gawk "!a[$0]++" > web.txt
- del /f web_0.html web_1.html web_2.html
复制代码
作者: hijackle 时间: 2013-9-3 18:34
多谢这么多人的热心,不好意思了,只能以先来后到为准了,7楼batman第一个正确解决问题,钱按照batman的意思将转入论坛基金。
再次多谢另外几位的热心。非常感谢
作者: DAIC 时间: 2013-9-3 19:13
回复 9# hijackle
你测试的结果,7楼和8楼分别获取了多少条?
作者: hijackle 时间: 2013-9-3 23:03
全部都是2368条,但是文件大小batman的是364K你的是313K,有点奇怪
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |