{Python}ウェブサイトやブログの画像を保存する(3)

前回は記事一覧ページに次ページが存在するかどうか判定するコードを書きました。
ここまでのコードで、画像の掲載されているページ全てにアクセスする準備が整いました。
今回はその個別ページから画像URLその他必要な情報を取得する方法について書こうと思います。


環境等

  • win 10
  • python2.7
  • python lib: BeautifulSoup
  • python lib: urllib2
  • python lib: re
  • google chrome

  • 個別ページから画像URLリストを取得

    個別ページの中からひとつをピックアップし、そのソースを見ながら、必要な情報がどこにあるか探っていきます。
    今回はライブ&バスツアー(ももち)というタイトルの記事をもとに、コードを書いていくことにしました。

    ページを見ると、取得したい画像以外にもたくさんの画像(赤矢印)が使われています。
    今は記事本文内のデータだけが必要なのでまず最初に黄色の枠の中だけを取り出します。
    ソースで言うとclass=”skin-entryBody”というdiv要素の中身になります。

    さらにdiv要素の中を見ていくと、本文中に貼られている写真のオリジナルURL(縮小されていないもの)が以下の通り記述してあることがわかります。
    (ちょっと調べてみたところ「…/oXXXXXX.jpg」というのがアメブロのユーザー投稿画像のオリジナルURLなんだそうです。
    参考・アメブロ記事内の縮小画像ではなく元画像(縮小前)のURLを知る方法

    では、a要素の中にあるURLを全て取得すればいいでしょうか?
    正解は否、この記事にはありませんが、記事によっては、a要素を使って画像ではなくイベントページなどへリンクしている場合があると想定されます。
    無駄なURLを排除するため「本文中の、a要素の、末尾.jpgのURLのみ」を取得するようにコードを書いていくと良さそうです。
    では実際に書いてみます。これは前回の記事のスニペットの17行目、#ここにページごとの処理を書く の部分に入る処理です。

    記事によっては、画像がない場合もあるので、その場合の処理も加えて書きました。
    これで画像をDLするためのURLリストができました。

    URLリストから画像をDLする

    DL方法はTwitterの時と全く同じです。ということは、画像URLリストの他に、

  • 保存ディレクトリ
  • ファイル名
  • をあらかじめ定義しておく必要があるということですね。

  • 今回は保存ディレクトリを「momochi/」、
  • 画像ファイル名を「記事の投稿日_記事タイトル_{連番}」
  • にしてみたいと思います。

    #タイトルから記号などを削除

    ももち(嗣永桃子)はタイトルに「♡」などの記号を使っていることが多いですが、そのままだとファイル名に使用できないので、記号をタイトルから削除しています。

    #画像DL

    これ以下のコードはすべて{Tech}自分のTLの画像を保存する(3)で書いたものと同じです。
    他との兼ね合いで多少変数名が変更されています。

    これで実行して…

    無事全ての画像をDLすることができました!

    次のエントリで、前回DL時からの差分を取得するコードを追加してみようと思います。
    (ももちのブログはこれ以上更新されることがないけどTT)

    Leave a Reply

    Your email address will not be published. Required fields are marked *