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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

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

Q&A

解決済

2回答

299閲覧

複数のwebサイトのトップページにある文字数を取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

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

0グッド

1クリップ

投稿2018/06/21 02:46

プログラミングは初心者です
rubyのnokogiriを使ってスクレイピングをしているのですが、今複数のサイトのトップページにある文字の数を調べています。

ruby

1require 'nokogiri' 2require 'open-uri' 3 4url = "http://www.xxxxxxxxxxxxx" 5 6charset = nil 7html = open(url) do |f| 8 charset = f.charset 9 f.read 10end 11 12doc = Nokogiri::HTML.parse(html, nil, 'utf-8') 13txt = doc.css("body").text 14puts txt.length

現在このようなスクリプトで一つ一つそのサイトのbody部分(普通にサイトを閲覧して私たちの目に見えるところ)にある文字の数を調査しています。
この"http://www.xxxxxxxxxxxxx"部分を一回一回地道に変えずに、複数のurlを指定して一気に取得する方法はないでしょうか。

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

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

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

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

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

guest

回答2

0

色々やって見て、なんとか目的の動作をすることができました。
csvファイルにリストを入れてそこから一行ずつurlを取り出しました。

ruby

1 2line = [] 3CSV.open("urllist.csv", mode = "rt") do |csv| 4 line = csv.readlines 5end 6 7line.each{ |link| 8 for url in link do 9 charset = nil 10 html = open(url) do |f| 11 charset = f.charset 12 f.read 13 end 14 doc = Nokogiri::HTML.parse(html,nil,'utf-8') 15 doc.css('body').each do |txt| 16 word = txt.text 17 puts word.length 18 end 19 end 20 } 21

これで複数のサイトから一気に同一の要素を取得するということができました。

投稿2018/06/23 05:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

  1. urlをプログラム中に直接かきこむのではなく、適当なテキストファイルから一行読み取るように変更する。
  2. テキストファイルから一行読んで所定の処理ができることを確認したら、forループを作って、2行目、3行目……と同じことが繰り返ようにプログラムを拡張する。

投稿2018/06/21 03:59

KojiDoi

総合スコア13671

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

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

退会済みユーザー

退会済みユーザー

2018/06/21 06:48

お答えいただきありがとうございます!アドバイスを受けて require 'nokogiri' require 'open-uri' require 'kconv' require 'csv' CSV.open("urllist.csv", mode = "rt") do |csv| line =[] line = csv.readlines for url in line do charset = nil html = open(url) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html,nil,charset) doc.css('body').each do |b| txt = b.text puts txt.length end end end 試しにこのようなスクリプトを書いて実行してみたところ、no implicit conversion of Array into String (TypeError)というエラーが出て来たのですが、これはどういう意味なのでしょう。これを解決するためにどのような考えや処理が必要になってくるのでしょうか?よろしければ教えてくださると嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問