回答編集履歴

7

修正

2019/08/24 10:35

投稿

退会済みユーザー
test CHANGED
@@ -96,8 +96,6 @@
96
96
 
97
97
  page = agent.get("https://teratail.com/feed/active/#{i + 1}")
98
98
 
99
- break
100
-
101
99
  end
102
100
 
103
101
  rescue Mechanize::ResponseCodeError

6

修正

2019/08/24 10:35

投稿

退会済みユーザー
test CHANGED
@@ -53,3 +53,87 @@
53
53
 
54
54
 
55
55
  ```
56
+
57
+
58
+
59
+ 追記
60
+
61
+ ```Ruby
62
+
63
+ require 'mechanize'
64
+
65
+ require 'csv'
66
+
67
+
68
+
69
+ agent = Mechanize.new
70
+
71
+ agent.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
72
+
73
+ + ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
74
+
75
+
76
+
77
+ urls = []
78
+
79
+
80
+
81
+ begin
82
+
83
+ page = agent.get('https://teratail.com/')
84
+
85
+
86
+
87
+ 1.step do |i|
88
+
89
+ page.css('.C-questionFeedItemTitle > a').each do |a|
90
+
91
+ urls << 'https://teratail.com' + a['href']
92
+
93
+ end
94
+
95
+ sleep(rand(3..5))
96
+
97
+ page = agent.get("https://teratail.com/feed/active/#{i + 1}")
98
+
99
+ break
100
+
101
+ end
102
+
103
+ rescue Mechanize::ResponseCodeError
104
+
105
+ # Do Nothing
106
+
107
+ end
108
+
109
+
110
+
111
+ if urls.any?
112
+
113
+ lines = urls.map do |url|
114
+
115
+ sleep(rand(3..5))
116
+
117
+ page = agent.get(url)
118
+
119
+ [page.css('.p-questionHead__ttl').text.encode('cp932')]
120
+
121
+ end
122
+
123
+ CSV.open("file.csv", "wb") do |csv|
124
+
125
+ lines.each { |line| csv << line }
126
+
127
+ end
128
+
129
+ end
130
+
131
+
132
+
133
+ ```
134
+
135
+ 参考
136
+
137
+ [class CSV](https://docs.ruby-lang.org/ja/latest/class/CSV.html)
138
+
139
+ [CSV を文字コード変換しつつロード](https://qiita.com/labocho/items/8559576b71642b79df67)

5

修正

2019/08/24 10:31

投稿

退会済みユーザー
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  page.css('.article-title > a').each do |a|
28
28
 
29
- urls << a.attributes['href'].text
29
+ urls << a['href']
30
30
 
31
31
  end
32
32
 
@@ -46,6 +46,8 @@
46
46
 
47
47
  puts page.css('.article-title > a').text
48
48
 
49
+ sleep(rand(3..5))
50
+
49
51
  end
50
52
 
51
53
 

4

修正

2019/08/19 22:20

投稿

退会済みユーザー
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  page = agent.get(url)
46
46
 
47
- puts page.css('.article-title > a').text()
47
+ puts page.css('.article-title > a').text
48
48
 
49
49
  end
50
50
 

3

修正

2019/08/19 16:21

投稿

退会済みユーザー
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  end
32
32
 
33
- break unless page.css('.paging-next')
33
+ break if page.css('.paging-next').empty?
34
34
 
35
35
  sleep(rand(3..5))
36
36
 

2

修正

2019/08/19 16:19

投稿

退会済みユーザー
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  page.css('.article-title > a').each do |a|
28
28
 
29
- urls << a.attributes["href"].text
29
+ urls << a.attributes['href'].text
30
30
 
31
31
  end
32
32
 

1

修正

2019/08/19 16:15

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- あるサイトの記事一覧をすべて取得して各ページのタイトルを表示するクローラー。
1
+ 記事一覧をすべて取得して各ページのタイトルを表示するクローラー。
2
2
 
3
3
  ```Ruby
4
4
 
@@ -32,9 +32,9 @@
32
32
 
33
33
  break unless page.css('.paging-next')
34
34
 
35
+ sleep(rand(3..5))
36
+
35
37
  page = page.link_with(text: '次のページ').click
36
-
37
- sleep(rand(3..5))
38
38
 
39
39
  end
40
40