<追記> 自作スクリプトがコピーする文字列によってDecodeで例外吐いてたので修正
いつの間にやら Pixiv 巡回に必須である神スクリプトの PixivUtil2 が Python2.7 からPython3 になっていました。
以前 PixivUtil2 を導入した際は、Python にあまり慣れていないこともあり、結構苦労した記憶があります。
しかし今回は思いのほかあっさり導入できました。
以下に導入の記録を記します。
Python 2.7 をインストールしている場合はアンインストールしましょう。
他で Python 2.7 を使用している場合は、パスを指定して使うなど工夫が必要です。
その方法は各自調べてください。
Windows x86-64 executable installerで良いでしょう。
インストール画面で"Add Python x.x to PATH"にチェックを入れてインストールします。
インストール後に自分で環境変数を設定することもできますが、インストーラーがやってくれるのならインストーラーにやらせたほうが安心です。
私はチェックを忘れてインストールしてしまったので、わざわざ一度アンインストールしてからインストールし直しました。
インストールが終わったらPowerShellを起動し"python -V"コマンドを実行し、
pipで各モジュールをインストールする
Python にモジュールを追加するのには pip コマンドを利用します。
多分 Python3 のインストールで同時に入っているはずです。
PixivUtil2 に必要なモジュールを確認し、一つ一つ"pip install xxx"でインストールしていきます。
例
ログインに CAPTCHA が必要になったからか、コマンドでのログインができないみたいなので、キャッシュを使用してログインしましょう。
過去のバージョンを使っていたのなら、config.ini を PixivUtil2.py と同フォルダに入れればそのままログインできます。
以前は config.ini の仕様が変更されると起動時に弾かれていましたが、今は最新の config.ini に成形しなおしてくれるようになったみたいで、とても便利になりました。
<追記>更にこれまで約450件のIDしか同時にダウンロードできませんでしたが、制限がだいぶ上がったみたいです。1000件以上を確認しました。これはありがたい!
これも pip でインストールできます。
"pip install pypiwin32"です。
pip 超便利。
Python3 で仕様が変わったので修正したコピペスクリプトが以下です。
いつの間にやら Pixiv 巡回に必須である神スクリプトの PixivUtil2 が Python2.7 からPython3 になっていました。
以前 PixivUtil2 を導入した際は、Python にあまり慣れていないこともあり、結構苦労した記憶があります。
しかし今回は思いのほかあっさり導入できました。
以下に導入の記録を記します。
Python2.7 をアンインストールする
複数のバージョンの Python があると管理が大変なので Python3 に統一します。Python 2.7 をインストールしている場合はアンインストールしましょう。
他で Python 2.7 を使用している場合は、パスを指定して使うなど工夫が必要です。
その方法は各自調べてください。
Python3 を「Add Python x.x to PATH」にチェックを入れてインストールする
公式サイトより Python3 のインストーラーをダウンロードします。Windows x86-64 executable installerで良いでしょう。
インストール画面で"Add Python x.x to PATH"にチェックを入れてインストールします。
インストール後に自分で環境変数を設定することもできますが、インストーラーがやってくれるのならインストーラーにやらせたほうが安心です。
私はチェックを忘れてインストールしてしまったので、わざわざ一度アンインストールしてからインストールし直しました。
インストールが終わったらPowerShellを起動し"python -V"コマンドを実行し、
$ python -VPython 3.x.x
と表示されることを確認しましょう。
pipで各モジュールをインストールする
Python にモジュールを追加するのには pip コマンドを利用します。多分 Python3 のインストールで同時に入っているはずです。
PixivUtil2 に必要なモジュールを確認し、一つ一つ"pip install xxx"でインストールしていきます。
例
$ pip install beautifulsoup4
インストールしたモジュールは"pip list"でバージョンと共に確認できます。
例
例
$ pip listPackage Version------------------- ----------apng 0.3.3beautifulsoup4 4.8.2certifi 2019.11.28chardet 3.0.4demjson 2.2.4html5lib 1.0.1idna 2.8imageio 2.6.1mechanize 0.4.5numpy 1.18.1Pillow 7.0.0pip 19.3.1pypiwin32 223PySocks 1.7.1pywin32 227requests 2.22.0setuptools 41.2.0six 1.13.0soupsieve 1.9.5urllib3 1.25.7webencodings 0.5.1win-unicode-console 0.5
PixivUtil2を実行する
後は PixivUtil2.py を"python PixivUtil2.py"で起動するだけです。ログインに CAPTCHA が必要になったからか、コマンドでのログインができないみたいなので、キャッシュを使用してログインしましょう。
過去のバージョンを使っていたのなら、config.ini を PixivUtil2.py と同フォルダに入れればそのままログインできます。
以前は config.ini の仕様が変更されると起動時に弾かれていましたが、今は最新の config.ini に成形しなおしてくれるようになったみたいで、とても便利になりました。
<追記>更にこれまで約450件のIDしか同時にダウンロードできませんでしたが、制限がだいぶ上がったみたいです。1000件以上を確認しました。これはありがたい!
win32apiをインストールしてコピペスクリプトも使う
自作のコピペスクリプトは win32api が必要です。これも pip でインストールできます。
"pip install pypiwin32"です。
pip 超便利。
Python3 で仕様が変わったので修正したコピペスクリプトが以下です。
# -*- coding: utf-8 -*-import win32apiimport win32com.clientimport win32clipboard as CBwin32api.Sleep(500)shell = win32com.client.Dispatch("WScript.Shell")url = "https://www.pixiv.net/artworks/"output = r"list.txt"print ('Start Clipbord check')CB.OpenClipboard()text1 = CB.GetClipboardData(1) #1 -> CF_TEXTCB.CloseClipboard()text1 = text1.decode('utf-8', 'replace')count = 1while 1:win32api.Sleep(200)try:CB.OpenClipboard()text2 = CB.GetClipboardData(1) #1 -> CF_TEXTCB.CloseClipboard()text2 = text2.decode('utf-8', 'replace')if text1 != text2:text1 = text2.replace( url,'' )if text1 != text2:text = '%s ' % text1while 1:try:with open ( output, 'a' ) as f:try:f.write ( text )breakexcept IOError as e:print ('except: Cannot write')except IOError as e:print ('except: Cannot open')win32api.Sleep(200)print("\007")text = '{0} : {1}'.format( count, text1 )print(text)count+=1text1 = text2except win32api.error:print ('except: win32api error')
相変わらず例外処理が甘くてたまにこけます。
Python3 で例外メッセージがわかりやすくなっていたので、GetClipboardDataあたりが問題なのはわかりましたので、暇なとき修正するかも。
修正しました。エラー落ちしなくなりました。
Python3 で例外メッセージがわかりやすくなっていたので、GetClipboardDataあたりが問題なのはわかりましたので、
修正しました。エラー落ちしなくなりました。
コメント