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

Aza*_*hal 4 perl www-mechanize

我目前正在研究Perl脚本,我使用CPAN模块WWW:Mechanize来从网站获取HTML页面.但是,我希望能够处理离线HTML文件(我最有可能预先保存自己),所以每次我尝试新脚本时都不需要互联网.所以基本上我的问题是如何改变这个:

$mech->get( 'http://www.websiteadress.html' );
Run Code Online (Sandbox Code Playgroud)

进入这个:

$mech->get( 'C:\User\myfile.html' );
Run Code Online (Sandbox Code Playgroud)

我见过那个文件://可能有用,但我显然不知道如何使用它,因为每次都会出错.

Dav*_*oss 6

get()WWW :: Mechanize中的方法将URL作为其参数.因此,您只需要确定本地文件的正确URL.你使用"file://"方案就行了.

我想你需要:

$mech->get( 'file:///C:/User/myfile.html' );
Run Code Online (Sandbox Code Playgroud)

请注意人们经常出错的两件重要事情.

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

维基百科(一如既往)拥有更多信息 - 文件URI方案

  • *"该计划是文件://"*不完全.该计划是`file`.在一个URI中,它必须后面跟一个冒号和两个斜杠,然后*host*(在这种情况下它是一个空字符串,表示本地机器)另一个斜杠和路径. (4认同)
  • *"URL只能理解正斜杠"*`file:`URI的内容是平台定义的.`file:/// C:\ Temp\t.txt`工作得很好.*"Windows'扭曲反斜杠(\\)monstrosities"*这不是部落主义的地方.请回答这个问题. (3认同)