编辑:我知道怎么做。我不是在寻找解决方案,而是在花时间自己用脚本语言写东西之前,先寻找一个流程或现有的程序建议。你知道吗
我在不同的目录中有一些HTML文件,它们都具有相似的结构:
<html>
<head>...</head>
<body>
<nav>...</nav>
<section>...</section>
</body>
</html>
对于我指定的所有文件,我想用其他节以编程方式替换HTML节(例如,用不同的nav
块[在我选择的文件中指定])替换<nav>
块)
我认为理想的解决方案是使用lxml
或类似的Python工具,但是如果有一种简单的方法可以使用*nixy工具或现有的程序来实现,我很乐意这样做,而不是编写一个脚本。你知道吗
最后,我编写了自己的小命令行工具来做我想做的事情。它在我的用例中运行得相当好,我打算随着时间的推移对它进行改进。它在GitHub上:trufflepig。你知道吗
我希望它也能对其他人有用。你知道吗
您也许可以像这样对Python使用BeautifulSoup。你知道吗
例如:
将更改:
<nav></nav>
到<nav2></nav2>
不要使用正则表达式或字符串解析。那些只会让你的头受伤。使用解析器。你知道吗
在Ruby中,我会使用Nokogiri:
输出:
当然,您希望用
File.read('snippet.html')
之类的内容替换"this is a new block"
。你知道吗如果替换文件包含HTML片段而不是
nav
内容,请使用以下内容:输出将是相同的。(同样,如果你是这样学习的,可以使用
File.read
从文件中获取它。)在Nokogiri中,
at
找到由CSS或XPath访问器指定的标记的第一个实例并返回节点。我在上面使用了CSS,但是//nav
也可以。at
猜测访问器的类型。如果您想具体一点,可以使用at_css
或at_xpath
,因为可能有不明确的访问器。另外,Nokogiri有search
,它返回一个NodeSet,它的行为类似于一个数组。您可以按自己的意愿对结果进行迭代。与at
一样,也有CSS和XPath特定的版本,分别是css
和xpath
。你知道吗Nokogiri有一个CLI接口,对于像本例这样简单的东西,它可以工作,但我也可以用sed或Ruby/Perl/Python一行程序来完成。你知道吗
不过,HTML很少这么简单,尤其是在野外漫游的任何东西,CLI或一行程序解决方案将迅速失控,或者干脆消亡。我说,基于多年来编写的许多spider和RSS聚合器,当您引入额外的HTML或XML源代码时,一开始简单的东西会变得复杂得多,而且从来不会变得简单。使用解析器让我学会了先去找它们。你知道吗
相关问题 更多 >
编程相关推荐