Board logo

标题: 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

  1. @echo off
  2. grep -v "<TR.*<TD" web.html | grep -A 9 "<TR bgColor=" > web_1.html
  3. sed -r "/^<TR/d; s#^</TR>.*##; /点击查看/ s/.*a href=(http[^ ]+) .*/点击查看 \1/; s/<[^>]+>//g" web_1.html > web_2.html
  4. gawk -v RS="\n\n+" "$1=$1" web_2.html | findstr "http:" | gawk "!a[$0]++" > web.txt
  5. 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 一个
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=&findstr "<TD.*/TD>" web.html>$
  3. (for /f "tokens=1-8 delims=<>" %%a in ($) do (
  4.     if /i "%%h" == "/TD" (
  5.        if /i "%%g" == "/a" (set "str=!str!%%e") else set "str=!str! %%b %%e"
  6.     ) else  if /i "%%c%%d%%e%%f" == "/TD" (
  7.                set "str=!str! %%b"
  8.             ) else if /i "%%f%%g%%h" == "/TD" (
  9.                       set "str=!str! %%b %%d"
  10.                    ) else if /i "%%d%%e%%f%%g%%h" == "/a/TD" (
  11.                              if /i "%%c" == "点击查看" (
  12.                                 for /f "tokens=3 delims== " %%i in ("%%b") do echo;!str! %%c %%i
  13.                                 set "str="
  14.                              ) else set "str=!str! %%c"
  15.                           )
  16. ))>web.txt
  17. 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。。。
  1. Dim objDOM, objSHELL, objFSO, Path
  2. Set objSHELL = CreateObject("Wscript.Shell")
  3. Set objFSO = CreateObject("Scripting.FileSystemObject")
  4. Path = objSHELL.CurrentDirectory & "\"
  5. Set objDOM = GetObject(Path & "web.html","htmlfile")
  6. Do Until objDOM.Readystate = "complete" : WScript.Sleep 200 : Loop
  7. Dim objTRs, objTR, objTexts, objText, subStr, Wstr
  8. Set objTRs = objDOM.GetElementsByTagName("TR")
  9. For Each objTR In objTRs
  10.   If InStr(objTR.InnerText, "点击查看") Then
  11.     Set objTextS = objTR.GetElementsByTagName("td")
  12.     subStr = vbNullString
  13.     For each objText In objTextS
  14.       url = Split(objText.InnerHtml, Chr(34))
  15.       subStr = subStr & objText.InnerText & " "
  16.     Next
  17.     If InStr(Wstr, subStr) = 0 Then Wstr = Wstr & subStr & " "& url(1) & vbCrLf
  18.   End If
  19. Next
  20. objFSO.OpenTextFile("list.txt",2,1).Write Wstr
  21. objSHELL.Run "cmd /cstart list.txt", 0, 0
  22. Set objDOM = Nothing
  23. Set objFSO = Nothing
  24. Set objSHELL = Nothing
复制代码

作者: DAIC    时间: 2013-9-3 17:50

回复 6# hijackle


我修改了一下,现在可以取到两千多条数据了。
  1. @echo off
  2. sed "s#></TR>#>\n</TR>#; s#><TD#>\n<TD#g" web.html > web_0.html
  3. grep -v "<TR.*<TD" web_0.html | grep -A 9 "<TR bgColor=" > web_1.html
  4. sed -r "/^<TR/d; s#^</TR>.*##; /点击查看/ s/.*a href=(http[^ ]+) .*/点击查看 \1/; s/<[^>]+>//g" web_1.html > web_2.html
  5. gawk -v RS="\n\n+" "$1=$1" web_2.html | findstr "http:" | gawk "!a[$0]++" > web.txt
  6. 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://bathome.net./) Powered by Discuz! 7.2