差支えなければ、スクレピング先のURLは消さないでもらえると間違いが指摘しやすいです。
というのも、doc.css(".content").css(".article_box.clearfix").css(".fl_right")
の条件自体が間違っているという可能性もないわけではないからです。
あるいは、htmlをダミーというか動作可能なサンプルにするとか。
動作可能なサンプルのHTMLとは、こういうやつです。
質問に記載しても問題がなく、
今回の条件doc.css(".content").css(".article_box.clearfix").css(".fl_right")
に合致するHTMLを考えるわけですね。
html
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8" />
5</head>
6<body>
7<div class="content">
8 <div class="article_box clearfix">
9 <div class="fl_right">
10 <h1><a href="http://example.com/title1">タイトル1</a></h1>
11 </div>
12 <div class="fl_right">
13 <h1><a href="http://example.com/title2">タイトル2</a></h1>
14 </div>
15 </div>
16</div>
17</body>
18</html>
とりあえず、このHTMLに対して処理するサンプルはこうなると思います。
ruby
1require "nokogiri"
2
3html =<<HTML
4<!DOCTYPE html>
5<html>
6<head>
7 <meta charset="utf-8" />
8</head>
9<body>
10<div class="content">
11 <div class="article_box clearfix">
12 <div class="fl_right">
13 <h1><a href="http://example.com/title1">タイトル1</a></h1>
14 </div>
15 <div class="fl_right">
16 <h1><a href="http://example.com/title2">タイトル2</a></h1>
17 </div>
18 </div>
19</div>
20</body>
21</html>
22HTML
23
24charset = 'utf-8'
25doc = Nokogiri::HTML.parse(html, nil, charset)
26
27@titles = []
28doc.css(".content").css(".article_box.clearfix").css(".fl_right").each do |row|
29 @titles << row.css("h1").css("a")
30end
31
32puts "titles.size=#{@titles.size}"
33@titles.each do |title|
34 puts title.text
35end
実行結果
titles.size=2
タイトル1
タイトル2
コードを見てもらうとお分かりかと思いますが、今回うまく行かない理由は@titlesを配列として各タイトルを格納すべきところを、毎回@titlesを上書きしてしまっているので最後の1件しか入っていないのが原因です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/03 01:06