2016-08-04 7 views
3

現在、Perlスクリプトを作成しており、CPANモジュールWWW:Mechanizeを使用して、WebサイトからHTMLページを取得しています。 しかし、私はオフラインのHTMLファイルでも作業できるようにしたいと思います。(私は自分自身をあらかじめ保存しておきます)私は新しいスクリプトを試すたびにインターネットを必要としません。私は、そのファイルを見てきましたPerlを使用するWWW :: Mechanizeをローカルファイルで使用する

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

:この中

$mech->get('http://www.websiteadress.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. URLは唯一のスラッシュ(/)を理解し、あなたがWindowsのゆがんだバックスラッシュ(\)怪物を変換する必要があります。 更新: Borodinはコメントで指摘しているとおり、これは真実ではありません。URLにバックスラッシュを使用できます。しかし、バックスラッシュはPerl文字列に特別な意味を持つことが多いので、可能な限りスラッシュを使うことをお勧めします。
  2. このスキームは://(2つのスラッシュ)、ホスト名(空の文字列)、スラッシュ(/)、ローカルパス(C:/)の順に続きますfileです。これは、file:の後に3つのスラッシュがあることを意味します。それは間違っているので、人々はしばしばそれらの1つを省略します。 更新:の説明は、コメントの中でBorodinからの以下のアドバイスに従って、より正確になりました。

ウィキペディア(いつものように)は、より多くの情報を持っている - file URI scheme

+3

* "URLはスラッシュのみを理解しています" * 'file:' URIの内容はプラットフォーム定義です。 'file:/// C:\ Temp \ t.txt'はうまく動作します。 * "Windowsのワープされたバックスラッシュ(\\)モンスター" *これは部族主義のための場所ではありません。ちょうどその質問に答えてください。 – Borodin

+3

* "スキームはfile://"です。スキームは 'file'です。 URIの中にはコロンと2つのスラッシュが続いていなければなりません。*ホスト*(この場合は空の文字列で、ローカルマシンを示しています)に別のスラッシュとパスがあります。 – Borodin

関連する問題