Kazu Home Page

Aug 9, 2020
XML
カテゴリ: 競馬
これまでの2回でスクレイピングし、HTMLを解析までして、ファイルに出力しようと思いましたが、データが全て1行に書き込まれており頓挫してしまいました。今回はもう少しpython上で所望のデータに変換をしたいと思いトライしています。これまでのバッグナンバーは下記

Python で 競馬予想 第1回(データ取得編 scraping スクレイピング)
Python で 競馬予想 第2回(HTML解析編)
Python で 競馬予想 第3回(Python上でのデータ加工) ---  今回はここ。

今回はテキストにしたところから、余計なscriptを省くところからスタートします。参考にしたURLは こちら になります。


for script in soup(["script", "style"]):
    script.decompose()
#print(soup)
.decompose()は、削除のメソッドだそうです。次に前回も行いましたが、テキストを取得します。
text=soup.get_text()
#print(text)



前回と同じように改行がいっぱいできてしまいます。今回違うのはこれからです。テキストを改行ごとにリストに入れて、リスト内の要素前後の空白を除去します。



lines= [line.strip() for line in text.splitlines()]
# textを改行ごとにリストに入れて、リスト内の要素の前後の空白を削除

​これを行うことで1次配列の中にすべて入って作業がやりやすくなりました。次に余計な空白行の除去に取り組みます。関数を使うのはお手の物なので、行が何も入っていなかったら削除して、関数を詰めます。



i = 0
for line in lines:
  if lines[i]=="" :
        del lines[i]
        # print (i)
  else:
     print(lines[i])
     i += 1

そうすると、何も書いていない行が省かれます。

次にリストをコピーしてデータを眺めるとレース名は"11R"が2回出てきたところにあるので、そこまではデータを削除します。
lines_s0 = lines



i = 0
j = 0
for line in lines_s0:
  if lines_s0[i] != "11R" :     # a != b           # a が b と異なる
    del lines_s0[i]
  else:
    j += 1
    i += 1
    if j == 2:           # 2回目の11Rで抜ける 2回目の11Rの次がレース名
        print("11R 2times out loop")
        break
    else :
            print(lines_s0[i],j)

lines_s0[2]  # レース名が表示されればOK

見事レース名が表示されました。次に馬柱の前には必ず


i = 0
for line in lines_s1:
  if lines_s1[i] != "--◎◯▲△☆✓消" :     # a != b           # a が b と異なる
    del lines_s1[i]
  else:
    break

lines_s1  #以降が馬の情報

見事、馬柱から必要なデータを確保できそうです。次に馬ごとに分けなければなりませんが、疲れたので今日はこの辺りで。


今日の一覧



for script in soup(["script", "style"]):
    script.decompose()
#print(soup)

text=soup.get_text()
#print(text)

lines= [line.strip() for line in text.splitlines()]
# textを改行ごとにリストに入れて、リスト内の要素の前後の空白を削除

i = 0
for line in lines:
  if lines[i]=="" :
        del lines[i]
        # print (i)
  else:
     print(lines[i])
     i += 1

i = 0
j = 0
for line in lines_s0:
  if lines_s0[i] != "11R" :     # a != b           # a が b と異なる
    del lines_s0[i]
  else:
    j += 1
    i += 1
    if j == 2:           # 2回目の11Rで抜ける 2回目の11Rの次がレース名
        print("11R 2times out loop")
        break
    else :
            print(lines_s0[i],j)

i = 0
for line in lines_s1:
  if lines_s1[i] != "--◎◯▲△☆✓消" :     # a != b           # a が b と異なる
    del lines_s1[i]
  else:
    break





お気に入りの記事を「いいね!」で応援しよう

Last updated  Aug 9, 2020 04:43:46 PM
コメント(2) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

Free Space

設定されていません。

Calendar

Comments

kazu_x68k @ Re[1]:2021年ブログ初め 文字化け解消(01/04) グリ太さんへ 遅くなりましたが、明けまし…
グリ太 @ Re:2021年ブログ初め 文字化け解消(01/04) 明けましておめでとうございます。今年も…
グリ太 @ Re:Python で 競馬予想 実践第10回 チャンピオンズカップ他(12/06) 私も相手探しだとは思うのですが、川田がG…
kazu_x68k @ Re[1]:Python で 競馬予想 実践第8回 ジャパンカップ他(11/28) グリ太さんへ さすがに3強には勝てなかっ…

Favorite Blog

ごった煮 グリ太さん
趣味のDVDと投資… チャック・ハウアさん
 TM万太郎の なまら… TM万太郎さん

Archives

Dec , 2024
Nov , 2024
Oct , 2024
Sep , 2024
Aug , 2024

© Rakuten Group, Inc.
X
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: