Board logo

标题: [文本处理] [已解决]批处理怎么从html里面提取指定的字符串? [打印本页]

作者: xianxian    时间: 2011-1-15 14:36     标题: [已解决]批处理怎么从html里面提取指定的字符串?

我本地有一大批html文本我想提取里面的<a href="456.htm">abc</a> 这个里面提取abc的值
可能是汉字数字或英文大小写怎么提取>*</a>
我用grep搞不好

还有就是我怎么从网络上的一个页面循环往下提取这样的值只到把这个网站里面所有的网页内容页上面的链接的标题全部获取了

[ 本帖最后由 xianxian 于 2011-1-18 17:36 编辑 ]
作者: xianxian    时间: 2011-1-15 14:38

我在网上看见这个是获取图片和链接的不是获取标题的
http://zhidao.baidu.com/question/121045538.html
请问一下怎么改我用正则换不好
作者: broly    时间: 2011-1-15 14:49

改标题。不然会被封的

http://www.bathome.net/viewthread.php?tid=963&page=1#pid4396  第4条
作者: broly    时间: 2011-1-15 14:55

上传一个样本看看。全部格式都一样的吗?
作者: xianxian    时间: 2011-1-15 14:57

样本
作者: xianxian    时间: 2011-1-15 14:59

我标题怎么改? 不符合哪条版本规?
作者: broly    时间: 2011-1-15 16:04

  1. '//把次vbs跟HTM文件放在一起运行
  2. Dim fso,fc,f,colMatches,match,re
  3. Set re=New RegExp
  4. re.Global=True
  5. re.IgnoreCase=True
  6. re.Pattern="[0-9]+"">(\w*|[\u4e00-\u9fa5]*|\w*[\u4e00-\u9fa5]*.*)</a>"
  7. Set fso=CreateObject("Scripting.FileSystemObject")
  8. Set fc=fso.GetFolder(".").Files
  9. For Each f In fc
  10.   If fso.GetExtensionName(f)="htm" Then
  11.     str=fso.OpenTextFile(f,1).ReadAll:fso.OpenTextFile(f,1).Close
  12.     Set colMatches=re.Execute(str)
  13.     For Each match In colMatches
  14.       txt=txt & re.Replace(match.Value,"$1") & vbcrlf
  15.     Next
  16.   End If
  17. Next
  18. Set f=fso.CreateTextFile(fso.GetFolder(".")&"\String.txt",True)
  19. f.Write txt
  20. f.Close
  21. MsgBox "保存在当前目录String.txt中",vbOKOnly+vbInformation,"提醒:"
复制代码

作者: xianxian    时间: 2011-1-15 16:10

谢谢楼上的但vbs效率不高 有几万个页面我运行后都不知道要等到啥时间能不能用批处理获取链接地址然后获取这样他可以慢慢获取
作者: broly    时间: 2011-1-15 16:40

那用第三方软件比较方便。现在有事先,晚点再回来写
作者: broly    时间: 2011-1-15 20:04     标题: 回复 8楼 的帖子

刚才看了下,发现你的htm里面的要提取的文本只有一行的,这个用批处理提出太麻烦了(正则表达式不够强大,或许是我不会用···)。所以我开始选择写VBS,你将就将就。或者等高手吧,本人菜鸟
作者: tmplinshi    时间: 2011-1-15 21:40

sed 下载:http://bathome.net/attachment.php?aid=2265
  1. sed "/^<p>/!d; s/.*<\/p>//; s/<\/a><\/li>/\x0d\x0a/g;" *.htm | sed "s/<li>.*[0-9]\x22>//; s/<hr>//" >_li.txt
复制代码
你先试几个文件看能不能用。

[ 本帖最后由 tmplinshi 于 2011-1-16 13:56 编辑 ]
作者: broly    时间: 2011-1-16 13:08

原帖由 tmplinshi 于 2011-1-15 21:40 发表
sed 下载:
http://sourceforge.net/projects/gnuwin32/files//sed/4.2.1/sed-4.2.1-bin.zip/download
http://gnuwin32.sourceforge.net/downlinks/sed-dep-zip.php
(把第二个链接里的 DLL 文件放到 sed.exe 目录 ...


sed 果然强大。没用过。

不过楼上的代码应该这样比较好

  1. sed "/^<p>/ !d; s/.*<\/p>//; s/<\/a><\/li>/\x0d\x0a/g;" *.htm | sed "s/<li>.*[0-9].>//; s/<hr>//"| more +1 >_li.txt
复制代码

作者: broly    时间: 2011-1-16 13:12

我的sed是这里下载的http://bathome.net/viewthread.php?tid=1114&page=1#pid5188
单文件版。可能11楼用的sed不一样,导致我在12楼加多了一点东西
作者: tmplinshi    时间: 2011-1-16 13:35     标题: 回复 13楼 的帖子

是的,sed 版本不同造成的
作者: asnahu    时间: 2011-1-16 14:16

  1. sed "s/>/&\n/g" *.htm | sed "/<\/a/!d; s/<.*$//" > list.txt
复制代码
不知是不是这样?
作者: yhcbird    时间: 2011-1-18 08:59

sed还没看过用法。。内容太多先放着。。。。




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