質問するログイン新規登録

質問編集履歴

1

詳細の追記

2015/05/30 15:57

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -17,4 +17,59 @@
17
17
  この/$1/に正規表現ではなく、実際にあるURLを書き込むとエラーは出ません
18
18
  また、他のプログラムで試したので正規表現自体が間違っている、ということもないと思います
19
19
  link_withメソッドのなかで以上のような、正規表現を実現するためにはどうすれば良いのでしょうか
20
- 教えてください
20
+ 教えてください
21
+
22
+ ```lang-ruby
23
+ require 'mechanize'
24
+
25
+ agent = Mechanize.new
26
+ page = agent.get('http://example.com/')
27
+ regex = /<a href="([^"]+)"><img src/
28
+ link = page.link_with(:href => /$1/).click
29
+ img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
30
+ ```
31
+ これはhttp://example.com/というサイトにある画像を保存するためのプログラムです
32
+ しかしこのプログラムを実行しても以下のエラーが出ます
33
+ > undefined method `fetch' for nil:NilClass (NoMethodError)
34
+ これはプログラム中の以下の部分の書き方が誤っているからだと思います
35
+ ```lang-ruby
36
+ link = page.link_with(:href => /$1/).click
37
+ ```
38
+ この/$1/に正規表現ではなく、実際にあるURLを書き込むとエラーは出ません
39
+ また、他のプログラムで試したので正規表現自体が間違っている、ということもないと思います
40
+ link_withメソッドのなかで以上のような、正規表現を実現するためにはどうすれば良いのでしょうか
41
+ 教えてください
42
+
43
+ 追記
44
+ これはhttp://example.com/というサイトにある画像を保存するためのプロクラムです
45
+ http://example.com/には以下のソースがあり、そのaタグのなかをlink_withメソッドでクリックしたいです
46
+ このとき、自分の必要とするリンク先は任意のURLで、次に来るHTMLタグが<img src> からはじまっているものなのでそれを利用した正規表現を書きます
47
+ > <a href="http://random.com/randomstring"><img src="http://img.example.com/example.jpg">
48
+ プログラム中に記述した正規表現では以下にマッチしますが$1ではhttp://hoge.com/randomstringにマッチします(おそらくこの辺が自分でよくわかっていません)
49
+ > <a href="http://random.com/randomstring"><img src
50
+ そのためlink_withメソッドの正規表現に$1を渡せばうまくいくかなと思ったのですが、やはりだめでした
51
+
52
+ 説明がうまくできずすみません
53
+ やりたいことを端的に述べると以下になります
54
+ ・http://example.comのリンク先にある画像を取得したい
55
+ ・そのためにまず、リンク先を正規表現で探してlink_withメソッドでクリックする
56
+ ・最後にimage_withとfetch.save_asをもちいて保存
57
+
58
+ たとえば、以下のプログラムだとhttp://random.com/randomstringにある画像は、保存できるのですが実際は任意のURLなので、正規表現でURLを指定したいです
59
+ ```lang-ruby
60
+ require 'mechanize'
61
+
62
+ agent = Mechanize.new
63
+ page = agent.get('http://exmaple.com/')
64
+ link = page.link_with(:href => "http://random.com/randomstring").click
65
+ img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
66
+ ```
67
+ 以下のプログラムの場合は正規表現がうまくマッチせず使えません
68
+ ```lang-ruby
69
+ require 'mechanize'
70
+
71
+ agent = Mechanize.new
72
+ page = agent.get('http://exmaple.com/')
73
+ link = page.link_with(:href => /<a href="([^"]+)"><img src/).click
74
+ img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
75
+ ```