pixivpyでpixivの画像の一括ダウンロード

もともとはPythonのWebスクレイピングの本の実践にpixivのデータ収集をしようと思っていたのですが, 調べを進めるうちにpixiv用ライブラリを発見したのでこれを使っていきます.

pixivpyが面倒な作業を軒並み引き受けてしまうので読んだ本の内容はあまり盛り込めてない感じです.

ソースコードを示しますが通常のpixiv利用に影響を及ぼすような無茶苦茶な利用はしないでください.

実行環境

OS: macOS Sierra

python: 2.7.12

pixivpy: 3.2.0

pixivpyのインストール

pipを使ってインストールします.

pip install pixivpy

ソースコード

コンソール上で作者のユーザーIDを受け付けて作品をダウンロードするようになってます.

# coding: utf-8

from pixivpy3 import *
import json
from time import sleep
import os

# ログイン処理
api = PixivAPI()
f = open('client.json', 'r')
client_info = json.load(f)
f.close()
api.login(client_info['pixiv_id'], client_info['password'])

# アーティスト検索から情報取得
artist_pixiv_id = int(raw_input('Type artist pixiv id number:\n>>>'))
json_result = api.users_works(artist_pixiv_id)
total_works = json_result.pagination.total
illust = json_result.response[0]
saving_direcory_path = './pixiv_images/' + illust.user.name + "/"
aapi = AppPixivAPI()
separator = '------------------------------------------------------------'

# ダウンロード
print 'Artist: %s' % illust.user.name
print 'Works: %d' % total_works
print separator
if not os.path.exists(saving_direcory_path):
    os.mkdir(saving_direcory_path)
for work_no in range(0, total_works):
    illust = json_result.response[work_no]
    print 'Procedure: %d/%d' % (work_no + 1, total_works)
    print 'Title: %s' % illust.title
    print 'URL: %s' % illust.image_urls['large']
    print 'Caption: %s' % illust.caption
    print separator
    aapi.download(illust.image_urls.large, saving_direcory_path)
    sleep(3)

print '\nThat\'s all.'

ソースコードについて

ユーザーデータの隠蔽

pixivにアクセスするのに自前のアカウント情報が必要です. client.jsonに自分のユーザIDとパスワードを書き込んでおきます.

毎回プログラムの起動のたびにクライアントの情報を入力するのは面倒ということもありますし, ソースコード上に個人の情報を残したまま公開するのが嫌なため自分のユーザーIDとパスワードは外部ファイルに用意しました.

コードを使って確かめたい人はclient.jsonにコードと対応するように自分のアカウント情報を用意して実行してみてください.

wait時間

規模にもよりますがあんまりにも活発に通信を行うと攻撃とみなされ, サーバー側がリクエストの応答を拒否するようになる可能性があるため3秒ほどwaitします.

それに何より処理の負荷が他のpixivユーザーに迷惑をかけるかもしれないのでマナーとして連続アクセスを避けます.

実行結果

pixiv事務局さんのページをスクレイピングしてみます.

λ python scrape_pixiv.py
Type artist pixiv id number:
>>>11
Artist: pixiv事務局
Works: 478
------------------------------------------------------------
Procedure: 1/478
Title: Hugピクシブ 10月コミックス発売情報
URL: http://i1.pixiv.net/img-original/img/2016/10/14/15/20/43/59463268_p0.png
Caption: pixiv事務局です。

2016年10月15日(土)、リラクトコミックス Hugピクシブシリーズより<strong>『たるしば』(アタモト)</strong>、
<strong>『ねこまたカフェ』(中村ミネ)</strong>、が発売します。ぜひご覧ください。


<strong>たるしば</strong>
 このお腹が愛らしい、なごみ系柴犬登場!

 ページをめくるたびに、いろんな柴犬に癒されちゃう。
 犬好き・動物好きに贈る、カワイイをぎゅぅっと詰め込んだ、じんわりツボる柴犬えほん。

 ◆『たるしば』(pixivコミック) https://comic.pixiv.net/works/2240
 ◆『たるしば』(Amazon) http://amazon.co.jp/o/ASIN/4861349281/pixiv-comic-22


<strong>ねこまたカフェ</strong>
 この猫カフェにいるのは、みんな「ねこまた」!

 猫になったり人になったり、個性的な「ねこまた」たちで昼も夜も賑わうカフェは、毎日がハプニング!?
 ちょっと騒がしいけどのんびりできる、幸せなひとときをお届けします。

 ◆『ねこまたカフェ』(pixivコミック) https://comic.pixiv.net/works/2133
 ◆『ねこまたカフェ』(Amazon) http://amazon.co.jp/o/ASIN/4861349257/pixiv-comic-22


◆Hugピクシブ公式HP http://hug.pr.pixiv.net/
◆リラクトコミックス http://www.fwinc.co.jp/liluct/
------------------------------------------------------------
Procedure: 2/478
Title: ペルソナ20周年!「ペルソナシリーズイラストコンテスト」開催!
URL: http://i1.pixiv.net/img-original/img/2016/10/04/15/52/54/59301964_p0.jpg
Caption: pixiv事務局です。
...

こんな感じで返ってきます.

参考サイト

https://github.com/upbit/pixivpy

広告を非表示にする