我想打印维基百科页面的摘录 但是对于每次搜索,页面都没有改变,所以如何使用通配符打印提取页面号
我尝试了以下代码
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
请帮助
答案 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