質問編集履歴

1

詳細の追記

2015/05/30 15:57

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -37,3 +37,113 @@
37
37
  link_withメソッドのなかで以上のような、正規表現を実現するためにはどうすれば良いのでしょうか
38
38
 
39
39
  教えてください
40
+
41
+
42
+
43
+ ```lang-ruby
44
+
45
+ require 'mechanize'
46
+
47
+
48
+
49
+ agent = Mechanize.new
50
+
51
+ page = agent.get('http://example.com/')
52
+
53
+ regex = /<a href="([^"]+)"><img src/
54
+
55
+ link = page.link_with(:href => /$1/).click
56
+
57
+ img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
58
+
59
+ ```
60
+
61
+ これはhttp://example.com/というサイトにある画像を保存するためのプログラムです
62
+
63
+ しかしこのプログラムを実行しても以下のエラーが出ます
64
+
65
+ > undefined method `fetch' for nil:NilClass (NoMethodError)
66
+
67
+ これはプログラム中の以下の部分の書き方が誤っているからだと思います
68
+
69
+ ```lang-ruby
70
+
71
+ link = page.link_with(:href => /$1/).click
72
+
73
+ ```
74
+
75
+ この/$1/に正規表現ではなく、実際にあるURLを書き込むとエラーは出ません
76
+
77
+ また、他のプログラムで試したので正規表現自体が間違っている、ということもないと思います
78
+
79
+ link_withメソッドのなかで以上のような、正規表現を実現するためにはどうすれば良いのでしょうか
80
+
81
+ 教えてください
82
+
83
+
84
+
85
+ 追記
86
+
87
+ これはhttp://example.com/というサイトにある画像を保存するためのプロクラムです
88
+
89
+ http://example.com/には以下のソースがあり、そのaタグのなかをlink_withメソッドでクリックしたいです
90
+
91
+ このとき、自分の必要とするリンク先は任意のURLで、次に来るHTMLタグが<img src> からはじまっているものなのでそれを利用した正規表現を書きます
92
+
93
+ > <a href="http://random.com/randomstring"><img src="http://img.example.com/example.jpg">
94
+
95
+ プログラム中に記述した正規表現では以下にマッチしますが$1ではhttp://hoge.com/randomstringにマッチします(おそらくこの辺が自分でよくわかっていません)
96
+
97
+ > <a href="http://random.com/randomstring"><img src
98
+
99
+ そのためlink_withメソッドの正規表現に$1を渡せばうまくいくかなと思ったのですが、やはりだめでした
100
+
101
+
102
+
103
+ 説明がうまくできずすみません
104
+
105
+ やりたいことを端的に述べると以下になります
106
+
107
+ ・http://example.comのリンク先にある画像を取得したい
108
+
109
+ ・そのためにまず、リンク先を正規表現で探してlink_withメソッドでクリックする
110
+
111
+ ・最後にimage_withとfetch.save_asをもちいて保存
112
+
113
+
114
+
115
+ たとえば、以下のプログラムだとhttp://random.com/randomstringにある画像は、保存できるのですが実際は任意のURLなので、正規表現でURLを指定したいです
116
+
117
+ ```lang-ruby
118
+
119
+ require 'mechanize'
120
+
121
+
122
+
123
+ agent = Mechanize.new
124
+
125
+ page = agent.get('http://exmaple.com/')
126
+
127
+ link = page.link_with(:href => "http://random.com/randomstring").click
128
+
129
+ img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
130
+
131
+ ```
132
+
133
+ 以下のプログラムの場合は正規表現がうまくマッチせず使えません
134
+
135
+ ```lang-ruby
136
+
137
+ require 'mechanize'
138
+
139
+
140
+
141
+ agent = Mechanize.new
142
+
143
+ page = agent.get('http://exmaple.com/')
144
+
145
+ link = page.link_with(:href => /<a href="([^"]+)"><img src/).click
146
+
147
+ img = link.image_with(src: /jpg\Z/).fetch.save_as('img.jpg')
148
+
149
+ ```