在本地文件上使用 perl WWW::Mechanize

Use perl WWW::Mechanize on a local file

我目前正在编写 Perl 脚本,我使用 CPAN 模块 WWW:Mechanize 从网站获取 HTML 页面。 但是,我也希望能够处理离线 HTML 文件(我很可能会事先保存自己),所以我每次尝试新脚本时都不需要互联网。 所以基本上我的问题是如何转换它:

$mech->get( 'http://www.websiteadress.html' );

进入这个:

$mech->get( 'C:\User\myfile.html' );

我看到 file:// 可能很有用,但我显然不知道如何使用它,因为我每次都会出错。

WWW::Mechanize 中的 get() 方法将 URL 作为其参数。所以你只需要计算出你的本地文件的正确 URL 是什么。 "file://" 方案是正确的。

我想你需要:

$mech->get( 'file:///C:/User/myfile.html' );

注意人们经常弄错的两件重要事情。

  1. URLs 只理解正斜杠 (/),所以你需要转换 Windows' 扭曲的反斜杠 (\) 怪物。 更新: 正如 Borodin 在评论中指出的那样,这不是真的 - 您可以在 URL 中使用反斜杠。但是,反斜杠在 Perl 字符串中通常有特殊含义,所以我建议尽可能使用正斜杠。
  2. 方案是file,后面是://(有两个斜杠),然后是主机名(这是一个空字符串)一个斜杠(/),然后您的本地路径 (C:/)。所以这意味着 file: 之后有三个斜线。这似乎是错误的,所以人们经常省略其中一个。 更新: 描述根据 Borodin 在评论中的建议变得更加准确。

维基百科(一如既往)有更多信息 - file URI scheme