質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1252閲覧

Ruby で変数のローカルを増やしたいです。

bouyomisan

総合スコア87

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/03/12 14:01

###前提・実現したいこと
Ruby でスクレ―ピングをするために Anemone をつかっています。
複数のリンクからタイトルを取りだしてまとめて表示したいのですが、変数のスコープが伸びずに困っています。

###ソースコード

require 'anemone' require 'nokogiri' require 'kconv' results = [] urls = [] urls.push("https://www.scientificamerican.com/article/epa-chief-pruitt-refuses-to-link-co2-and-global-warming/") urls.push("https://blogs.scientificamerican.com/anecdotes-from-the-archive/medallions-and-the-dark-arts-of-propaganda-1917/") Anemone.crawl(urls, :depth_limit => 0, :delay=>1) do |anemone| anemone.on_every_page do |page| doc = Nokogiri::HTML.parse(page.body.toutf8) title = doc.xpath("//main/header/div/h1").text results.push(title) #ここで表示させることはできても #puts results end #ここで表示できてほしいこ。でもここはだめ。 puts results end

###試したこと
return で複数のリンクのタイトルがほしいので、上のコードでいう下側の puts results まで値が表示されててほしいのですが、表示されません。どうしたらいいでしょう。おしえてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

これは変数のスコープの問題じゃなくて、実行順序の問題ですね。
puts resultを、Anemone.crawl(~~~のブロックの外に出せば良いと思います。

投稿2017/03/13 04:17

otn

総合スコア84529

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bouyomisan

2017/03/13 07:04

たしかにこれでもできました! Anemone もややこしいですね。ありがとうございますm(__)m
guest

0

ベストアンサー

after_crawl で rusulst を表示させる必要があると思います。

x.rb

ruby

1require 'anemone' 2 require 'nokogiri' 3 require 'kconv' 4 5 results = [] 6 urls = [] 7 urls.push("https://www.scientificamerican.com/article/epa-chief-pruitt-refuses-to-link-co2-and-global-warming/") 8 urls.push("https://blogs.scientificamerican.com/anecdotes-from-the-archive/medallions-and-the-dark-arts-of-propaganda-1917/") 9 10 Anemone.crawl(urls, :depth_limit => 0, :delay=>1) do |anemone| 11 anemone.on_every_page do |page| 12 doc = Nokogiri::HTML.parse(page.body.toutf8) 13 title = doc.xpath("//main/header/div/h1").text 14 results.push(title) 15 end 16 17 anemone.after_crawl do |page| 18 puts results 19 end 20 end

実行結果

$ ruby x.rb EPA Chief Pruitt Refuses to Link CO2 and Global Warming Medallions and the Dark Arts of Propaganda, 1917

投稿2017/03/12 17:01

編集2017/03/13 12:46
katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bouyomisan

2017/03/13 07:03

ほんとだ!できました! after_crawl とかいうのがあったのですね。 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問