2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsで特定のデータ形式をスクレイピングしたい

Last updated at Posted at 2018-07-25

とあるサイトに陳列されるデータのうち
指定の形式で並べられているものをスクレイピングしたい。

最終的には、その中から必要なものだけを並べたものを作りたい

data.html
<div class="lis-se" data-index="0" data-type="sure">
<img src="http://s/2.jpg">
<div class="prt-having-num">1034

こういうデータが数千件並ぶ中で、
必要な"data-index"の値を持つ"prt-having-num"クラスの値 を取得したい

##参考にしているサンプルコード
まずここに自分なりの翻訳をかけてみる

require 'open-uri' #URLを読み取るためのライブラリ
require 'nokogiri' #スクレイピングに必要なライブラリ


# スクレイピング先のURL
url = 'http://matome.naver.jp/tech'

charset = nil #ページ内の文字コードに nil (nilガードってやつ?)
html = open(url) do |f| # html に 開いたURL、fオブジェクトを実行
  charset = f.charset   # URL中で指定された文字種別を取得(文字化け対策?)
  f.read           # htmlを読み込んで変数htmlに渡す
end

# htmlをパース(解析)してオブジェクトを作成、docに入れる
# なんでHTMLが大文字なんだっけ……
doc = Nokogiri::HTML.parse(html, nil, charset)

# docを読み込んで、xpathをかける……
doc.xpath('//li[@class="mdTopMTMList01Item"]').each do |node|
#理解した。
#ページ内の li要素を探し 
#classに "mdTopMTMList01Item" を指定してあるものを見つけたら
#それぞれにdoするんだ。多分



  # tilte cssファイルのh3タグを検出して、その中のテキストをpしてる?
  # pメソッドは、引数のオブジェクトを文字列にして標準出力します。 なるほど?
  p node.css('h3').inner_text

  # 記事のサムネイル画像 imgもタグ検出かな?
  # .attributeメソッド は モデルの全てのカラムと属性を取得する… 'src' は?
  p node.css('img').attribute('src').value

  # 記事のサムネイル画像 aタグ検出、href属性
  # .valueメソッドは読み込んだものの値を配列として取得……
  p node.css('a').attribute('href').value
end

ええと、これの必要なところを書き換えてみるとして……

require 'open-uri' 
require 'nokogiri' 

url = 'http://data.html' #該当のURLを入力

charset = nil 
  html = open(url) do |f| 
  charset = f.charset 
  f.read 
end


doc = Nokogiri::HTML.parse(html, nil, charset)

#xpathで、div要素で囲まれたclass lis-se がかかったテキストを取るには
doc.xpath('//div[@class="lis-se"]').each do |node|

#data-index が指定の値 がかかったテキストを取る方法 【不明】


#xpathで、div要素で囲まれたclass prt-having-num がかかったテキストを取るには
doc.xpath('//div[@class="prt-having-num"]').each do |node|

解決
#んっと……? devタグを取る…?
#特定のclass がかかった数列を取得もどうやるんだ?

未解決
#deta-index を参照ってどうやるんだ?

取るべきデータのデータの特定に必要なのは
class="lis-se" と data-index="0"
class="prt-having-num" の 1034

end

自分なりの翻訳を経てわかったことは……
どこがわからないか、何を見つければいいかはなんとなーくわかった。
ようなわかってないような……

ので、引き続きそれぞれの取得方法について調べてみる。

###参考になりそうな情報

のこぎりの使い方
https://rails-school.net/rails-nokogiri/

Xpathってなんや
https://tech.starttoday-tech.com/entry/xpath

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?