返回列表 发帖

100元求个文本处理的批处理

本帖最后由 hijackle 于 2013-9-3 14:07 编辑

附件好像过大,不让上传。请到以下地址下载http://ison.cn/web.rar

要求把网页中每一行的信息以及改行点击的url地址导出到新的文本.
拿第一行为例,要求导出的文本的第一行如下:
靓装中变████ ████人气爆满 今天通宵固顶 精品推荐 9月全新改版 ━━━最新更新双倍爆率<全部免费>━-通宵固顶 客服QQ:╳人气爆棚╳ 点击查看 http://aaa.yx79.com/

高手帮忙,100元支付宝或者网银交易辛苦费。

回复 1# hijackle


    试了下,目标文件里面的文本太乱了,没法处理,如果都和刚开始一样的格式还好,后面简直就是乱七八糟一堆一堆的字符。
Still with wax

TOP

你是要能用多次的脚本啊,还是要一个page的处理结果啊?
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

@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.htmlCOPY
grep.exe sed.exe gawk.exe 下载地址:
http://code.google.com/p/gnu-on-windows/downloads/list

TOP

纯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 $COPY

TOP

回复3L,只要能达到效果随便怎样都可以
回复4L,程序执行没有问题,但是导出的web.txt只有400条左右,web.html里面应该有至少上千条信息
回复5L,同4L一样的问题,程序执行没有问题,但是导出的web.txt只有400条左右,web.html里面应该有至少上千条信息

TOP

本帖最后由 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 = NothingCOPY
***共同提高***

TOP

回复 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.htmlCOPY

TOP

多谢这么多人的热心,不好意思了,只能以先来后到为准了,7楼batman第一个正确解决问题,钱按照batman的意思将转入论坛基金。
再次多谢另外几位的热心。非常感谢

TOP

回复 9# hijackle


    你测试的结果,7楼和8楼分别获取了多少条?

TOP

全部都是2368条,但是文件大小batman的是364K你的是313K,有点奇怪

TOP

返回列表