特定のGooブログの記事を全部スクレイピングするメモ
メモ
- Ruby / Nokogiri で愚直にたどった
- おそらく「各ページの全ページのリンクをたどっていく方法」と「記事一覧ページにあるページをすべて保存し、次の記事一覧ページをたどっていく方法」と2つやり方がある
- 前者は何かの条件で 404 になることがあった(おそらく記事を公開したあと、削除した、等)。記事同士の前後関係はリアルタイムではないようだ。
- したがって、後者の方法で行うこととした
- 記事一覧が最後になったタイミング(URL)の判定方法が分からなかったので、そこだけ手動で確認した
以下超雑スクリプト
require 'nokogiri' require 'open-uri' BASE_URL = "https://blog.goo.ne.jp" ENTRY_URL = '' # 最新の記事一覧ページのURL def save(title, text) File.open("#{title}.txt", 'w') do |file| file.puts text end end @next_url = ENTRY_URL loop do # まず一覧ページからリンク一覧を取得 html = URI.open(@next_url).read doc = Nokogiri::HTML(html) doc.css('span.mod-arcv-tit a').each do |link| # 個別のページを取得 link = link['href'] pp link html_kobetu = URI.open(link).read doc_kobetu = Nokogiri::HTML(html_kobetu) title = doc_kobetu.title pp title text = doc_kobetu.css('div.entry-body-text').first.text save(title, text) end if @next_url.include?("") # 最後の記事一覧ページ exit end @next_url = BASE_URL + doc.css('.mod-pre-nex-next a').first['href'] pp @next_url sleep 1 end