55
55

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.

各種ブログサービスの過去記事を全て取得する

Last updated at Posted at 2014-09-12

※随時追加中

ブログの過去記事全てのタイトルとURLを取得したいのですが、RSSでは最新記事数件しか取得できないので、Webスクレイピングしてしてみます。

今回はRubyでスクレイピングする際の定番ライブラリである「Nokogiri」を使います。まず初めに以下のブログ記事を読む事をおすすめします。

実際に記事一覧を取得する流れは、
(1)htmlを取得 → (2)nokogiriでパース → (3)タイトル/URL取得 → (4)次ページがあれば(1)へ戻る
みたいな感じです。

今回はあくまでタイトルとURL一覧を作りたいので、各記事の本文取得までは行っていません。
実際にスクレイピングする時は、以下の記事に目を通す事をおすすめします。

記事一覧ページまとめ

各種ブログサービスの記事一覧ページをまとめました。

|サービス名|記事一覧ページURL|
|---|---|---|
|Amebaブログ|http://ameblo.jp/:id/entrylist.html|
|Hatenaブログ|http://:id.hatenablog.com/archive|
|FC2ブログ|http://:id.blog.fc2.com/archives.html|
|SeeSaaブログ|http://:id.seesaa.net/pages/user/search/?keyword=%81B|
※SeeSaaブログについては後述

Amebaブログ

scraping_ameblo.rb
require 'open-uri'
require 'nokogiri'

# スクレイピングするアメブロID指定
blog_id = ''
url = "http://ameblo.jp/#{blog_id}/entrylist.html"

loop do
  # html取得
  charset = nil
  html = open(url) do |f|
    charset = f.charset
    f.read
  end

  # htmlパース
  doc = Nokogiri::HTML.parse(html, nil, charset)

  # 記事一覧
  doc.css('.contentTitleArea a').each do |node|
    p node.text  #記事タイトル
    p node.attribute('href').value  #記事URL
  end

  # 次ページがなければ終了
  unless doc.css('.pagingNext').empty?
    url = doc.css('.pagingNext').attribute('href').value
    p '---------------------------------------------'
  else
    break
  end
end

Hatenaブログ

scraping_hatena.rb
require 'open-uri'
require 'nokogiri'

# スクレイピングするhatenaID指定
blog_id = ''
url = "http://#{blog_id}.hatenablog.com/archive"

loop do
  # html取得
  charset = nil
  html = open(url) do |f|
    charset = f.charset
    f.read
  end

  # htmlパース
  doc = Nokogiri::HTML.parse(html, nil, charset)

  # 記事一覧
  doc.css('.archive-entries section h1.entry-title a').each do |node|
    p node.text  #記事タイトル
    p node.attribute('href').value  #記事URL
  end

  # 次ページがなければ終了
  unless doc.css('.pager .pager-next').empty?
    url = doc.css('.pager .pager-next a').attribute('href').value
    p '---------------------------------------------'
  else
    break
  end
end

FC2ブログ

※IDによっては、記事一覧ページを取得できませんでした。(調査中)

scraping_fc2.rb
require 'open-uri'
require 'nokogiri'

# スクレイピングするfc2ID指定
blog_id = ''
url = "http://#{blog_id}.blog.fc2.com/archives.html"

loop do
  # html取得
  charset = nil
  html = open(url) do |f|
    charset = f.charset
    f.read
  end

  # htmlパース
  doc = Nokogiri::HTML.parse(html, nil, charset)

  # 記事一覧
  doc.css('.alllog dl dt').each do |node|
    p node.css('a.entry_title').text  #記事タイトル
    p "http://#{blog_id}.blog.fc2.com/#{node.css('a.entry_title').attribute('href').value}"  #記事URL
  end

  # 次ページがなければ終了
  unless doc.css('.page a')[0].text == '<<前のページ' && doc.css('.page a')[1].nil?
    url = "http://#{blog_id}.blog.fc2.com#{doc.css('.page a').last.attribute('href').value}"
    p '---------------------------------------------'
  else
    break
  end

end

SeeSaaブログ

SeeSaaブログの場合は記事一覧ページが存在しないので、 『「。」で記事全文検索した結果ページ』 を記事一覧ページとすることにします。ほら、日本語で書かれたブログの場合、必ず「。」使いますよね?;汗

またShift-JISで返ってくるので、必ずUTF-8にエンコードします。

scraping_seesaa.rb
require 'open-uri'
require 'nokogiri'
require 'kconv'

# スクレイピングするSeeSaaID指定
blog_id = ''
url = "http://#{blog_id}.seesaa.net/pages/user/search/?keyword=%81B"

# html取得
html = open(url) do |f|
  f.read
end

# htmlパース
doc = Nokogiri::HTML.parse(html.toutf8, nil, 'utf-8')

doc.css('.blog .blogbody h3.title a').each do |node|
  p node.text #記事タイトル
  p node.attribute('href').value  #記事URL
end
55
55
1

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
55
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?