【问题标题】:Use perl WWW::Mechanize on a local file在本地文件上使用 perl WWW::Mechanize
【发布时间】:2023-03-12 16:49:02
【问题描述】:

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

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

进入这个:

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

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

【问题讨论】:

  • 您确定要在本地文件上使用WWW::Mechanize 吗?当您可以只使用open 文件时,使用LWP 套件毫无意义,并且该模块的大部分目的是处理链接点击、表单填写和提交,以及模拟浏览器上的后退和前进按钮.对于静态文件,这些都不可能,因此您只需要分析页面,您只需要 HTML::TreeBuilder 哪个 WWW::Mechanize 子类。
  • 正如我所说,我的脚本的目的是在在线页面上工作,本地文件只是一种替代方案,主要用于测试编码错误(我真的很想知道为什么它不起作用!) .感谢您指出另一种方法。

标签: perl www-mechanize


【解决方案1】:

来自 WWW::Mechanize 的 get() 方法将 URL 作为其参数。因此,您只需要确定本地文件的正确 URL 是什么。您在“file://”方案的正确路线上。

我想你会需要:

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

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

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

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

【讨论】:

  • "URL 只理解正斜杠" file: URI 的内容是平台定义的。 file:///C:\Temp\t.txt 工作得很好。 “Windows 扭曲的反斜杠 (\) 怪物” 这不是部落主义的地方。请回答问题。
  • "方案是 file://" 不完全。该方案是file。在 URI 中,它必须后跟一个冒号和两个斜杠,然后是 host(在这种情况下,它是一个空字符串,表示本地计算机)另一个斜杠和路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 2011-12-14
  • 2011-10-25
  • 1970-01-01
相关资源
最近更新 更多