blog/content/post/2008/09/20/2008-09-20-00001029.md

92 lines
3.4 KiB
Markdown

---
title: WWW::Mechanize::Cookbookの抄訳
author: kazu634
date: 2008-09-20
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4283;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- CPAN
- Perl
---
<div class="section">
<h4>
Introduction
</h4>
<p>
LWP::UserAgentでも同じことができると言うことは了解しておいてね。
</p>
<h4>
Basics
</h4>
<h5>
Launch the WWW::Mechanize Browser
</h5>
<pre class="syntax-highlight">
<span class="synStatement">use </span>WWW::Mechanize;
<span class="synStatement">my</span> <span class="synIdentifier">$mech</span> = WWW::Mechanize-&#62;<span class="synStatement">new</span>( <span class="synConstant">autocheck </span>=&#62; <span class="synConstant">1</span> );
</pre>
<p>
この「autocheck => 1」は、失敗したら自動的に終了するためのフラグ。自分で初期化できなかったのときの処理を書きたければ、外してね。
</p>
<h5>
Fetch a page
</h5>
<pre class="syntax-highlight">
<span class="synIdentifier">$mech</span> -&#62; get( <span class="synConstant">&#34;http://search.cpan.org&#34;</span> );
<span class="synStatement">print</span> <span class="synIdentifier">$mech</span>-&#62;content;
</pre>
<p>
$mech->contentは、getしたウェブページの生のHTMLを格納している。contentメソッド上では、いかなる方法でもパースされていなければ、処理も加えられていないよ。
</p>
<h5>
Fetch a page into a file
</h5>
<p>
取得したページを直接ファイルに書き込みたい場合がある。その場合には、以下のようにする。
</p>
<pre class="syntax-highlight">
<span class="synIdentifier">$mech</span>-&#62;get( <span class="synConstant">&#34;http://www.cpan.org/src/stable.tar.gz&#34;</span>,
<span class="synConstant">&#34;:content_file&#34;</span> =&#62; <span class="synConstant">&#34;stable.tar.gz&#34;</span>);
</pre>
<h4>
Links
</h4>
<h5>
Find all image links
</h5>
<pre class="syntax-highlight">
<span class="synStatement">my</span> <span class="synIdentifier">@links</span> = <span class="synIdentifier">$mech</span>-&#62;find_all_links
(<span class="synConstant">tag </span>=&#62; <span class="synConstant">&#34;a&#34;</span>,
<span class="synConstant">url_regez </span>=&#62; <span class="synConstant">qr/</span><span class="synSpecial">\.</span><span class="synConstant">jpe</span><span class="synSpecial">?</span><span class="synConstant">g|gif|png</span><span class="synSpecial">)</span><span class="synConstant">$/i</span>);
</pre>
<h5>
Find all download links
</h5>
<p>
&#8220;download&#8221;とあるリンク全て取得するよ。
</p>
<pre class="syntax-highlight">
<span class="synStatement">my</span> <span class="synIdentifier">@links</span> = <span class="synIdentifier">$mech</span>-&#62;find_all_links
(<span class="synConstant">tag </span>=&#62; <span class="synConstant">&#34;a&#34;</span>,
<span class="synConstant">text_regex </span>=&#62; <span class="synConstant">qr/</span><span class="synSpecial">\b</span><span class="synConstant">douwnload</span><span class="synSpecial">\b</span><span class="synConstant">/</span>);
</pre>
</div>