【问题标题】:Renaming HTML files using <title> tags and publication date使用 <title> 标签和发布日期重命名 HTML 文件
【发布时间】:2019-10-19 17:12:53
【问题描述】:

我想使用 HTML 标题标签和发布日期重命名 HTML 文件。

我在这里使用标题标签找到了标题的答案:

编辑代码:

#!/bin/bash
for f in $(find . -type f | grep \.html)
   do
   title=$( awk 'BEGIN{IGNORECASE=1;FS="<title>|</title>";RS=EOF} {print $2}' "$f" )
   mv -i "$f" "${title//[ ]/-}".html
done

Renaming HTML files using <title> tags

不确定如何让日期部分正常工作。

结果将是 title_PublicationDate.html

这是一个示例网址:https://www.voltairenet.org/article178442.html

将从“article178442.html”重命名为“You Are The Hope by Paul Craig Roberts_20130508.html”

以下是包含发布日期的行:

第 19 行:

<meta property="og:article:published_time" content="2013-05-07T23:31:07Z" />

第 207 行:

<span class="updated" title="2013-05-8"><time datetime="2013-05-08 02:31:07" pubdate>| 8 May 2013</time></span></span>

编辑:是否可以使用 Python 和使用 Open Graph 标签的美丽汤来做到这一点?

【问题讨论】:

  • 你的问题很不清楚。请指定您想使用什么方法,以及什么编程语言。我的意思是,有很多方法可以做到这一点。
  • 该方法对我来说不是很重要,我正在运行 Linux 和 bash,所以任何可以在那里工作的东西。否则基于上面的例子,如果它很容易改变的话。
  • 好吧,就个人而言,我会创建一个 node.js 程序,因为这是我最擅长的。只需使用 npm(文件系统)中的“fs”包,就可以做你想做的事。如果你愿意,我可以编写一个你从命令提示符运行的程序,但它需要你安装 node.js。
  • 不要使用旧的和不推荐使用的反抽头,使用括号。像这样:for f in $(find . -type f | grep \.html)
  • edit 您的问题包含简洁、可测试的样本输入(您要解析的文件的样本)和预期的输出(您要从这些文件中提取的文本)。不要在 cmets 中添加相关信息,因为我们必须搜索它并且无法清晰地对其进行格式化 - 将任何人需要知道的所有信息都放在能够帮助您解决问题的地方。

标签: python html awk beautifulsoup rename


【解决方案1】:

我花了一些时间做一些猜测,你的问题不是很清楚,但我得出了这个解决方案:

我创建了一个名为 renamer 的 git repo。这个快速的小脚本可以从包含所有索引文件的文件夹中运行,它会获取文件夹中的所有 .html 文件并将它们重命名为相应 html 文件的 &lt;title&gt; 标记内的文本加上日期已发布,我从 html 文件中的元标记之一获取。此脚本假定您的 html 元素中的元标记结构,因此只要元标记结构保持不变,它就应该工作。

注意: 您从 github 下载的文件必须放在您的 html 文件目录内的文件夹中(见下图)

您可能已经知道了,但是当您将文件放入文件夹后,请在程序文件夹中运行npm install。这将安装所有必需的依赖项,在本例中为 file-systempathreadline

运行程序所在文件夹中的程序类型node main,就这样,父文件夹中的所有html文件都会被重命名。

理论上,您应该能够将程序保存在索引文件所在的文件夹中以供将来使用。如果您将来需要快速更改某些名称,非常方便:)

希望我回答了你的问题。

【讨论】:

  • 非常感谢您的回答,以及您编写的代码,效果很好!!!
  • 感谢您的赞赏,我很高兴 :)
【解决方案2】:

您可以使用元标记中的 sed 来添加发布日期:

<meta property="og:article:published_time" content="2013-05-07T23:31:07Z" />

使用sedscript 在 YYYYMMDD 中增加 pub_date

pub_date=$(sed -n -e 's/.*meta property.*published_time.*\([0-9][0-9][0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\).*/\1\2\3/p')

代码是“机会主义的”,并假设元标记的结构非常具体。但是,对于快速而肮脏的解决方案 - 它会起作用。使用 $pub_date 构造文件名

【讨论】:

  • 感谢您的回答,但它似乎不适用于我。我试图在我的问题的代码中仅使用 $pub_date 重命名文件,但没有任何反应......即此代码:for f in $(find . -type f | grep \.html) do pub_date=$(sed -n -e 's/.*元属性.*published_time.*([0-9][0-9][0-9][0-9])-([0-9][0-9])- ([0-9][0-9]).*/\1\2\3/p') mv -i "$f" "$pub_date".html 完成
  • @badaboum 看起来你有一个解决方案。如果您仍然需要帮助,请发布运行解决方案的结果(在运行逻辑之前使用“set -x”),并在问题中分享输出。
猜你喜欢
  • 2013-12-21
  • 1970-01-01
  • 2023-03-04
  • 2020-08-05
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2014-01-31
  • 2015-10-10
相关资源
最近更新 更多