Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

※随時追加中

ブログの過去記事全てのタイトルと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
ya_s_u
デザインできるエンジニアです
https://www.wantedly.com/users/1158406
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした