将多个HTML解析为文本并重命名为父目录


3

在一个目录中有很多文件夹.html里面,我希望所有HTML解析为新的.txt与父目录的名称。

Example1 / Index.html> Example1.txt

Example2 / Index.html> Example2.txt


您希望如何删除标签?
嫌疑人

这样的东西适用于使用sed,cat file |的单个文件 sed's / <b>。* </ b> // g'
z4nb0t 2013年

2
@ z4nb0t人们普遍认为,使用正则表达式来解析HTML将导致年长的神从一开始就从他们永恒的睡眠中醒来消耗你的计算机和全人类。
Evilsoup 2013年

@evilsoup:哈哈,那是一个很棒的人。
MPY

Answers:


2

显然,您希望将一些HTML页面转换为纯文本。因此,我不会使用自定义构建的解决方案剥离标记(例如,使用一些sed魔法),但是使用为此目的设计的工具,如html2text ; 从其网页:

html2text是一个Python脚本,它将HTML页面转换为干净,易于阅读的纯ASCII文本。更好的是,ASCII也恰好是有效的Markdown(文本到HTML格式)。

要解决批量重命名的问题:

find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' dirname
 do python path/to/html2text/html2text.py "${dirname}/index.html" > "${dirname}/${dirname}.txt"
done

这里find命令列出了仅位于当前目录中的所有目录(即不是递归的),而read命令(在while条件中)将值赋给变量$dirname。最后,执行dodoneget (s)之间的命令,这里它根据您的请求转换文件。正如@slhck所指出的,你需要使用这样一个复杂的命令,这样带有空格的dirnames就不会破坏任何东西。

[编辑]:转换当前目录下所有HTML文件的另一种变体:

find . -iname "*.html" -print0 | while IFS= read -r -d '' filename
  do python path/to/html2text/html2text.py "${filename}" > "${filename%.*}.txt"
done

iname搜索情况下 nsensitive了*.html

${filename%.*}.txt剥离延伸并附加.txt,即如果filenamesome/path/index.html${filename%.*}some/path/index,最后${filename%.*}.txtsome/path/index.txt


当您使用Z shell时,您可以使用更清洁的for循环,而不会在白色空间制动:

for i (*(/)) python path/to/html2text/html2text.py "${i}/index.html" > "${i}/${i}.txt"

这里的诀窍是*(/)文件名生成,但只返回目录(/)

[编辑]:同样在zsh语法中变换转换当前目录下的所有HTML文件(需要设置选项EXTENDEDGLOB):

for i ((#i)**/*.html) {
   python path/to/html2text/html2text.py "$i" > "${i:r}.txt"
}

(#i)使用情况 nsensitive匹配,一种**递归搜索,因此返回当前工作目录下的所有HTML文件。(如果应遵循符号链接,请使用三颗星***代替两颗星)。

如果在for循环中有多个命令,请使用大{ ... }括号(这里不必要,但它们不会受到伤害)。

${i:r}从变量中剥离扩展(r表示删除)$i


1
@ z4nb0t:对不起,我>在第一个版本中忘记了重定向。现在它应该按照说明工作。(错误是,html2text期望作为可选的第二个参数HTML页面的编码,但得到了txt文件的名称)。
MPY

我只是注意到一些文件夹有多个html文件,这是一个问题吗?
z4nb0t 2013年

@ z4nb0t:没问题,给出的命令完全符合你的要求,并且在每个文件夹中只使用index.html。使用第二个for循环也很容易循环遍历dirs中的所有html文件。但是你需要指定如何重命名。
MPY

2
当文件名或路径包含空格时,这会中断。您应该使用find的exec选项或将其输出管道输出到while循环中(但只能使用该-print0选项。请参阅:mywiki.wooledge.org/ParsingLs
slhck 2013年

1
@ z4nb0t:zsh非常强大,但当然你需要一些训练时间。如果您有兴趣,我真的推荐zsh.sourceforge.net/Guide/zshguide.pdf,作者是zsh的当前维护者Peter Stephenson。不要被它的大小吓到,恕我直言它很容易阅读(至少第一章;)
mpy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.