我使用for循环提交一系列xhr请求来改变它的参数,如下所示:
import json
import requests
import jsonobject
for i in range(0, 1): #set to 1 rather than three to making demonstration easier
if i == 0:
var = "0"
var2 = "Home"
elif i == 1:
var = "1"
var2 = "Away"
elif i == 2:
var = "2"
var2 = "Overall"
url = 'http://www.whoscored.com/StatisticsFeed/1/GetPlayerStatistics'
params = {
'category': 'tackles',
'subcategory': 'success',
'statsAccumulationType': '0',
'isCurrent': 'true',
'playerId': '',
'teamIds': '',
'matchId': '',
'stageId': '9155',
'tournamentOptions': '2',
'sortBy': 'Rating',
'sortAscending': '',
'age': '',
'ageComparisonType': '',
'appearances': '',
'appearancesComparisonType': '0',
'field': var2, #parameter from for loop
'nationality': '',
'positionOptions': "'FW','AML','AMC','AMR','ML','MC','MR','DMC','DL','DC','DR','GK','Sub'",
'timeOfTheGameEnd': '5',
'timeOfTheGameStart': '0',
'isMinApp': '',
'page': '1',
'includeZeroValues': '',
'numberOfPlayersToPick': '1'
}
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Host': 'www.whoscored.com',
'Referer': 'http://www.whoscored.com/'}
responser = requests.get(url, params=params, headers=headers)
responser = responser.json()
print "responser = ",responser #contents of .json() object
playerTableStats = responser[u'playerTableStats'] #json sub object to be parsed
statColumns = responser[u'statColumns'][3:] #json sub object to pass to .format() statement
statColumns = ''.join('{' + x + '}' for x in statColumns)
print "statColumns = ",statColumns
for statDict in playerTableStats:
var = (statColumns.format(**statDict)) #statColumns object passed to .format() statement
print "var = ",var
对于每个responer.json()对象,有两个嵌套组件。第一个statColumns
可以用作.format()语句的一部分来映射第二个,标题为playerTableStats
。所以你可以看到这段代码在做什么,这是打印的输出:
responser = {u'statColumns': [u'apps', u'subOn', u'minsPlayed', u'tackleWonTotal',
u'challengeLost', u'tackleTotalAttempted'], u'paging': {u'firstRecordIndex': 1, u'resultsPerPage': 1,
u'lastRecordIndex': 1, u'totalPages': 431, u'currentPage': 1, u'totalResults': 431},
u'playerTableStats': [{u'positionText': u'Defender', u'rating': 8.37, u'weight': 77, u'playerId':
22079, u'height': 188, u'teamId': 32, u'playedPositions': u'-DC-', u'challengeLost': 0.0,
u'isManOfTheMatch': False, u'isOpta': True, u'subOn': 0, u'tackleWonTotal': 2.0,
u'tournamentShortName': u'EPL', u'apps': 1, u'teamName': u'Manchester United',
u'tournamentRegionId': 252, u'regionCode': u'gb-nir', u'tournamentRegionCode': u'gb-eng',
u'playedPositionsShort': u'D(C)', u'seasonId': 4311, u'ranking': 1, u'minsPlayed': 90,
u'tournamentName': u'Premier League', u'isActive': True, u'name': u'Jonny Evans', u'firstName':
u'Jonny', u'lastName': u'Evans', u'age': 26, u'seasonName': u'2014/2015', u'tournamentId': 2,
u'tackleTotalAttempted': 2.0}]}
statColumns = {tackleWonTotal}{challengeLost}{tackleTotalAttempted}
var = 2.00.02.0
我希望看到的playerTableStats
语句中打印的statColumns =
元素打印为:
2.0,0.0,2.0
而不是:
2.00.02.0
......我正在接受。有人能看出我做错了吗?
由于
答案 0 :(得分:2)
我还没有仔细阅读你的代码,但在我看来你应该.join
使用逗号,而不是空字符串:
statColumns = ','.join('{' + x + '}' for x in statColumns)
# ^ comma here, not empty string.
否则,您的格式语句看起来像'{minsPlayed}{tackleWonTotal}...'
而不是'{minsPlayed},{tackleWonTotal},...'