标题: [文本处理] [已解决]批处理如何从html格式(接收到的邮件)中读取数据 [打印本页]
作者: dimo 时间: 2022-12-27 21:54 标题: [已解决]批处理如何从html格式(接收到的邮件)中读取数据
本帖最后由 dimo 于 2022-12-30 19:31 编辑
通过第三方批处理getmail可以获取到邮箱里的邮件。获取后经其自身解码,得到一个Extract*.out文件,大致看一下其格式应该为html的写法,并且内容只分一行。- <div dir="auto">here is the content</div>
复制代码
显然我邮件发送的原内容为:
现在要提取出其中的原内容并且将所有内容合并到一行。问题在于,邮箱不一定每次都接收到这样简单的文件。例如内容当中出现换行:- <div dir="auto">abababababababab<br /><br />abababababababab<br /><br /></div>
复制代码
有时内容含特殊字符,解码之后也无法正常显示(某些字符):
i wanna get these words # $ % & * @ ? !
- <div dir="auto">i wanna get these words # $ % & * @ ? !</div>
复制代码
有时发送的内容经过复制粘贴,不小心留下了其他信息:- <div dir="auto">hey get it <span style="font-family:sans-serif">hey get it </span><br style="font-family:sans-serif" /><span style="font-family:sans-serif">hey get it </span><span style="font-family:sans-serif">hey get it </span><br style="font-family:sans-serif" /></div>
复制代码
显然需要忽略<>标签里的所有内容才能得到原内容,并且需要还原未正常显示的符号。
可能要用到第三方了……
作者: idwma 时间: 2022-12-27 22:59
- powershell "([xml](gc Extract.out)).InnerText"
复制代码
作者: czjt1234 时间: 2022-12-28 10:01
回复 2# idwma
赞一个
作者: Batcher 时间: 2022-12-28 11:02
回复 1# dimo
可以试试这几个第三方命令行工具
http://bcn.bathome.net/s/tool/index.html?key=html2text
http://bcn.bathome.net/s/tool/index.html?key=HTML2TXT
http://bcn.bathome.net/s/tool/index.html?key=dehtml
http://bcn.bathome.net/s/tool/index.html?key=HtoX32c
作者: dimo 时间: 2022-12-30 19:02
本帖最后由 dimo 于 2022-12-30 19:47 编辑
回复 2# idwma
不过2楼这个好像不太好用……是我用错了?
回复 4# Batcher
HTML2TXT好用,可以正确解析并且支持中文,虽然帮助界面会乱码。
dehtml也可以解析,不支持中文。
我还试了html2text,那个已经用不了了。一调用就会在后台开n多进程,最后跳出一个应用程序无法正常启动。
作者: Batcher 时间: 2022-12-30 21:28
回复 5# dimo
请把你测试2楼代码使用的数据和结果发出来看看,具体是怎么个好像。
如果需要上传文件,可以用阿里云盘或百度网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: WHY 时间: 2022-12-31 10:35
- @if(0)==(0) echo off
- type Extract.out | cscript //nologo //e:jscript "%~f0"
- pause & exit
- @end
-
- var html = new ActiveXObject('htmlfile');
- html.write(WSH.StdIn.ReadAll());
- var s = html.getElementsByTagName('div')[0].innerText;
- WSH.Echo(s);
复制代码
作者: dimo 时间: 2022-12-31 13:41
本帖最后由 dimo 于 2022-12-31 14:46 编辑
回复 2# idwma
回复 6# Batcher
我试过保存在批处理文件里运行,在cmd窗口中运行,都不好用。
没有回显。什么都没有。 下面这里有一张图片:
还有就是,链接的那两个图床都是网页无法打开。
作者: dimo 时间: 2022-12-31 14:45
回复 7# WHY
大多数情况下可用。但是在处理原帖最后一串字符时出问题。得到的回显:- hey get it聽hey get it聽
- hey get it聽hey get it聽
- 请按任意键继续. . .
复制代码
如果删去it后面的空格则不会出现乱码。(所给字符串的空格和电脑输入的空格有不同)
作者: idwma 时间: 2022-12-31 16:00
回复 8# dimo - powershell "([xml](gc Extract.out)).FirstChild.InnerText"
复制代码
作者: WHY 时间: 2023-1-1 16:48
回复 9# dimo
你应该提供一个真实的样本以便测试
1楼那么长的描述,唯独不见样本。
那个空格是UTF-8编码中的一种空格,名称:Non-breaking space,编码:0xC2A0,与常规空格(\x20)不同。
cmd显示乱码不要紧,重定向到文件就行了。就看你会不会加重定向。
如果嫌显示实在是扎眼,可以这样:- @if(0)==(0) echo off
- cscript //nologo //e:jscript "%~f0"
- pause & exit
- @end
-
- function getText(file, charset){
- var ado = new ActiveXObject('ADODB.Stream');
- ado.Type = 2;
- ado.CharSet = charset;
- ado.Open();
- ado.LoadFromFile(file);
- var text = ado.ReadText(-1);
- ado.Close();
- return text;
- }
-
- var text = getText('Extract.out', 'utf-8');
- var html = new ActiveXObject('htmlfile');
- html.write(text);
- var s = html.getElementsByTagName('div')[0].innerText;
- WSH.Echo(s);
复制代码
作者: dimo 时间: 2023-1-2 13:25
本帖最后由 dimo 于 2023-2-8 01:31 编辑
回复 10# idwma
经过多次可靠性测试,这个是最优解法
作者: dimo 时间: 2023-1-2 13:39
回复 11# WHY
1楼我也说了,Extract.out文件就只一行。新建一个txt把我提供的内容复制进去(保存确实是用的utf8),就和实际得到的样本是一模一样的。
不过我测试是没有问题了。当初这个输出的内容还要用for处理什么的,所以不能有乱码。现在已经能运行了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |