コードには 2 つの問題があります。1 つ目は、データがフィールド ヘッダーの下に適切に表示されないことです。2 つ目は、ループが html からデータの一部しか取得していないことです。コードは、すべて 1 つのページにある 14 のイベントを抽出しようとしますHTML コードは、ページ内のすべてのイベントで同一です (つまり、HTML が何度も繰り返されるだけです)。最初の問題は、結果のデータとフィールドの見出しにあります 。 SP,時間/秒,時間,距離,トレーナー,コメント
1,Bernies Toughguy,3,7/4F,3.63,23.91,(トレーナー: MN Fenwick),"コメント: EP,SnLd
2,Gentle Kewell,2,7/2,3.70,24.01 (1 1/4),(トレーナー: JM Liles),コメント: MidToRls,RanOn
3,Tintreach Harry,5,3/1,3.72,24.17(2),(トレーナー: ACB Green),"Comment: BmpRnUp&2,Crd 1/4"
4,Colorado Teegan,4,7/1,3.74,24.33 (2),(トレーナー: MN Fenwick),"Comment: Wide,EvCh"
5,Premarket Honey,6,6/1,3.68,24.51 (2 1/4),(トレーナー:ACB Green),"Comment: SAw,Crd2"
6,Malbay Roxy,1,7/2,3.81,24.57 (3/4),(トレーナー: MN Fenwick),"Comment: EP,SnLd"
ここで、各データは各フィールド (太字) の見出しの下に正しく配置されています。つまり、Finishing Position Dogname などです。ただし、プログラムを実行すると、次のようになります。
ヒレ,グレイハウンド,トラップ,SP,時間/秒,時間/距離, (トレーナー: MN Fenwick),"Comment: EP,SnLd"
1,Bernies Toughguy,3,7/4F,3.63,23.91,(トレーナー: JM Liles),"Comment: MidToRls,RanOn"
2,Gentle Kewell,2,7/2,3.70,24.01 (1 1/4),(トレーナー: ACB Green),コメント: "BmpRnUp& 1/4"
3,Tintreach Harry,5,3/1,3.72,24.17(2),(トレーナー:ACB Green),"Comment:"BmpRnUp&2,Crd 1/4"
4,Colorado Teegan,4,7/1,3.74,24.33 (2),(トレーナー: MN Fenwick),"Comment: Wide,EvCh"
5,Premarket Honey,6,6/1,3.68,24.51 (2 1/4),(トレーナー: JM Liles),"Comment: SAw,Crd2"
6,Malbay Roxy,1,7/2,3.81,24.57 (3/4),(トレーナー: BD O'sullivan),"Comment: EP,SnLd"
フィールド名を格納する必要がある最初の行で、フィールド名の一部を取得していますが、最後のいくつかはトレーナーの名前とコメントに置き換えられていることに注意してください (イタリック体)。さまざまな分野のデータをアップします。
2 番目の問題は、ループの繰り返しに関係している可能性があります。既に述べたように、ページ上の HTML は非常に均一ですが、何らかの理由でプログラムを実行すると、6 番目のイベントで 5 番目の参加者 (Avenue Bound) でデータが停止します。 (The 11.51) カードで、実際にはカードに 14 のイベントがあるため、残りのイベントでループが失敗しているため、ループが壊れているように見えますが、HTML に明確な理由が見当たりません。以下はコードです。私はコードの多くのバリエーションを試しましたが、それをクラックすることはできません.ループ内の反復回数を決定するためにコードを含める必要があるかもしれないと思いましたが、PythonループはCループとは異なり、これは初めてです.何かを見つけます。どんな助けでも大歓迎です。
import csv
from urllib import urlopen
from bs4 import BeautifulSoup
html = urlopen ("http://www.gbgb.org.uk/resultsMeeting.aspx?id=132115")
bsObj = BeautifulSoup(html)
one = bsObj.findAll("li", {"class": "first essential fin"})
two = bsObj.findAll("li", {"class": "essential greyhound"})
three = bsObj.findAll("li", {"class": "trap"})
four = bsObj.findAll("li", {"class": "sp"})
five = bsObj.findAll("li", {"class": "timeSec"})
six = bsObj.findAll("li", {"class": "timeDistance"})
seven = bsObj.findAll("li", {"class": "essential trainer"})
eight = bsObj.findAll("li", {"class": "first essential comment"})
firstessentialfin = [a.getText().strip() for a in one]
essentialgreyhound = [b.getText().strip() for b in two]
trap = [c.getText().strip() for c in three]
sp = [d.getText().strip() for d in four]
timeSec = [e.getText().strip() for e in five]
timeDistance = [f.getText().strip() for f in six]
essentialtrainer = [g.getText().strip() for g in seven]
firstessentialcomment = [h.getText().strip() for h in eight]
with open('dogfile.csv', 'wb') as csvfile:
writer = csv.writer(csvfile, delimiter=",")
for c in zip(firstessentialfin,essentialgreyhound,trap,sp,timeSec,timeDistance,esssentialtrainer, firstessentialcomment):
writer.writerow(c)