我试图取消BBC足球赛结果网站,以获得球队,投篮,进球,卡片和事故。
我用Python编写脚本并使用Beautiful soup包。提供的代码仅检索事件中表的第一个条目。当事件表打印到屏幕时,完整的表将存在所有数据。
我正在抓取的表存储在事件中:
from bs4 import BeautifulSoup
import urllib2
url = 'http://www.bbc.co.uk/sport/football/result/partial/EFBO815155?teamview=false'
inner_page = urllib2.urlopen(url).read()
soupb = BeautifulSoup(inner_page, 'lxml')
for incidents in soupb.find_all('table', class_="incidents-table"):
print incidents.prettify()
home_inc_tag = incidents.find('td', class_='incident-player-home')
home_inc = home_inc_tag and ''.join(home_inc_tag.stripped_strings)
type_inc_tag = incidents.find('td', 'span', class_='incident-type goal')
type_inc = type_inc_tag and ''.join(type_inc_tag.stripped_strings)
time_inc_tag = incidents.find('td', class_='incident-time')
time_inc = time_inc_tag and ''.join(time_inc_tag.stripped_strings)
away_inc_tag = incidents.find('td', class_='incident-player-away')
away_inc = away_inc_tag and ''.join(away_inc_tag.stripped_strings)
print home_inc, time_inc, type_inc, away_inc
在我将正则表达式添加到URL中以获取所有匹配详细信息之前,我现在只关注一个匹配以获得正确(EFBO815155)。
因此,incidents
for循环没有得到所有数据,只是表中的第一个条目。
在此先感谢,我是新的堆栈溢出,如果这篇文章有任何问题,格式化等请告诉我。 谢谢!
答案 0 :(得分:1)
首先,获取事件表:
incidentsTable = soupb.find_all('table', class_='incidents-table')[0]
然后循环遍历所有' tr'该表中的标签。
for incidents in incidentsTable.find_all('tr'):
# your code as it is
print incidents.prettify()
home_inc_tag = incidents.find('td', class_='incident-player-home')
home_inc = home_inc_tag and ''.join(home_inc_tag.stripped_strings)
.
.
.
提供输出:
Bradford Park Avenue 1-2 Boston United
None None
2' Goal J.Rollins
36' None C.Piergianni
N.Turner 42' None
50' Goal D.Southwell
C.King 60' Goal
这接近你想要的。希望这有帮助!