我使用以下代码从ESPN抓取数据:
import requests
from bs4 import BeautifulSoup
url = 'http://www.espn.com/nba/team/schedule/_/name/bos'
r = requests.get(url)
soup = BeautifulSoup(r.text)
listes = soup.find_all('ul', class_='game-schedule')
resultats = []
i = 0
for liste in listes :
if not i % 2 :
resultat = {}
for item in liste.find_all('li') :
if item.text :
if 'class' in item.attrs :
cle = str(item.attrs['class'][-1])
if cle in ('win', 'loss') :
cle = 'resultat'
resultat[cle] = item.text
if i % 2 and 'score' in resultat.keys() :
resultats.append(resultat)
i += 1
print(resultats)
它将凯尔特人队最后一场比赛的结果打印成一个词典列表。问题是我想用Kivy来展示它,但我试图通过尝试来取得成功:
from kivy.uix.listview import ListView
from kivy.base import runTouchApp
class MainView(ListView):
def __init__(self, **kwargs):
super(MainView, self).__init__(
resultats)
if __name__ == '__main__':
runTouchApp(MainView())
它向我显示了这个错误:
TypeError: __init__() takes 1 positional argument but 2 were given
答案 0 :(得分:0)
from kivy.uix.listview import ListView
from kivy.base import runTouchApp
class MainView(ListView):
def __init__(self, **kwargs):
super(MainView, self).__init__(item_strings=resultats)
if __name__ == '__main__':
runTouchApp(MainView())
你可以尝试上面的片段,希望这有帮助吗
答案 1 :(得分:0)
这是正确的,pramod说在这种情况下分离并不是完全必要的。但你有一天可能真的想要这样做,你可以。有很多方法可以完成它,这是我的头脑中的一个。它可能不是最有效的方法,但它有效。
import re
mydict = [ {'score': '106-102', 'resultat': 'L', 'game-status': 'vs', 'team-name': 'Chicago'},
{'score': '111-97', 'resultat': 'L', 'game-status': 'vs', 'team-name': 'Chicago'},
{'score': '104-87', 'resultat': 'W', 'game-status': '@', 'team-name': 'Chicago'}]
for i in range(len(mydict)):
tempdict = list(dict(mydict[i]).values())
for x in range(len(tempdict)):
if re.search('\d',tempdict[x]):
print(tempdict[x])
结果: 106-102 111-97 104-87