2016-08-04 98 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