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

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

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

Q&A

解決済

1回答

4036閲覧

python スクレイピング EDINET

Mario_11

総合スコア95

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

0グッド

0クリップ

投稿2017/05/17 01:03

###前提・実現したいこと
pythonでEDINETから一つの企業だけのXBRLを取得したいです。
このコードはサイトからコピーしたものですどこを変えれば1つの企業だけXBRLを取得できますか?

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

エラーメッセージ

###該当のソースコード

python

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

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

自己解決

色々なサイトで調べたりした。

投稿2017/05/17 03:11

Mario_11

総合スコア95

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問