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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

2066閲覧

python2.7,beautifulsoupでnetkeiba.comの競馬情報をスクレイピングする時に、馬名のタグのtxt_lだけがNoneとなり苦慮しています

akakage13

総合スコア89

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2016/07/29 11:48

python2.7でbeautifulsoupを用いて、netkeiba.comから競馬情報(騎手の成績)をスクレイピングしています。

定法に基づきまして、『検証』からページのツリー構造を把握して、プログラムを作成しました。
馬名部分の構造が<td class="txt_l">
<a href="/horse/2011105901">テンテマリ</a></td> #テンテマリは馬名
となっておりましたので、"txt_l"を拾い出せるようにスクリプトを作りました。

しかしながら、
馬名以外の"txt_l"は全部スクレイピング出来るのですが、馬名部分だけがNoneと返ってまいります。
エラーメッセージではありませんが、何が原因でNoneとなるのかが、どうしても分かりません。
ちなみに、馬名以外で、ほぼ同様の構造を持つ、『レース名』、構造は

<td class="bml txt_l"> <a href="/race/201603020812/" title="3歳上500万円下">3歳上500万円下</a> (3歳上500万円下はレース名) では、問題なくレース名を拾うことが出来ました。

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

-- coding:utf-8 --

import urllib2
import codecs

from bs4 import BeautifulSoup

tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}'

for i in xrange( 1, 2 ):
url=tpl_url.format( i )
soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml")

tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody') for tr in tr_arr: lrg1 = tr.findAll('td',{'class':'txt_l'})

for tr1 in lrg1:
print tr1.string

###試したこと
馬名以外の('td',{'class':'txt_l'})に準ずる『レース名』は、うまく拾うことが出来ました。
#lrg1 = tr.findAll('td',{'class':'txt_l'}) で馬名を得ることが出来ない理由、併せて馬名を拾えるスクリプトを御教示くださいますよう、よろしくお願いいたします!

###補足情報(言語/FW/ツール等のバージョンなど)
python2.7
Beautifulsoup

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

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

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

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

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

guest

回答2

0

自己解決

tdタグの中にまだaタグがあるのでNoneになりました。
tr1.string

tr1.a.string
にしてみるとかしたら動きました。

投稿2016/08/03 11:06

akakage13

総合スコア89

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

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

0

tr1.string

tr1.contents[0]
にしてみるとかしたら動きませんかね?

投稿2016/07/29 12:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/07/29 13:12

元ソースだと <a href="/horse/2011105901">テンテマリ</a> </td> とaと/tdの間に改行が入っているのでそれが要素として扱われてるのかなと想像しました 違ったらすいません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問