标题: [文本处理] 【已解决】网页文本如何用批处理提取问题 [打印本页]
作者: tbjx138 时间: 2015-4-20 07:43 标题: 【已解决】网页文本如何用批处理提取问题
我有很多网页文件htm,想提取里面的文本内容,想实现批量提取,附件里有一个htm文件,还有需要的效果图,请大神们帮忙,先谢谢大神了!
作者: apang 时间: 2015-4-20 11:41
本帖最后由 apang 于 2015-4-20 13:46 编辑
vbs- arr = Array("ssNumber", "bookName", "author", "pageNum", "publish", "isbn")
- Set fso = CreateObject("Scripting.FileSystemObject")
- For Each f in fso.GetFolder(".").Files
- If LCase(Right(f, 4)) = ".htm" Then
- Name = fso.GetBaseName(f) & ".csv"
- fso.OpenTextFile(Name, 2, true).Write getData(f, arr)
- End If
- Next
-
- MsgBox "OK"
-
- Function getData(file, ByVal arr)
- s = Join(arr, ",") & vbCrLf
- with CreateObject("ADODB.Stream")
- .Mode = 3
- .Type = 2
- .Open
- .CharSet = "utf-8"
- .LoadFromFile file
- txt = .ReadText
- End with
- Set re = New RegExp
- re.Pattern = "\{[\s\S]+?}"
- re.Global = true
- re.IgnoreCase = true
- For Each m in re.Execute(txt)
- ReDim a(UBound(arr))
- For i = 0 to UBound(arr)
- re.Pattern = """" & arr(i) & """:("".+?"")"
- If re.Test(m) Then a(i) = re.Execute(m)(0).SubMatches(0)
- Next
- s = s & Join(a, ",") & vbCrLf
- Next
- getData = s
- End Function
复制代码
作者: tbjx138 时间: 2015-4-20 12:51
vbs
apang 发表于 2015-4-20 11:41
感谢大神的回复,第680页可以提取,完全符合要求,我有很多这样的文件,麻烦大神能不能做个批量的代码,再次感谢大神的帮忙!!
作者: apang 时间: 2015-4-20 13:46
回复 3# tbjx138
已修改
作者: tbjx138 时间: 2015-4-20 14:04
回复 4# apang
感谢大神,按照您给的代码问题已解决了!!谢谢大神的再次修改代码!!
作者: pcl_test 时间: 2015-4-20 14:20
问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
作者: yu2n 时间: 2015-4-20 16:11
本帖最后由 yu2n 于 2015-4-20 22:47 编辑
vbs
apang 发表于 2015-4-20 11:41
我也重复造个轮子。XD- '提取JSON文本.vbs by yu2n 20150420
- Main
- Sub Main()
- Dim arrName, SaveFile, fso, f
- arrName = Array("ssnumber", "bookName", "author", "pageNum", "publish", "isbn") 'JSON名称
- SaveFile = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\"))
- SaveFile = SaveFile & Left(WScript.ScriptName, InStrRev(WScript.ScriptName, ".")-1) & ".csv" '结果保存位置
-
- ' 遍历同目录所有 *.htm 文档
- Set fso = CreateObject("Scripting.FileSystemObject")
- fso.OpenTextFile(SaveFile, 2, True, -1).Write Join(arrName, ",") & vbCrLf '重置TXT,写入JSON名称
- For Each f in fso.GetFolder(".").Files
- If LCase(Right(f, 4)) = ".htm" Then
- fso.OpenTextFile(SaveFile, 8, True, -1).Write getData(f, arrName) & vbCrLf '追加写入TXT
- End If
- Next
-
- MsgBox "OK"
- End Sub
-
- Function getData(file, arrName)
- Dim strJson
- strJson = ReadPfile(file, "UTF-8") '以UTF-8编码读取JSON文文本
- getData = GetJsonString(strJson, arrName) '获取JSON值
- End Function
-
- '按编码读取txt文件内容
- Function ReadPfile(ByVal File, ByVal Charset)
- With CreateObject("ADODB.Stream")
- .Type = 2
- .Mode = 3
- .open
- .Charset = Charset
- .LoadFromFile File
- ReadPfile = .ReadText
- .Close
- End With
- End Function
-
- '获取JSON字符串中的数据 by yu2n 20150420
- 'GetJson("{ ""myname"":""liucqa"", ""myid"":""007"" }", Array("myid")) = "007"
- Function GetJsonString(strJson, arrName)
- On Error Resume Next
- Dim oHTML, oWindow
- Set oHTML = CreateObject("htmlfile")
- Set oWindow = oHTML.parentWindow
- oWindow.ExecScript "var arr=[], s;" & _
- "var json=" & strJson & ";" & _
- "var arrName=['" & Join(arrName, "','") & "'];" & _
- "if(json instanceof Array){" & _
- " for(var i=0;i<json.length;i++){" & _
- " var arrTemp=[];" & _
- " for(var j=0;j<arrName.length;j++){" & _
- " arrTemp.push('""' + eval('(json[' + i + '].' + arrName[j] + ')' ) + '""')" & _
- " }" & _
- " arr.push(arrTemp.join(','));" & _
- " };" & _
- " s=arr.join('\r\n');" & _
- "}else{" & _
- " for(var j=0;j<arrName.length;j++){" & _
- " arr.push('""' + eval('(json.' + arrName[j] +')') + '""')" & _
- " }" & _
- " s=arr.join(',');" & _
- "}"
- GetJsonString = oWindow.s
- End Function
复制代码
作者: tbjx138 时间: 2015-4-20 20:20
回复 7# yu2n
感谢大神的回复,测试您的代码,csv文件里没有分列,这是我的测试结果,最好在您修改后把这些文件提取后都放在一个csv文件里,就更好了!!
作者: yu2n 时间: 2015-4-20 22:53
回复 8# tbjx138
用 Notepad++ 可正常打开。因为漏掉了回车符号,系统自带的记事本打开时会出现不换行显示的情况。
代码更新到 7 楼:
1. 修正换行问题
2. 修改结果保存位置,多个 *.htm 处理结果保存到脚本同名的 *.csv 文件(Unicode编码)中。
作者: tbjx138 时间: 2015-4-21 07:10
回复 7# yu2n
感谢大神再次改写代码,提取文件都保存在一个csv里了,用excel打开,用里面的分列设置一下就成功分列了,效果不错!!谢谢大神的帮忙!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |