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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

Python

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

Q&A

解決済

1回答

2646閲覧

jupyter notebookにて、別のノートブックで実行すると、エラーが出る

onushinosenzo

総合スコア22

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/09/30 13:37

編集2018/09/30 14:01

前提・実現したいこと

イメージ説明
イメージ説明
jupyter notebookが原因の問題なのかpythonのプログラミングの問題かわからないのですが、
上記の画像のように、horse_page_link()の後にget_race_data()を書くと、画像のようにget_race_data()でエラーが出ます。

しかし、別のノートブックを作り、下記の様にget_race_data()の後にhorse_page_link()を書くと

イメージ説明
イメージ説明

このようにhorse_page_link()が正常に動作しなくなります。

どちらの関数も正常に動作させる方法が知りたいです。よろしくお願いいたします。
※どこが原因になっているかわからないため、ほぼ全文を載せています。見にくくなっていますがよろしくお願いいたします

・上の画像のコード

python

1import requests 2from bs4 import BeautifulSoup 3import pandas as pd 4import re 5url = 'https://www.nankankeiba.com/race_info/2018092518070211.do' 6 7def url_to_soup(url): 8 req = requests.get(url) 9 10 return BeautifulSoup(req.content, 'html.parser') 11 12soup = url_to_soup(url) 13 14def horse_page_link(url): 15 link_list = ['https://www.nankankeiba.com'+x.get('href') for x in soup.find_all('a', class_='tx-mid tx-low')] 16 17 return link_list 18 19def get_race_data(url): 20 going_ = soup.find(id="race-data02").get_text().replace('\n','').split(';')[1].split(' ')[2][0:2]#予想レースの馬場状態 21 wether_ = soup.find(id="race-data02").get_text().replace('\n','').split(';')[1].split(' ')[2][3]#予想レースの天候 22 len_ = int(soup.find(id="race-data01-a").get_text().replace('\n','').split(' ')[3].replace(',','')[1:5])#予想レースの距離 23 24 25 wps_list=[]#予想レースの1,2,3位 26 wps_list.append(int(re.sub('\<.*?\>','',str(soup.find_all('tr', class_='bg-1chaku')[0]).split('</td>')[2]).replace('\n',''))) 27 wps_list.append(int(re.sub('\<.*?\>','',str(soup.find_all('tr', class_='bg-2chaku')[0]).split('</td>')[2]).replace('\n',''))) 28 wps_list.append(int(re.sub('\<.*?\>','',str(soup.find_all('tr', class_='bg-3chaku')[0]).split('</td>')[2]).replace('\n',''))) 29 30 return going_, wether_, len_, wps_list 31

・下の画像のコード

python

1import requests 2from bs4 import BeautifulSoup 3import re 4import pandas as pd 5url = 'https://www.nankankeiba.com/result/2018092518070211.do' 6 7def url_to_soup(url): 8 req = requests.get(url) 9 return BeautifulSoup(req.content, 'html.parser') 10 11soup = url_to_soup(url) 12 13def get_race_data(url): 14 going_ = soup.find(id="race-data02").get_text().replace('\n','').split(';')[1].split(' ')[2][0:2]#予想レースの馬場状態 15 wether_ = soup.find(id="race-data02").get_text().replace('\n','').split(';')[1].split(' ')[2][3]#予想レースの天候 16 len_ = int(soup.find(id="race-data01-a").get_text().replace('\n','').split(' ')[3].replace(',','')[1:5])#予想レースの距離 17 18 19 wps_list=[]#予想レースの1,2,3位 20 wps_list.append(int(re.sub('\<.*?\>','',str(soup.find_all('tr', class_='bg-1chaku')[0]).split('</td>')[2]).replace('\n',''))) 21 wps_list.append(int(re.sub('\<.*?\>','',str(soup.find_all('tr', class_='bg-2chaku')[0]).split('</td>')[2]).replace('\n',''))) 22 wps_list.append(int(re.sub('\<.*?\>','',str(soup.find_all('tr', class_='bg-3chaku')[0]).split('</td>')[2]).replace('\n',''))) 23 24 return going_, wether_, len_, wps_list 25 26def horse_page_link(url): 27 link_list = ['https://www.nankankeiba.com'+x.get('href') for x in soup.find_all('a', class_='tx-mid tx-low')] 28 29 return link_list

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

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

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

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

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

tiitoi

2018/09/30 13:50

画像でなく、コードで貼っていただけますか?
guest

回答1

0

ベストアンサー

horse_page_link() と get_race_data() の引数が soup でなく url になっているのはおかしくないでしょうか?
soup オブジェクトを引数で渡してあげないと、中で利用している soup オブジェクトは定義されていないことになってしまいます。

それを修正したのち、実行したところ horse_page_link() は URL の一覧が返ってきました。
一方、get_race_data() は list index out of range となりました。
DOM のアクセスが間違っていると思うので、サイト構造を確認してみてください。

また Jupyter Notebook は一度実行すると変数の状態が残るので、「Kernel」->「Restart & Clear Output」で状態を初期化して、もう一度試してみてください。

投稿2018/09/30 14:15

tiitoi

総合スコア21956

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

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

onushinosenzo

2018/09/30 14:39

サイト構造確認し、書き換えたらうまくいきました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問