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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Q&A

解決済

1回答

2105閲覧

python3.5でUnicodeEncodeErrorで凄く困っている

k-okina

総合スコア16

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

0グッド

0クリップ

投稿2016/11/25 12:09

###前提・実現したいこと
PHPerです。
python3.5,Django1.10を使ってプログラムを書いています。
qiita.com/NaoyaOura/items/4f613525063d0c8d6653
のコードをDJangoのmanage.pyのコマンドとして叩けるようにしたいのですが、以下の様なエラーが発生して、10時間ぐらい悩んだのですが、解決策が思いつきません。
初めてのpythonで初めてのDjangoなので、優しくしてくれると嬉しいです。。。

###発生している問題・エラーメッセージ

Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap self.run() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 114, in run self._target(*self._args, **self._kwargs) File "/Users/k-okina/Documents/misocks-api-py/cron/companies/step1.py", line 83, in craete_xbrl_url_json ET_tree = ET.fromstring( response_string ) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1300, in XML parser.feed(text) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1640, in feed self._parser.Parse(data, 0) UnicodeEncodeError: 'ascii' codec can't encode characters in position 92-99: ordinal not in range(128)

###該当のソースコード
project/cron/management/commands/getCompaniesUrl.py

python

1# -*- coding: utf-8 -*- 2from django.core.management.base import BaseCommand 3import requests 4import xml.etree.ElementTree as ET 5import json 6import os 7import io 8import re 9import sys 10import multiprocessing 11from collections import defaultdict 12from datetime import datetime as dt 13from cron.companies import step1 14 15class Command(BaseCommand): 16 17 def handle(self, *args, **options): 18 step1.handle()

project/cron/companies/step1.py

python

1# -*- coding: utf-8 -*- 2import requests 3import xml.etree.ElementTree as ET 4import json 5import os 6import io 7import re 8import multiprocessing 9from collections import defaultdict 10from datetime import datetime as dt 11 12proc = 4 # マルチプロセス制御 13 14def get_link_info_str(ticker_symbol, base_url): 15 url = base_url+ticker_symbol 16 response = requests.get(url) 17 return response.text 18 19def get_link(tree, namespace, since): 20 yuho_dict = defaultdict(dict) 21 #entryタグ毎にforeach 22 for el in tree.findall('.//'+namespace+'entry'): 23 24 #titleタグに有価証券の文字があれば、後続処理を実行 25 title = el.find(namespace+'title').text 26 if not is_yuho(title): continue 27 28 updated = el.find(namespace+'updated').text 29 if not time_check(updated,since): return yuho_dict 30 31 # zipファイルのアドレスを辞書オブジェクトへ登録 32 _id = el.find(namespace+'id').text 33 link = el.find('./'+namespace+'link[@type="application/zip"]') 34 url = link.attrib['href'] 35 cd = re.sub(r'^【(\w+)】.*',r"\1",title) 36 yuho_dict[_id] = {'id':_id,'title':title,'cd':cd,'url':url,'update':updated} 37 return yuho_dict 38 39def is_yuho(title): 40 if u'有価証券報告書' in str(title): 41 return True 42 else: 43 return False 44 45def time_check(update,since): 46 updated_time = dt.strptime(update, '%Y-%m-%dT%H:%M:%S+09:00') 47 return updated_time>=since 48 49def make_directory(dir_name): 50 if not os.path.exists(dir_name): 51 os.mkdir(dir_name) 52 53def write_download_info(ofname,info_dict): 54 with open(ofname,'w') as of: 55 json.dump(info_dict, of, indent=4) 56 57def multi_controller(since): 58 p = 0 59 jobs = [] 60 while(p < proc): 61 job = multiprocessing.Process(target=craete_xbrl_url_json, args=(since,p,)) 62 jobs.append(job) 63 job.start() 64 p += 1 65 [job.join() for job in jobs] 66 67def craete_xbrl_url_json(since,p): 68 #有報キャッチャーWebServiceのAtomAPIアドレス<http://resource.ufocatch.com/> 69 base_url = 'http://resource.ufocatch.com/atom/edinetx/query/' 70 namespace = '{http://www.w3.org/2005/Atom}' 71 #有報キャッチャーのページ 72 page = 1 + p 73 count = 0 74 75 while True: 76 #文字列変換 77 t_symbol = str(page) 78 print('page:'+t_symbol + ', loading...') 79 80 #企業毎の有報へのデータへのリンク情報を取得 81 response_string = get_link_info_str(t_symbol, base_url) 82 #xmlをparseするElementTreeを取得 83 ET_tree = ET.fromstring( response_string ) 84 ET.register_namespace('',namespace[1:-1]) 85 86 #downloadファイルの対象を取得 87 info_dict = get_link(ET_tree,namespace,since) 88 count += len(info_dict) 89 if len(info_dict) == 0 : 90 #取得データがなくなり次第、処理終了 91 print('process' + str(p) + ':complete a download!! [' + str(count) + ']') 92 break 93 94 #Request用のJson形式のファイルを作成 95 json_directory=os.getcwd()+'/downloaded_info' 96 make_directory(json_directory) 97 ofname = json_directory+'/dat_download_'+t_symbol+'.json' 98 write_download_info(ofname,info_dict) 99 100 page += proc 101 102def handle(): 103 #TODO 取得データの末尾(以下例では、2015/07/17以降のデータを取得) 104 since = dt.strptime('2015-07-17','%Y-%m-%d') 105 print('since:', since) 106 #一定期間に発生したデータ全てのURLを取得する 107 multi_controller(since)

###一言
どうにかして解決したいのですが、1人の力じゃあ無理でした。。。
本当に困っています。。。
どうか、お願いします。。。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラー時のスタックトレースに
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py

と出ているように、実行時にPython3系を使用していません。

まずは、

  • Python3はインストールされているか
  • DjangoをPython3の環境下にインストールされているか

などを確認するところから始めたほうが良いでしょう。

投稿2016/11/25 12:24

編集2016/11/25 12:32
attakei

総合スコア2738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k-okina

2016/11/25 13:18

ありがとうございます! 3系から2系に戻ってました! 直したら解決しました! すっごく助かりました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問