• 締切済み

csvファイルに保存が出来ずに困っています!!

python初心者でございます。 python2.7,beautifulsoupを用いて競馬情報をスクレイピングしましたが、 作成されたhorse.csvファイルにデータ保存が出来ず、困っております。 csvファイルに保存出来るスクリプトを、御教示よろしくお願いいたします。 小生が作成したソースコード -*- coding:utf-8 -*- import urllib2 import codecs from bs4 import BeautifulSoup f = codecs.open('horse.csv', 'w', 'utf-8') f.write('tr1') 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.a.string f.close() 試したこと 上記のプログラムを動かすと作成されたCSVファイルには何も記録、保存されておりませんでした。 御教示よろしくお願いいたします!!!

みんなの回答

回答No.2

普段Python3を使っているので動く試していませんが import urllib2 from bs4 import BeautifulSoup import csv tpl_url = 'http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}' for n in range(1, 2): url = tpl_url.format(n) html = urllib2.urlopen(url) soup = BeautifulSoup(html, 'lxml') tr = soup.select('#contents_liquid > table > tbody > tr') data = [[j.get_text().strip() for j in i.select('td.txt_l')] for i in tr] with open('horse.csv', 'wt') as fw: writer = csv.writer(fw, lineterminator='\n') writer.writerows(data) findやfindallよりもselectのほうが簡単でシンプルに書くことができます。

akakage13
質問者

お礼

python3の勉強も出来ました。 本当にありがとうございました!!!

noname#224808
noname#224808
回答No.1

見た感じcsv出力だけではなくプログラムそのものが動いていないのではないでしょうか。 エラーが出ていなければ「tr1」という文字だけ記載されているcsvファイルができると思いますが。 とりあえず f.write('tr1') は、そこではなくて for tr1 in lrg1: の下あたりでしょうね。tr1の何を出力したいのか分かりませんが、 f.write(tr1.a.string) とでもすれば、他に問題がなければ標準出力に表示されているものと同じものがcsvファイルにはき出されるはずです。

akakage13
質問者

お礼

ありがとうございました!、問題点が分かりました!!!

専門家に質問してみよう