在本地文件上使用 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' );
注意人们经常弄错的两件重要事情。
- URLs 只理解正斜杠 (
/
),所以你需要转换 Windows' 扭曲的反斜杠 (\
) 怪物。 更新: 正如 Borodin 在评论中指出的那样,这不是真的 - 您可以在 URL 中使用反斜杠。但是,反斜杠在 Perl 字符串中通常有特殊含义,所以我建议尽可能使用正斜杠。
- 方案是
file
,后面是://
(有两个斜杠),然后是主机名(这是一个空字符串)一个斜杠(/
),然后您的本地路径 (C:/
)。所以这意味着 file:
之后有三个斜线。这似乎是错误的,所以人们经常省略其中一个。 更新: 描述根据 Borodin 在评论中的建议变得更加准确。
维基百科(一如既往)有更多信息 - file URI scheme
我目前正在编写 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' );
注意人们经常弄错的两件重要事情。
- URLs 只理解正斜杠 (
/
),所以你需要转换 Windows' 扭曲的反斜杠 (\
) 怪物。 更新: 正如 Borodin 在评论中指出的那样,这不是真的 - 您可以在 URL 中使用反斜杠。但是,反斜杠在 Perl 字符串中通常有特殊含义,所以我建议尽可能使用正斜杠。 - 方案是
file
,后面是://
(有两个斜杠),然后是主机名(这是一个空字符串)一个斜杠(/
),然后您的本地路径 (C:/
)。所以这意味着file:
之后有三个斜线。这似乎是错误的,所以人们经常省略其中一个。 更新: 描述根据 Borodin 在评论中的建议变得更加准确。
维基百科(一如既往)有更多信息 - file URI scheme