漂亮的汤Python循环迭代未完成

漂亮的汤Python循环迭代未完成,python,html,web,web-scraping,bs4,Python,Html,Web,Web Scraping,Bs4,我对代码有两个问题。首先,数据没有在字段标题下正确显示,其次,循环仅从html中获取部分数据。代码试图提取网站上一个页面上的14个事件。页面中的每个事件的html代码都相同,(即html只是一次又一次地重复)。第一个问题在于生成的数据和字段标题。我应该得到以下信息: 鳍、灰狗、陷阱、SP、时间/秒、时间、距离、教练、评论 1,Bernies Toughguy,3,7/4F,3.63,23.91,(培训师:M N Fenwick),“评论: EP,SnLd 2,温柔的凯威尔,2,7/2,3.70,

我对代码有两个问题。首先,数据没有在字段标题下正确显示,其次,循环仅从html中获取部分数据。代码试图提取网站上一个页面上的14个事件。页面中的每个事件的html代码都相同,(即html只是一次又一次地重复)。第一个问题在于生成的数据和字段标题。我应该得到以下信息: 鳍、灰狗、陷阱、SP、时间/秒、时间、距离、教练、评论

1,Bernies Toughguy,3,7/4F,3.63,23.91,(培训师:M N Fenwick),“评论: EP,SnLd

2,温柔的凯威尔,2,7/2,3.70,24.01(1 1/4),(培训师:J M Liles),评论: 拉农中部

3,哈利,5,3/1,3.72,24.17(2),(培训师:A C B 绿色),注释:BmpRnUp&2,Crd 1/4

科罗拉多州蒂根,4,7/1,3.74,24.33(2),(培训师:M N 芬威克),“评论:宽,埃维奇”

5,上市前蜂蜜,6,6/1,3.68,24.51(21/4),(培训师:A C B 绿色),“注释:SAw,Crd2”

6,Malbay Roxy,1,7/2,3.81,24.57(3/4),(培训师:M N Fenwick),“评论: EP,SnLd“

在这里,每个数据都正确地落在每个字段(粗体)标题下,即终点位置Dogname等。但是,当我运行程序时,我得到以下信息:

鳍,灰狗,陷阱,SP,时间/秒,时间/距离,(教练:M N Fenwick),“评论:EP,SnLd”

1,Bernies Toughguy,3,7/4F,3.63,23.91,(培训师:J M Liles),“评论: 中托尔斯,拉农“

2,温柔的凯威尔,2,7/2,3.70,24.01(1 1/4),(培训师:A C B 绿色),注释:“BmpRnUp&1/4”

3,哈利,5,3/1,3.72,24.17(2),(培训师:A C B 绿色),注释:“BmpRnUp&2,Crd 1/4”

科罗拉多州蒂根,4,7/1,3.74,24.33(2),(培训师:M N 芬威克),“评论:宽,埃维奇”

5,上市前蜂蜜,6,6/1,3.68,24.51(21/4),(培训师:J M Liles),“评论:SAw,Crd2”

6,马尔贝·罗克西,1,7/2,3.81,24.57(3/4),(教练:B/D O'sullivan),“评论:EP,SnLd”

请注意,在第一行中,应该包含字段名称,我得到了一些字段名称,但最后几行被培训师的名称和注释(斜体)替换,这会将各个字段中的剩余数据弄乱

第二个问题可能与循环迭代有关。正如我已经说过的,页面上的HTML非常统一,但由于某种原因,当我运行程序时,数据在第五个参与者(大道方向)上停止,在第六个事件中(11.51)在卡片上,当卡片上实际有14个事件时,循环会使其余的事件失败。因此,循环似乎要崩溃,但我在HTML中看不到任何明显的原因。下面是代码,我尝试了代码的许多变体,但我似乎无法破解它。我确实认为我可能必须包含代码来确定I的数量循环中的迭代,但是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)

关于您丢失的数据,您是否能够从文件而不是网络下载源代码并对其进行解析?如果无法解决问题,您会怎么想?嗨,Mathias,我尝试了您的建议,但似乎没有任何效果。我查看了html,但在那里找不到任何内容。我不知道bs4有如此多的缺点。您是否尝试打印立即检查整个
bsObj
,以检查它是否与您的输入一致?也许尝试一下可以解决您的问题。