python中的Wikipedia JSON解析器

时间:2016-03-10 18:50:45

标签: python json

我想打印维基百科页面的摘录 但是对于每次搜索,页面都没有改变,所以如何使用通配符打印提取页面号

我尝试了以下代码

import urllib2
import json

response = urllib2.urlopen('https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=Stack%20Overflow')
data = json.load(response)   
print data["query"]["pages"][0][extract]

但是它给出了错误

Traceback (most recent call last):
  File "C:/Users/GM/Desktop/pytest/pytest.py", line 6, in <module>
    print data["query"]["pages"][0]["extract"]
KeyError: 0

请帮助

3 个答案:

答案 0 :(得分:3)

试试这个:

print data["query"]["pages"].values()[0]["extract"]

这将创建&#34;页面中所有值的列表&#34;字典。在您的示例中,只有一个值,因此[0]可以获得它。

如果有多个值,则返回其中一个值。无法预测哪一个。

答案 1 :(得分:1)

如果你print data["query"]["pages"],你会看到它是一个字典,而不是一个列表。试试print data["query"]["pages"]["21721040"]["extract"]

答案 2 :(得分:0)

在这种情况下,最好的办法是打印父结构。在这种情况下,您可以使用以下方法执行此操作:

import pprint
pprint.pprint(data["query"]["pages"])

如果你这样做,你会发现结构是dict而不是list,正如你所期待的那样。看起来键是字符串形式的数字页面ID,值是包含extract的字典,其中包含您正在寻找的提取。

我猜你正在进行的搜索实际上是在搜索维基百科页面的标题,因此可以返回多个匹配项。如果你知道你正在寻找的页面ID,你可以查找它,但我怀疑你更有可能必须遍历这些项目:

for extract in (i["extract"] for i in data["query"]["pages"].values()):
    print extract