僕の世界観を変えてみる

比較的簡単なHTMLでWebサイトを作ってみるのでその過程を綴っていいたいと思っています。

【Python3】progressbarとtqdmがImportErrorになったのでsys.pathで導いてあげた

f:id:htmllifehack:20170906223712j:plain

python3で画像収集するスクリプトを作ったわけですけど

GIFをダウンロードしてみたらちょっと時間がかかったんですよ。

何枚もあったからだとは思うんですけど、それだと動いてるのか止まってるのかわからないんですよね。

なのでよくapt-get installとかバッチファイルとかで見かけるダウンロードバーと言いますか、進捗状況を表示させたくなりまして。

いろいろ探してみました。

やっぱり一回ではうまくいかなかったのでハマったところを吐き出しておきます。

あ、前回の記事はこちら

www.htmllifehack.xyz


ダウンロードバーを表示するモジュール

2種類あったので両方試してみました。

f:id:htmllifehack:20170906232710g:plain

▼progressbar

pip install progressbar2

progressbarは無印と2があるようでpython3系はprogressbar2を使うようです。

デフォルトだと#で進捗状況が表示されます。

参考サイト
progressbar2 3.34.2 : Python Package Index
【Python】 progressbar - keisukeのブログ


▼tqdm

pip install tqdm

tqdmの場合はシンプルに棒で表示されます。

調べてみたところtqdmを使ってる人のほうが多い印象です。

参考サイト
tqdm 4.15.0 : Python Package Index
Pythonで進捗バーを表示する(tqdm) - naritoブログ


詳しく知りたい人は英語ですが公式サイトを見たほうがいいです。

ざっと使い方を知りたい人は2番目のブログをご覧ください。

僕は上記ブログを参考にさせていただきました。

Module not found 現る

基本的には両方ともimportで呼び出すことができます。

しかし僕の場合両方ともimporterrorと表示されて使えなかったのです。

んなに?!

インストールはちゃんとできてるんでなにかと思いましたが、どうやらpython2.7ってフォルダに入っていたようです。

/usr/local/lib/にpython2.7とpython3.4のフォルダがあったのでpython3.4に移そうと試みたんですが移動できないようです。

なんでかよくわからないのでとりあえずsys.pathでモジュールのパスを指定することにしました。

sys.path.append

パスの指定は簡単です。

import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages')

こんなようにモジュールがインストールされているディレクトリを書くだけでOKです。

このコードはimport tqdmやimport progressbarより前に書いてくださいね。

ちなみにsysってのがなんなのか調べてみたところ

インタプリタで使用・管理している変数や、インタプリタの動作に深く関連する関数を定義しています。

だそうです。

ま僕には何を言ってるのかまったく理解できないんですけどね。

python公式をぜひご覧ください。
29.1. sys — システムパラメータと関数 — Python 3.6.1 ドキュメント

コード

tqdmとproguressbarを動かすのに試しに書いたコードです。

# os.path & progressbar test.py
# coding:utf-8

import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages')
from tqdm import tqdm
import progressbar
import time


p = progressbar.ProgressBar()
print('progressbar')
for i in p(range(100)):
	time.sleep(0.02)

print('tqdm')
for i in tqdm(range(100)):
	time.sleep(0.02)

昨日のコードにtqdmを付け加えるとこうなります。

# -*- coding:utf-8 -*-
import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages')
from tqdm import tqdm
import progressbar
import time
import requests
from bs4 import BeautifulSoup

URL = 'http://nogiviola.livedoor.biz/archives/2786524.html'
images = []

soup = BeautifulSoup(requests.get(URL,headers={'User-Agent': 'Mozzila/5.0'}).content,'lxml')

for link in soup.find_all("img"):
    if link.get("src").endswith(".jpg"):
        images.append(link.get("src"))

print('ダウンロード中...')
for target in tqdm(images):
    resp = requests.get(target)
    with open('img/' + target.split('/')[-1], 'wb') as f:
        f.write(resp.content)

まとめ

昨日の記事で書いたコードはコメントが多すぎて見づらいですね。

あとシンタックスハイライトも見づらいかもしれない。

自分で変えておきながら言うのもなんですが。

あとでデフォルトに戻そうかな。

ああと話変わるんですけど、ミチョのパイナップル味が出たんですよ!!

最近コストコ行ってないのであるかわからないんですけど、買ったらまたレビューしますね!

酢、飲んだほうがいいよ。

一応ミチョの記事を貼っておくね。

www.htmllifehack.xyz