標準ライブラリのtkinterの使い方です。
基本のコード
import tkinter as tk
def say_hello():
print("Hello, world!")
root = tk.Tk() # メインウィンドウの作成
# ウインドウサイズを指定
root.geometry("300x200")
button = tk.Button(root, text="Say Hello", command=say_hello) # ボタンの作成
button.pack() # ボタンをウィンドウに配置
root.mainloop() # イベントループの開始ウィンドウのテキストやボタンの位置設定
import tkinter as tk
root = tk.Tk()
root.geometry('300x200') # ウィンドウのサイズを指定
# スクレイピング関数は省略
button = tk.Button(root, text="スクレイピング開始", command=scrape_website)
button.place(relx=0.5, rely=0.5, anchor='center') # ボタンをウィンドウの中央に配置
label = tk.Label(root, text="ボタンを押してスクレイピングを開始します")
label.place(relx=0.5, rely=0.6, anchor='center') # ラベルをボタンの下側に配置
root.mainloop()テキストのサイズを指定したい場合
import tkinter as tk
from tkinter import font
root = tk.Tk() # メインウィンドウの作成
# フォントの作成 (フォント名, サイズ, オプション)
my_font = font.Font(family="Helvetica", size=20)
label = tk.Label(root, text="Hello, world!", font=my_font) # ラベルの作成
label.pack() # ラベルをウィンドウに配置
root.mainloop() # イベントループの開始ファイルを分けてボタンをクリックするとスクレイピングプログラムを実行する方法
[main.py]
tkinter GUI を初期化し、スクレイピングのトリガーを設定
[scrape.py]
実際のスクレイピングのモジュール
# main.py
import tkinter as tk
import scrape # scrape.pyから関数をインポート
root = tk.Tk()
root.geometry('300x200')
button = tk.Button(root, text="スクレイピング開始", command=scrape.scrape_website)
button.pack()
root.mainloop()# scrape.py
def scrape_website():
# 実際のスクレイピングのコード
passscrapyで作成したプログラムをtkinterで実行
import tkinter as tk
from scrapy.crawler import CrawlerProcess
from scrapy.spiders import Spider
class MySpider(Spider):
# ScrapyのSpiderクラスを継承してカスタムスパイダーを作成
name = 'myspider'
start_urls = ['http://example.com'] def parse(self, response):
# Scrapyの処理結果を表示するためのコードを記述
# 例えば、HTML要素の抽出やデータの加工、表示などを行う
# ここでは、スクレイピング結果をターミナルに表示するだけの簡単な例を示します
print(response.css('h1::text').get())def start_scraping():
# Scrapyの処理を開始する関数
process = CrawlerProcess()
process.crawl(MySpider)
process.start()
# TkinterのGUIを作成する
root = tk.Tk()
root.title('Scrapy GUI')
start_button = tk.Button(root, text='Start Scraping', command=start_scraping)
start_button.pack()
root.mainloop()Tkinterのウィンドウ内にコンソールログを表示させる方法
import tkinter as tk
import sys
class ConsoleUI:
def __init__(self, root):
self.text_area = tk.Text(root)
self.text_area.pack()
sys.stdout = self
def write(self, msg):
self.text_area.insert(tk.END, msg)
def flush(self):
# this flush method is needed for file like object
pass
root = tk.Tk()
console = ConsoleUI(root)
print('This will be output to the Text widget')
root.mainloop()
sys.stdoutをオブジェクトにリダイレクトすることでprint関数の出力をこのオブジェクトに送るようになっています。
このConsoleUIクラスのインスタンスが作られると、Textウィジェットを作成し、そこにメッセージを書き込むことでそのメッセージがTextウィジェットに表示されます。
ログイン入力を求める場合
import tkinter as tk
from tkinter import messagebox
def check_credentials():
user = user_entry.get()
password = pass_entry.get()
if user == 'admin' and password == 'password':
messagebox.showinfo("ログイン情報", "ログイン成功")
else:
messagebox.showerror("ログイン情報", "ユーザ名かパスワードが間違っています")
# GUI作成
root = tk.Tk()
root.title("ログインフォーム")
# ユーザ名エントリー
user_label = tk.Label(root, text="ユーザ名:")
user_label.pack()
user_entry = tk.Entry(root)
user_entry.pack()
# パスワードエントリー
pass_label = tk.Label(root, text="パスワード:")
pass_label.pack()
pass_entry = tk.Entry(root, show="*")
pass_entry.pack()
# ログインボタン
login_button = tk.Button(root, text="ログイン", command=check_credentials)
login_button.pack()
root.mainloop()Scrapyでログイン入力を求めるサンプルコード
import tkinter as tk
import scrapy
from scrapy.crawler import CrawlerProcess
# あなたのScrapy Spider
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://example.com'] # 起点となるURLを指定します。
def __init__(self, username=None, password=None, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.username = username
self.password = password
def start_requests(self):
return [scrapy.Request(url=self.start_urls[0], callback=self.login)]
def login(self, response):
# ここでログイン処理を実装します。以下は一例です。
return scrapy.FormRequest.from_response(
response,
formdata={'username': self.username, 'password': self.password},
callback=self.after_login
)
def after_login(self, response):
# ログイン成功後の処理をここに書きます。
pass
def start_crawler(username, password):
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(MySpider, username=username, password=password)
process.start()
def get_credentials():
username = user_entry.get()
password = pass_entry.get()
start_crawler(username, password)
root = tk.Tk()
# ユーザー名入力フィールド
user_label = tk.Label(root, text="Username")
user_label.pack()
user_entry = tk.Entry(root)
user_entry.pack()
# パスワード入力フィールド
pass_label = tk.Label(root, text="Password")
pass_label.pack()
pass_entry = tk.Entry(root, show="*")
pass_entry.pack()
# スタートボタン
start_button = tk.Button(root, text="Start Crawler", command=get_credentials)
start_button.pack()
root.mainloop()