2016-08-04 102 views
3

我目前正在使用Perl脚本,并使用CPAN模块WWW:通过机械化从网站获取HTML页面。 但是,我希望能够在离线HTML文件上工作(我会事先保存好自己),所以每次尝试新脚本时都不需要互联网。 所以基本上我的问题是如何改变这样的:使用perl WWW ::对本地文件进行机械化

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

到这一点:

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

我见过的文件://可能是有用的,但我显然不知道如何使用它,因为我每次都会遇到错误。

+1

您确定要使用'上的本地文件WWW :: Mechanize'?当你只需打开文件时,使用'LWP'套件就没什么意义了,模块的许多用途是处理对链接的点击,表单填写和提交以及在浏览器上模拟后退和前进按钮。这些都不是静态文件可能的,所以你只剩下页面的分析,你只需要[HTML :: TreeBuilder](https://metacpan.org/pod/HTML::TreeBuilder) WWW :: Mechanize'子类。 – Borodin

+0

正如我所说的脚本的目的是在网页上工作,本地文件只是一个替代方案,主要是为了测试编码错误(我真的想知道为什么它不起作用!)。感谢您指出另一种方式来做到这一点。 – Azaghal

回答

5

来自WWW :: Mechanize的get()方法将URL作为参数。所以你只需要确定你的本地文件的正确URL是什么。你在“file://”方案的右边。

我认为你将需要:

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

注意,人们经常拿错两个重要的事情。

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

维基百科(一如既往)有很多的详细信息 - file URI scheme

+3

*“URL只能识别正斜杠”*一个'file:'URI的内容是平台定义的。 'file:/// C:\ Temp \ t.txt'工作得很好。 *“Windows”扭曲反斜杠(\\)怪物“*这不是部落主义的地方。请回答这个问题。 – Borodin

+3

*“方案是file://”*不完全。该计划是'文件'。在一个URI中它必须跟一个冒号和两个斜杠,然后*主机*(在这种情况下它是一个空字符串,表示本地机器)另一个斜杠和路径。 – Borodin