Posted at

wxPythonを一時間でさらって画像収集機能を搭載したGUIアプリを作った。

More than 1 year has passed since last update.


概要

Python3+Beautifulsoup+Requestsで画像収集&クエリーパラメータ操作

Selenium+bs4+requestsで自動画像収集&自動ページ遷移inPython3

の最終回。

wxPythonというPythonで超簡単に(ここ重要)にGUIツールを作ってみた。



OS:Windows10 Pro
Python:3.6.5
使用ブラウザ:Google Chrome
エディタ:Vim
パッケージ管理:pip


着手


  1. wxPythonの存在自体は知ってた

  2. GUIツールじゃないとプログラミング知らない人には中々凄いと思ってもらえない

  3. じゃあ作ろう


コード

まずディレクトリ構成

無題.png

またもやimportの勉強の為に

それでは実際に実行する`main.py'から見ていこう。


python.main.py


import wx
from resources import crawl
import requests

def send_butfunc(event):
url = requests.get(url_text.GetValue())
crawl.download_site_images(url)

application = wx.App()

frame = wx.Frame(None,wx.ID_ANY,'画像収集ツール',size=(640,480))

icon = wx.Icon('resources/Python.ico',wx.BITMAP_TYPE_ICO)
frame.SetIcon(icon)

#レイアウト設定
layout = wx.FlexGridSizer(rows=3,cols=2,gap=(0,0))

#メニューバー実装。実際にボタン押しても機能しない
menu_credit = wx.Menu()
menu_credit.Append(1,'作成者プロフィール')
menu_config = wx.Menu()
menu_config.Append(2,'クローリング設定')

menu_bar = wx.MenuBar()
menu_bar.Append(menu_config,'設定')
menu_bar.Append(menu_credit,'情報')

frame.SetMenuBar(menu_bar)

#パネル実装_イメージは作業台にキャンバスを置く感じ
main_panel = wx.Panel(frame,wx.ID_ANY,pos=(0,0))

#テキストボックス実装
url_text = wx.TextCtrl(main_panel,wx.ID_ANY,size=(640,40),pos=(0,40))

surl_text = wx.StaticText(main_panel,wx.ID_ANY,'クローリング対象のURLを↓に入力')
font = wx.Font(20,wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_NORMAL)
surl_text.SetFont(font)
url_text.SetValue('URLを入力')

#実行ボタン
send_button = wx.Button(main_panel,wx.ID_ANY,'クロール開始',size=(100,100),pos=(0,80))
send_button.Bind(wx.EVT_BUTTON,send_butfunc)

#ウィンドウ描画
frame.Centre()
frame.Show()

application.MainLoop()


トップレベルにどんどんコード書いていくことになるからコード見づらくてしょうがない

wxpythonはめちゃくちゃ簡単に使えるので皆さん使ってみて下さい。

最後に公式ドキュメントとおすすめサイト貼っとくので。

どうやらC++で実装されてるらしい。

wxRubyサポート終わってるし、RubyのGUIツール無いから作ろうかな…

C++とか何もわからないけどRubyの為だけに勉強しようかな



crawl.py


import requests
from bs4 import BeautifulSoup
from datetime import datetime
import os
import sys

def download_site_images(url):
images = []

if not os.path.exists('img/'):
os.makedirs('img/')

soup = BeautifulSoup(url.content,'lxml')

for link in soup.find_all("img"):
src = link.get("src")

if 'jpg' in src:
images.append(src)

if 'png' in src:
images.append(src)

if 'gif' in src:
images.append(src)

for image in images:
re = requests.get(image)
print('Downloading:',image)
with open('img/' + image.split('/')[-1],'wb') as f:
f.write(re.content)


こちらのコードについての解説は

Python3+Beautifulsoup+Requestsで画像収集&クエリーパラメータ操作

を御覧ください。(解説なんてしてないけど)

Qiita上には既にRequestsとBeautifulSoupの使い方をわかりやすく解説している方がいらっしゃるのでそちらを参考に。

因みに__init__.pyは空です。


実物スクショ

WS000000.JPG


いや手抜きかよ!!!!!!

正直に言いますが、

全く手抜きしてません。それなりエラー起こした後にここまでやりました。

実質二時間弱掛かってます。情けない。


最後に

もう一度言いますが、

wxPythonはめちゃくちゃ覚えるの簡単な割にかなり便利です。

Pythonメインでやってる人は使えるようになれば楽しい生活が待ってます。

…え?貴女はRubyやってるんですか?

RubyでGUIやりたかったらRuby1系に落として下さい。


参考資料

みんなのPython

wxPython公式ドキュメント(英語だけど読めると思います)

Python-izm

正直初心者PythonistaはPython-izmはブクマしといていいレベルかと。

文法解説も簡単なものからかなり高度なものまで紹介されているし、

wxPythonだけじゃなくpandasとか、便利なライブラリの使い方まで教えてくれてる。