動かざることバグの如し

近づきたいよ 君の理想に

スクレイピングツールMechanizeでリンク先の絶対URLを取得する方法

mechanizeとは言わずとしれたRubyスクレイピングツールである。

で、例えば以下のようにページ内のaタグからリンク先のURLを取得したいとする。

url = "https://stackoverflow.com/questions/34471102/python-nameerror-name-include-is-not-defined"
agent =Mechanize.new
agent.get url
href = agent.page.at('a.question-hyperlink').attr('href')
p href.to_s

が、実際にstack overflowのサイトを見るとわかるが、以下のようにURLではなくpathになってしまう。いわゆる相対パスってやつ

> "/questions/34471102/python-nameerror-name-include-is-not-defined"

絶対パスで取得する方法

http://〜から始まる形で欲しい場合は、以下のようにする

p (agent.page.uri.merge href).to_s
> "https://stackoverflow.com/questions/34471102/python-nameerror-name-include-is-not-defined"

最後に.to_sしているのは、URI::HTTPSクラスになってしまうため。

参考リンク