質問編集履歴

4

追記の表示を追加しました

2020/05/07 10:34

投稿

begenner
begenner

スコア79

test CHANGED
File without changes
test CHANGED
@@ -132,7 +132,7 @@
132
132
 
133
133
  ## コード
134
134
 
135
- ### スクレイピングするHTML
135
+ ### スクレイピングするHTML(整形)
136
136
 
137
137
  - sample.html
138
138
 
@@ -188,7 +188,7 @@
188
188
 
189
189
 
190
190
 
191
- ### 修正したコード(Ruby)
191
+ ### 追記:修正したコード(Ruby)
192
192
 
193
193
  ```ruby
194
194
 

3

コードの順番を変更しました

2020/05/07 10:34

投稿

begenner
begenner

スコア79

test CHANGED
File without changes
test CHANGED
@@ -188,7 +188,7 @@
188
188
 
189
189
 
190
190
 
191
- ### 修正したコード
191
+ ### 修正したコード(Ruby)
192
192
 
193
193
  ```ruby
194
194
 
@@ -206,6 +206,68 @@
206
206
 
207
207
 
208
208
 
209
+ foo = page.xpath("//div[@class='aaa']//text()")
210
+
211
+ bar = page.xpath("//div[@class='aaa']/span[@class="bbb"]//text()")
212
+
213
+ extracted_datas = (foo - bar).map{|x| x.text.strip}.select{|x| x!=""}
214
+
215
+
216
+
217
+ p extracted_datas
218
+
219
+
220
+
221
+ # 現状だと下記のようにデータが取得されます
222
+
223
+ #[
224
+
225
+ # "ooo",
226
+
227
+ # "qqq",
228
+
229
+ # "yyy",
230
+
231
+ # "zzz"
232
+
233
+ #]
234
+
235
+
236
+
237
+ # 理想は下記のようにデータが取得されること
238
+
239
+ #[
240
+
241
+ # "ooopppqqq",
242
+
243
+ # "yyy",
244
+
245
+ # "zzz"
246
+
247
+ #]
248
+
249
+ ```
250
+
251
+
252
+
253
+ ### 現状のコード
254
+
255
+ ```ruby
256
+
257
+ require 'mechanize'
258
+
259
+
260
+
261
+ agent = Mechanize.new
262
+
263
+ # sample.html のコードが含まれるurlから情報を取得
264
+
265
+ page = agent.get(url)
266
+
267
+ html_infos = page.search('.aaa')
268
+
269
+
270
+
209
271
  extracted_datas = []
210
272
 
211
273
  html_infos.each do |ele|
@@ -215,67 +277,3 @@
215
277
  end
216
278
 
217
279
  ```
218
-
219
-
220
-
221
- ### 現状のコード
222
-
223
- - main.rb
224
-
225
- ```ruby
226
-
227
- require 'mechanize'
228
-
229
-
230
-
231
- agent = Mechanize.new
232
-
233
- # sample.html のコードが含まれるurlから情報を取得
234
-
235
- page = agent.get(url)
236
-
237
- html_infos = page.search('.aaa')
238
-
239
-
240
-
241
- foo = page.xpath("//div[@class='aaa']//text()")
242
-
243
- bar = page.xpath("//div[@class='aaa']/span[@class="bbb"]//text()")
244
-
245
- extracted_datas = (foo - bar).map{|x| x.text.strip}.select{|x| x!=""}
246
-
247
-
248
-
249
- p extracted_datas
250
-
251
-
252
-
253
- # 現状だと下記のようにデータが取得されます
254
-
255
- #[
256
-
257
- # "ooo",
258
-
259
- # "qqq",
260
-
261
- # "yyy",
262
-
263
- # "zzz"
264
-
265
- #]
266
-
267
-
268
-
269
- # 理想は下記のようにデータが取得されること
270
-
271
- #[
272
-
273
- # "ooopppqqq",
274
-
275
- # "yyy",
276
-
277
- # "zzz"
278
-
279
- #]
280
-
281
- ```

2

回答を参考にrubyファイルを修正、HTMLを変更、修正。 取得される配列を掲載

2020/05/07 10:33

投稿

begenner
begenner

スコア79

test CHANGED
File without changes
test CHANGED
@@ -4,10 +4,16 @@
4
4
 
5
5
  下記のHTMLコードから
6
6
 
7
- - `<div class="aaa">`タグ内のテキスト(3件 - xxx、yyy、zzz)を抽出したい
7
+ - `<div class="aaa">`タグ内のテキスト(3件 - ooopppqqq、yyy、zzz)を抽出したい
8
8
 
9
9
  - `<span class="bbb">`タグ内のテキスト(α、β、θ)は抽出したくない
10
10
 
11
+ - 1件目は一番難儀で`α`は不要、`ooo`、aタグ内のテキスト`ppp`、aタグ直後の`qqq`を連結した`ooopppqqq`を取得したい
12
+
13
+ - 2、3件目は`yyy`、`zzz`を取得したい
14
+
15
+
16
+
11
17
 
12
18
 
13
19
  といった場合のコードの書き方が全くわかりません(m_ _m)
@@ -26,27 +32,33 @@
26
32
 
27
33
  <div class="aaa">
28
34
 
29
- <span class="bbb">α</span>xxx
35
+ <span class="bbb">α</span>
36
+
30
-
37
+ ooo<a href="site_url">ppp</a>qqq
38
+
31
- </div>
39
+ </div>
32
-
40
+
33
- </li>
41
+ </li>
34
-
42
+
35
- <li>
43
+ <li>
36
-
44
+
37
- <div class="aaa">
45
+ <div class="aaa">
38
-
46
+
39
- <span class="bbb">β</span>yyy
47
+ <span class="bbb">β</span>
48
+
40
-
49
+ yyy
50
+
41
- </div>
51
+ </div>
42
-
52
+
43
- </li>
53
+ </li>
44
-
54
+
45
- <li>
55
+ <li>
46
-
56
+
47
- <div class="aaa">
57
+ <div class="aaa">
48
-
58
+
49
- <span class="bbb">θ</span>zzz
59
+ <span class="bbb">θ</span>
60
+
61
+ zzz
50
62
 
51
63
  </div>
52
64
 
@@ -76,10 +88,134 @@
76
88
 
77
89
  ### 期待する動作
78
90
 
79
- - `<div class="aaa">`タグ内のテキスト(3件 - xxx、yyy、zzz)を抽出したい
91
+ - `<div class="aaa">`タグ内のテキスト(3件 - ooopppqqq、yyy、zzz)を抽出したい
80
92
 
81
93
  - `<span class="bbb">`タグ内のテキスト(α、β、θ)は抽出したくない
82
94
 
95
+ - 1件目は一番難儀で`α`は不要、`ooo`、aタグ内のテキスト`ppp`、aタグ直後の`qqq`を連結した`ooopppqqq`を取得したい
96
+
97
+ - 2、3件目は`yyy`、`zzz`を取得したい
98
+
99
+ ```ruby
100
+
101
+ # 現状だと下記のようにデータが取得されます
102
+
103
+ #[
104
+
105
+ # "ooo",
106
+
107
+ # "qqq",
108
+
109
+ # "yyy",
110
+
111
+ # "zzz"
112
+
113
+ #]
114
+
115
+
116
+
117
+ # 理想は下記のようにデータが取得されること
118
+
119
+ #[
120
+
121
+ # "ooopppqqq",
122
+
123
+ # "yyy",
124
+
125
+ # "zzz"
126
+
127
+ #]
128
+
129
+ ```
130
+
131
+
132
+
133
+ ## コード
134
+
135
+ ### スクレイピングするHTML
136
+
137
+ - sample.html
138
+
139
+ ```html
140
+
141
+ <div class="list">
142
+
143
+ <ol>
144
+
145
+ <li>
146
+
147
+ <div class="aaa">
148
+
149
+ <span class="bbb">α</span>
150
+
151
+ ooo<a href="site_url">ppp</a>qqq
152
+
153
+ </div>
154
+
155
+ </li>
156
+
157
+ <li>
158
+
159
+ <div class="aaa">
160
+
161
+ <span class="bbb">β</span>
162
+
163
+ yyy
164
+
165
+ </div>
166
+
167
+ </li>
168
+
169
+ <li>
170
+
171
+ <div class="aaa">
172
+
173
+ <span class="bbb">θ</span>
174
+
175
+ zzz
176
+
177
+ </div>
178
+
179
+ </li>
180
+
181
+ </ol>
182
+
183
+ </div>
184
+
185
+ ```
186
+
187
+
188
+
189
+
190
+
191
+ ### 修正したコード
192
+
193
+ ```ruby
194
+
195
+ require 'mechanize'
196
+
197
+
198
+
199
+ agent = Mechanize.new
200
+
201
+ # sample.html のコードが含まれるurlから情報を取得
202
+
203
+ page = agent.get(url)
204
+
205
+ html_infos = page.search('.aaa')
206
+
207
+
208
+
209
+ extracted_datas = []
210
+
211
+ html_infos.each do |ele|
212
+
213
+ extracted_datas << ele.inner_text
214
+
215
+ end
216
+
217
+ ```
218
+
83
219
 
84
220
 
85
221
  ### 現状のコード
@@ -102,68 +238,44 @@
102
238
 
103
239
 
104
240
 
105
- extracted_datas = []
106
-
107
- html_infos.each do |ele|
108
-
109
- extracted_datas << ele.inner_text
110
-
111
- end
112
-
113
-
114
-
115
- # 現状だと下記のようにデータが抽出されます
116
-
117
- # α xxx
118
-
119
- # β yyy
120
-
121
- # θ zzz
122
-
123
- ```
124
-
125
-
126
-
127
- - sample.html
128
-
129
- ```html
130
-
131
- <div class="list">
132
-
133
- <ol>
134
-
135
- <li>
136
-
137
- <div class="aaa">
138
-
139
- <span class="bbb">α</span>xxx
140
-
141
- </div>
142
-
143
- </li>
144
-
145
- <li>
146
-
147
- <div class="aaa">
148
-
149
- <span class="bbb">β</span>yyy
150
-
151
- </div>
152
-
153
- </li>
154
-
155
- <li>
156
-
157
- <div class="aaa">
158
-
159
- <span class="bbb">θ</span>zzz
160
-
161
- </div>
162
-
163
- </li>
164
-
165
- </ol>
166
-
167
- </div>
168
-
169
- ```
241
+ foo = page.xpath("//div[@class='aaa']//text()")
242
+
243
+ bar = page.xpath("//div[@class='aaa']/span[@class="bbb"]//text()")
244
+
245
+ extracted_datas = (foo - bar).map{|x| x.text.strip}.select{|x| x!=""}
246
+
247
+
248
+
249
+ p extracted_datas
250
+
251
+
252
+
253
+ # 現状だと下記のようにデータが取得されます
254
+
255
+ #[
256
+
257
+ # "ooo",
258
+
259
+ # "qqq",
260
+
261
+ # "yyy",
262
+
263
+ # "zzz"
264
+
265
+ #]
266
+
267
+
268
+
269
+ # 理想は下記のようにデータが取得されること
270
+
271
+ #[
272
+
273
+ # "ooopppqqq",
274
+
275
+ # "yyy",
276
+
277
+ # "zzz"
278
+
279
+ #]
280
+
281
+ ```

1

質問に関するタグを追加しました

2020/05/07 10:32

投稿

begenner
begenner

スコア79

test CHANGED
File without changes
test CHANGED
File without changes