社区下午好!我需要编写解析器的帮助,我才刚刚开始使用Python 3编程,也许我缺少了一些东西。任务是这样的:该站点有一个包含橄榄球队的表,使用Requests和BeautifulSoup,我能够将此表的源代码转换为firsttable变量,print命令通常显示我需要的所有数据,但是当我尝试将其显示在以下形式的列表中:
10:00 Team 1 Team 2
11:00 Team 3 Team 4
12:00 Team 5 Team 6
依此类推,我只能从列表中获取第一个值,我尝试使用While循环(例如,当i <10时),它向我重复表中的第一个值10次,但不解析剩下的。我究竟做错了什么?
def get_data(html):
soup = BeautifulSoup(html, 'lxml')
firsttable = soup.findAll('table', class_='predictionsTable')[0]
print(firsttable) #Here, all the data that I need is displayed in the console as html source
for scrap in firsttable:
try:
hometeam = scrap.find('td', class_='COL-3').text
except:
hometeam = 'Hometeam Error'
try:
awayteam = scrap.find('td', class_='COL-5').text
except:
awayteam = 'Away Team Error'
try:
btts = scrap.find('td', class_='COL-10').text
except:
btts = 'BTTS Score Error'
datenow = str(datetime.date.today())
print(datenow,hometeam,awayteam,btts)
问题来源:stackoverflow
firsttable中的scrap循环`仅有整个表内容的一个迭代,这就是为什么只找到第一行的原因。我不推荐使用循环,而是推荐使用find_all方法。这为我工作:
url = 'https://www.over25tips.com/both-teams-to-score-tips/'
soup = BeautifulSoup(requests.get(url).content, 'lxml')
firsttable = soup.findAll('table', class_='predictionsTable')[0]
hometeams = [x.text for x in firsttable.find_all('td', {'class': 'COL-3 right-align'})]
awayteams = [x.text for x in firsttable.find_all('td', {'class': 'COL-5 left-align'})]
btts = [x.text for x in firsttable.find_all('td', {'class': 'COL-10 hide-on-small-only'})]
datenow = str(datetime.date.today())
for i in range(len(hometeams)):
print(datenow, hometeams[i], awayteams[i], btts[i])
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。