前提・実現したいこと
「株とPython-自作プログラムでお金儲けを目指す」とうpythonの書籍で勉強していまして、
銘柄情報の取得とSQLiteへの格納がしたいです。
下記リンクでもこの書籍の内容をなぞって実行できています。
https://bitop.hatenablog.com/entry/2019/04/09/060131
発生している問題
該当ソースコードで全部
python
1 if len(q.find('div.company_block')) == 0: 2 return None
の条件に当てはまってしまって、すべてNoneで返されてしまいます。
qはURLです。該当するURLでdiv.company_blockが存在しないときがこの条件に当てはまるということですよね?
該当のソースコード
python
1from pyquery import PyQuery 2import time 3import sqlite3 4 5 6def get_brand(code): 7 url = 'https://kabutan.jp/stock/?code={}'.format(code) 8 9 q = PyQuery(url) 10 11 if len(q.find('div.company_block')) == 0: 12 return None 13 14 try: 15 name = q.find('div.company_block > h3').text() 16 code_short_name = q.find('#stockinfo_i1 > div.si_i1_1 > h2').text() 17 short_name = code_short_name[code_short_name.find(" ") + 1:] 18 market = q.find('span.market').text() 19 unit_str = q.find('#kobetsu_left > table:nth-child(4) > tbody > tr:nth-child(6) > td').text() 20 unit = int(unit_str.split()[0].replace(',', '')) 21 sector = q.find('#stockinfo_i2 > div > a').text() 22 except (ValueError, IndexError): 23 return None 24 25 return code, name, short_name, market, unit, sector 26 27def brands_generator(code_range): 28 for code in code_range: 29 brand = get_brand(code) 30 if brand: 31 yield brand 32 time.sleep(1) 33 34def insert_brands_to_db(db_file_name, code_range): 35 conn = sqlite3.connect(db_file_name) 36 with conn: 37 sql = 'INSERT INTO brands(code,name,short_name,market,unit,sector) ' \ 38 'VALUES(?,?,?,?,?,?)' 39 conn.executemany(sql, brands_generator(code_range))
python
1insert_brands_to_db('brands.db',range(1301,1332))
確認したこと
例えば
https://kabutan.jp/stock/?code=1330で
div.company_blockは存在しているように思えます。
###質問したいこと
参照リンクhttps://bitop.hatenablog.com/entry/2019/04/09/060131では
下記の条件にすべてが当てはまるわけではなく、うまく銘柄情報の取得とSQLへの格納ができています。
私がやると同じコードのはずなのに上手くいかないです。なぜでしょうか。
python
1 if len(q.find('div.company_block')) == 0: 2 return None
#追記
全部Noneで返されているかと思っていたのですが、勘違いでSQLiteに出力されていました。
#改めてためしたこと
下記を試して、try文が実行されていることが確認できました。
ただ、SQLiteにはなにも出力されていないように見えます。
https://bitop.hatenablog.com/entry/2019/04/09/060131では表が確認できるのに、
私の実行結果では確認できません。
def get_brand(code): url = 'https://kabutan.jp/stock/?code={}'.format(code) q = PyQuery(url) if len(q.find('div.company_block')) == 0: return None try: name = q.find('div.company_block > h3').text() code_short_name = q.find('#stockinfo_i1 > div.si_i1_1 > h2').text() short_name = code_short_name[code_short_name.find(" ") + 1:] market = q.find('span.market').text() unit_str = q.find('#kobetsu_left > table:nth-child(4) > tbody > tr:nth-child(6) > td').text() unit = int(unit_str.split()[0].replace(',', '')) sector = q.find('#stockinfo_i2 > div > a').text() print(q.find('div.company_block > h3').text())#tryが実行されているかここで確認 except (ValueError, IndexError): return None return code, name, short_name, market, unit, sector
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。