首页 > 解决方案 > While 循环请求分页链接

问题描述

我想遍历分页页面,直到到达最后一个。我在页面中搜索单词 pagination,只要它存在,我就希望我的循环继续。我现在所拥有的不会执行 while 循环内的部分。我已经单独测试了条件语句以验证它是否返回 True。

response = requests.get("someapi.api")
data = response.json()

while "pagination" in str(data) == True:
    print "Found string"
    response = requests.get(str(pag_object), timeout=5)
    data = response.json()

标签: pythonpython-2.6

解决方案


你的条件不正确。这就是你想要的:

while "pagination" in str(data):
    # ...

(至少对于这种情况,由于您将结构化 JSON 作为响应,因此可能有更简洁的方法来进行此检查,但这不是重点)。


您的原始条件不起作用,因为在后台,Python 将其解释为

"pagination" in str(data) and str(data) == True

这是所有比较运算符(包括类似的成员资格测试in)具有相同优先级比较运算符链接的结果

链接意味着您可以编写一个常见的数学表达式,例如x < y < z,它意味着我们通常认为它会做的事情——yxand之间z。或者换句话说,x < y AND y < z

但是,应用于您的原始表达式,这种链接会导致您看到令人惊讶的结果。

即使您单独测试了部分条件,也会发生这种情况,因为问题在于这些子表达式的特定组合中。如果您是通过将左侧部分分组来编写的

("pagination" in str(data)) == True

像那样,它实际上会起作用——尽管它是不必要的。在 Python 中只需做if item in sequence就足够了,而且风格要好得多。


推荐阅读