memo.log

技術情報の雑なメモ

特定の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