質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

Mac用アプリのパッケージ内のプログラムだと正常に値を取得できるのに、.appアプリを起動すると値が取得できない

MasterUdemy
MasterUdemy

総合スコア0

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0回答

0評価

0クリップ

298閲覧

投稿2021/01/22 01:55

編集2022/01/12 10:55

前提・実現したいこと

pythonで、tkinterでキーワードを入力するインターフェイスを作成して(
getut_data.py)、別ファイル(scrape_u_t.py)で入力されたキーワードを元に、Google検索結果からURLとタイトルを抜き出してデスクトップにCSVを保存するプログラムを作成しました。

その後、setup.pyをつくってpy2appでMac用アプリを作りました

Pycharmやターミナルから実行すると、問題なくCSVを書き出すことができたので、py2appでMac用アプリを作ったところ、作成されるappが拡張子のアプリをダブルクリックで起動したときには、titileとURLの項目だけ記述されたCSVが作成されました。

アプリのパッケージを開き、MacOSの中にあるプログラムをターミナルで起動してみると、問題なくデータが抽出されて、保存されたCSVには、きちんとデータが保存されています。

ネットでも調べてみたのですが、GUIは環境変数のPATHが通っていないという記事をみつけたものの、関係があるのかどうかもわからず、そのやり方もわからなかったので、藁をも掴む思いで質問しました。

解決の糸口になるようなアドバイスをお願いします。

該当のソースコード


getut_data.py

python

import tkinter as tk import scrape_t_u class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master.geometry() self.master.title('Get URL and TITLE') self.entry = tk.Entry(self.master, width=40) self.menu_bar = tk.Menu(self.master) self.master.config(menu=self.menu_bar) self.create_widgets() def clear_all(self): self.entry.delete(0, tk.END) def search(self): keywords = self.entry.get() scrape_t_u.main(keywords) def create_widgets(self): file_menu = tk.Menu(self.menu_bar) file_menu.add_command(label='Exit', command=self.master.quit) self.menu_bar.add_cascade(label='File', menu=file_menu) self.entry.grid(row=1, column=1, columnspan=6, pady=10, padx=10) self.entry.focus_set() tk.Button(self.master, text='Clear', width=4, command=self.clear_all).grid(row=2, column=5) tk.Button(self.master, text='抽出', width=4, command=self.search).grid(row=2, column=6, pady=10) root = tk.Tk() app = Application(master=root) app.mainloop()

scrape_u_t.py

import csv import os import re import urllib.parse from bs4 import BeautifulSoup import requests DESKTOP_PATH = os.getenv('HOME') + '/Desktop/url_title.csv' def main(keywords): r = requests.get('https://www.google.co.jp/search?hl=jp&gl=JP&num=10&q=' + keywords) html_soup = BeautifulSoup(r.content, 'html.parser') url_results = [] for t in html_soup.select('.kCrYT > a'): u_result = re.sub(r'/url?q=|&sa.*', '', t.get('href')) url_results.append(urllib.parse.unquote(u_result)) title_results = [] for i in url_results: try: search = requests.get(i) search_soup = BeautifulSoup(search.content, 'html.parser') titles = search_soup.find('title') title_results.append(titles.text) except: print('取得できませんでした。') with open(DESKTOP_PATH, 'w') as csv_file: fieldnames = ['TITLE', 'URL'] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() for t, u in zip(title_results, url_results): writer.writerow({'TITLE': t, 'URL': u}) if __name__ == '= '__main__': main()

setup.py

from setuptools import setup APP = ['getut_data.py'] DATA_FILES = ['scrape_t_u.py'] OPTIONS = {} setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )

試したこと

virtualenvで環境構築し、外部ライブラリをのpy2appとrequesteとbeautifulsoup4をpipインストールして、py2appでsetup.pyを実行して作成しました。

補足情報

Macos 11.1
MacBook pro 2018 13inch
Pycharm
python3.7

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。