1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gooブログにあるブログの全エントリーを wget でリップしたい場合のTIPS 2

Posted at

(この記事では、 Linux Mint 22.1 にインストールした GNU Wget 1.21.4 built on linux-gnu. を端末エミュレーターで使っています。)
goo ブログが今年 2025/11/18 に終了すると発表されました。
前に書いた記事では、 wget のスパイダー機能を使う事で、自動でエントリーをダウンロードするようにしてみました。
ですが、同じエントリーが最後の ?(文字列) の有無で別ページと認識されて重複ダウンロードされたりと、効率が悪いのが、やってみてわかりました。
goo ブログの個別のブログの表紙のURLは、

https://blog.goo.ne.jp/(ブログID)

となっていて、最後に / は付きませんが、ブログは、

https://blog.goo.ne.jp/(ブログID)/(内容)

という構造になっています。
エントリーは、 https://blog.goo.ne.jp/(ブログID)/e/ 以下にあります。
ページのリストは、 https://blog.goo.ne.jp/(ブログID)/arcvhttps://blog.goo.ne.jp/(ブログID)/arcv?page=1 と同じで、自然数が無限大まで続いていって、個数を超えると、

<aside>該当する記事はありません。<br />

とでます。
そこで、

#!/usr/local/bin/perl

use utf8;
use open IO => ":encoding(utf-8)";
use strict;
use vars qw/$baseuri $blogid $i $listfile/;
use LWP::Simple;

$baseuri = $ARGV[0];
$baseuri =~ m{^https://blog\.goo\.ne\.jp/([^/]+)/?$} || die "goo blog URI is not correct\n";
$blogid = $1;

$baseuri =~ s#/$##;

$i = 1;
!-f 'list.txt' || die "list.txt already exists.\n";
open my $fh,'>','list.txt';
while(1){
    my $downloaduri = "$baseuri/arcv/?page=$i";
    local $_ = get($downloaduri);
    if(m{<aside>該当する記事はありません。<br />}){
	close $fh;
	last;
    }
    {
	open my $fh2,'>',sprintf('%04d.html',$i);
	print $fh2 $_;
	close $fh2;
    }
    foreach my $line(split /\n/){
	$line =~ /<section><span class="mod-arcv-tit">/ || next;
	$line =~ m{<a href="(https://blog\.goo\.ne\.jp/[^/]+/e/\w+)">} && print $fh "$1\n";
    }
    $i++;
}

というスクリプト arcv.pl を作って(修正BSDライセンスで公開します。)、ブログのエントリーが載っているリストのページをダウンロードして、エントリーの URI のリストである list.txt を生成するようにしてみました。

cd ~/site-rips/blog.goo.ne.jp/(ブログID)/arcv
perl ../../arcv.pl https://blog.goo.ne.jp/(ブログID)
cd ../e/
wget -i ../arcv/list.txt

という感じで、リップしたいブログの全エントリーをダウンロードできました。
以下で、画像ファイルもダウンロードしています。

cd ~/site-rips/blog.goo.ne.jp/(ブログID)/
perl -nle 'my @l = split /\"/;foreach my $line(@l){if($line =~ m{^https://blogimg.goo.ne.jp/}){$line =~ s/\?.*//;print $line}}' e/* | sort -u | perl -nle 'my $line = $_;s#^https://##;print $line if(!-f $_ && ! m{/$});' | wget -x -i - -c
1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?