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

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

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

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

Q&A

解決済

1回答

1329閲覧

beautifulsoup を用いて、競馬情報をスクレイピングする中で、<p>で改行された情報が取れずに苦慮しています。

akakage13

総合スコア89

Python 2.7

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

0グッド

1クリップ

投稿2018/03/29 11:22

netkeiba.com様から、beautifulsoup を用いて、競馬情報をスクレイピングする中で、<p>で改行された以降の情報が取れずに苦慮しています。

# -*- coding:utf-8 -*- import urllib2 import codecs import time from bs4 import BeautifulSoup f1 = codecs.open('chukyo_race_1.csv', 'w', 'utf-8') f1.write('other_race_name'+u"\n") url_1='http://race.netkeiba.com/?pid=race_old&id=c201707040101&mode=top' soup_1 = BeautifulSoup(urllib2.urlopen(url_1).read(),"lxml") other_race_name_tag_1 = soup_1.find('div',{'class':'race_otherdata'}).find('p') other_race_name_1 = "".join([x for x in other_race_name_tag_1.text if not x == u'\xa0' and not x == u'\n']) cols = [other_race_name_1.strip()] f1.write(",".join(cols) + "\n") print other_race_name_1.strip() f1.close()

netkeiba.com 様からスクレイピングさせていただいているのですが、上記のプログラムを動かすと、以下のようになります

4回中京1日目2歳

netkeiba,com様のソースコードを、下記に記します。

</dl> <div class="race_otherdata"> <p>4回中京1日目&nbsp;2歳&nbsp;</p> <p>混[指定]&nbsp;16頭</p> <p>本賞金:500、200、130、75、50万円</p> </div> <ul class="btn_link_list fc">

小生のしたいことは、

4回中京1日目2歳16頭

というように、<P> の2行目の、16頭という 情報も取得することです。

しかし、改行されていることで、1行目のみしか、取得できません。

改行された以降の部分も取得したいのです。

findの部分を、findall に改変したり、select にも改変したのですが、エラーが出てしまいます。

いろいろ調べたのですが、うまく出来ず、苦慮しております。

諸先輩方の、御教示、よろしくお願いいたします。

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

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

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

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

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

deadjupiter

2018/03/29 11:36

d.find('p')しないで直接divの.text見るか、d.find_all('p')じゃダメなの?
guest

回答1

0

ベストアンサー

find_allで該当要素を複数取得できます。
あとはループで適切に処理します。

Python

1from bs4 import BeautifulSoup 2 3html = """ 4<html><body><div class="race_otherdata"> 5<p>4回中京1日目&nbsp;2歳&nbsp;</p> 6<p>混[指定]&nbsp;16頭</p> 7<p>本賞金:500、200、130、75、50万円</p> 8</div></body></html> 9""" 10 11soup = BeautifulSoup(html,"lxml") 12d = soup.find('div',{'class':'race_otherdata'}) 13for p in d.find_all('p'): 14 t = p.text.replace(u'\xa0', ',') # 「&nbsp;」(NO-BREAK SPACE)=\xa0を分かりやすい区切り文字に置換 15 print t 16 17""" 184回中京1日目,2歳, 19混[指定],16頭 20本賞金:500、200、130、75、50万円 21"""

投稿2018/03/30 01:47

編集2018/03/30 01:50
can110

総合スコア38233

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

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

akakage13

2018/03/30 10:31

can110様、丁寧な御教示ありがとうございました。 うまく動いて感激しております。 今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問