lang
1require 'mechanize' 2 3agent = Mechanize.new 4page = agent.get('http://hoge.com/') 5regex = /<a href="([^"]+)"><img src/ 6link = page.link_with(:href => /$1/).click 7hai = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
これはhttp://example.com/というサイトにある画像を保存するためのプログラムです
しかしこのプログラムを実行しても以下のエラーが出ます
undefined method `fetch' for nil:NilClass (NoMethodError)
これはプログラム中の以下の部分の書き方が誤っているからだと思います
lang
1link = page.link_with(:href => /$1/).click
この/$1/に正規表現ではなく、実際にあるURLを書き込むとエラーは出ません
また、他のプログラムで試したので正規表現自体が間違っている、ということもないと思います
link_withメソッドのなかで以上のような、正規表現を実現するためにはどうすれば良いのでしょうか
教えてください
lang
1require 'mechanize' 2 3agent = Mechanize.new 4page = agent.get('http://example.com/') 5regex = /<a href="([^"]+)"><img src/ 6link = page.link_with(:href => /$1/).click 7img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
これはhttp://example.com/というサイトにある画像を保存するためのプログラムです
しかしこのプログラムを実行しても以下のエラーが出ます
undefined method `fetch' for nil:NilClass (NoMethodError)
これはプログラム中の以下の部分の書き方が誤っているからだと思います
lang
1link = page.link_with(:href => /$1/).click
この/$1/に正規表現ではなく、実際にあるURLを書き込むとエラーは出ません
また、他のプログラムで試したので正規表現自体が間違っている、ということもないと思います
link_withメソッドのなかで以上のような、正規表現を実現するためにはどうすれば良いのでしょうか
教えてください
追記
これはhttp://example.com/というサイトにある画像を保存するためのプロクラムです
http://example.com/には以下のソースがあり、そのaタグのなかをlink_withメソッドでクリックしたいです
このとき、自分の必要とするリンク先は任意のURLで、次に来るHTMLタグが<img src> からはじまっているものなのでそれを利用した正規表現を書きます
<a href="http://random.com/randomstring"><img src="http://img.example.com/example.jpg">
プログラム中に記述した正規表現では以下にマッチしますが$1ではhttp://hoge.com/randomstringにマッチします(おそらくこの辺が自分でよくわかっていません)
<a href="http://random.com/randomstring"><img src
そのためlink_withメソッドの正規表現に$1を渡せばうまくいくかなと思ったのですが、やはりだめでした
説明がうまくできずすみません
やりたいことを端的に述べると以下になります
・http://example.comのリンク先にある画像を取得したい
・そのためにまず、リンク先を正規表現で探してlink_withメソッドでクリックする
・最後にimage_withとfetch.save_asをもちいて保存
たとえば、以下のプログラムだとhttp://random.com/randomstringにある画像は、保存できるのですが実際は任意のURLなので、正規表現でURLを指定したいです
lang
1require 'mechanize' 2 3agent = Mechanize.new 4page = agent.get('http://exmaple.com/') 5link = page.link_with(:href => "http://random.com/randomstring").click 6img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
以下のプログラムの場合は正規表現がうまくマッチせず使えません
lang
1require 'mechanize' 2 3agent = Mechanize.new 4page = agent.get('http://exmaple.com/') 5link = page.link_with(:href => /<a href="([^"]+)"><img src/).click 6img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/05/31 07:56