从XHR请求返回的嵌套列表中提取第二个列表

时间:2014-10-07 20:21:40

标签: python xmlhttprequest python-requests

我使用以下代码通过复制提交给它的XHR请求从网站返回数据:

import requests

url = 'http://www.whoscored.com/stageplayerstatfeed/-1/Overall'
params = {
'field': '0',
'isAscending': 'false',
'isMoreThanAvgApps': 'true',
'isOverall': 'false',
'numberOfPlayersToPick': '20',
'orderBy': 'Rating',
'page': '1',
'stageId': '9155',
'teamId': '-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.text
responser = responser.encode('cp1252')
print responser

这将返回一组嵌套列表。第一个列表是一个简单列表,而第二个列表是字典列表。我想要返回第二个列表。

我已尝试将代码的最后一行修改为print responser[1],但出于某种原因,这只会打印[

任何人都能明白为什么这不能归还我需要的东西吗?

由于

2 个答案:

答案 0 :(得分:1)

responser变量包含JSON字符串。这意味着,当您获得responser[1]时,您基本上会从字符串中获取第二个字符,即[

将JSON字符串加载到python列表中。最简单的方法是使用requests模块提供的.json()方法:

responser = requests.get(url, params=params, headers=headers)
data = responser.json()
print data[1]

答案 1 :(得分:1)

因为您正在将请求响应转换为文本。所以这一行:

responser = responser.text

应该是:

responser = responser.json()

然后你可以打印:

print responser[1]