とあるサイトに陳列されるデータのうち
指定の形式で並べられているものをスクレイピングしたい。
最終的には、その中から必要なものだけを並べたものを作りたい
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