回答編集履歴
4
parse_ranking_number の実装行数を削減
answer
CHANGED
@@ -22,28 +22,14 @@
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# 順位の全角数字 (1 〜 9位) を半角に変換
|
25
|
-
def parse_ranking_number(
|
25
|
+
def parse_ranking_number(char)
|
26
|
+
trigger_pattern = %w[1 2 3 4 5 6 7 8 9]
|
27
|
+
|
26
|
-
case
|
28
|
+
case char
|
27
|
-
when
|
29
|
+
when *trigger_pattern
|
28
|
-
1
|
29
|
-
|
30
|
+
trigger_pattern.index(char).succ
|
30
|
-
2
|
31
|
-
when '3'
|
32
|
-
3
|
33
|
-
when '4'
|
34
|
-
4
|
35
|
-
when '5'
|
36
|
-
5
|
37
|
-
when '6'
|
38
|
-
6
|
39
|
-
when '7'
|
40
|
-
7
|
41
|
-
when '8'
|
42
|
-
8
|
43
|
-
when '9'
|
44
|
-
9
|
45
31
|
else
|
46
|
-
|
32
|
+
char.to_i
|
47
33
|
end
|
48
34
|
end
|
49
35
|
|
3
コメント内容の修正
answer
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
html = Nokogiri::HTML(html)
|
15
15
|
|
16
|
-
# 順位, 大学名, 在籍者数を
|
16
|
+
# 正規表現で、順位, 大学名, 在籍者数を含む文字列を抜き出し
|
17
17
|
def extract_universities(html)
|
18
18
|
regexp = /([0-91234567890]{1,3}位:[○ ● ▲ ◆][^)]+))/
|
19
19
|
_, *data = html.text.split(regexp)
|
2
コードの処理について コメントを追記
answer
CHANGED
@@ -13,6 +13,7 @@
|
|
13
13
|
|
14
14
|
html = Nokogiri::HTML(html)
|
15
15
|
|
16
|
+
# 順位, 大学名, 在籍者数を正規表現で抜き出し
|
16
17
|
def extract_universities(html)
|
17
18
|
regexp = /([0-91234567890]{1,3}位:[○ ● ▲ ◆][^)]+))/
|
18
19
|
_, *data = html.text.split(regexp)
|
@@ -20,6 +21,7 @@
|
|
20
21
|
data
|
21
22
|
end
|
22
23
|
|
24
|
+
# 順位の全角数字 (1 〜 9位) を半角に変換
|
23
25
|
def parse_ranking_number(str)
|
24
26
|
case str
|
25
27
|
when '1'
|
@@ -45,6 +47,7 @@
|
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
50
|
+
# 順位, 大学名, 在籍者数を含む文字列をそれら要素ごとに分解して Hash に纏める
|
48
51
|
def parse_to_hash(universities_info_list)
|
49
52
|
universities_info_list.map do |x|
|
50
53
|
ranking, university_name = x.split(/位:[○ ● ▲ ◆]/)
|
1
修正: nokogiri の require 行を追記
answer
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
正規表現で巧く抜き出してあげると、「ランキング」「大学名」「在籍学生数」の3要素を Hash としてまとめることもできると思います
|
4
4
|
|
5
5
|
```ruby
|
6
|
+
require 'nokogiri'
|
7
|
+
|
6
8
|
html = <<EOF
|
7
9
|
<div class="Article__content">...
|
8
10
|
...
|