python - 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()
解决方案
你的条件不正确。这就是你想要的:
while "pagination" in str(data):
# ...
(至少对于这种情况,由于您将结构化 JSON 作为响应,因此可能有更简洁的方法来进行此检查,但这不是重点)。
您的原始条件不起作用,因为在后台,Python 将其解释为
"pagination" in str(data) and str(data) == True
这是所有比较运算符(包括类似的成员资格测试in
)具有相同优先级和比较运算符链接的结果。
链接意味着您可以编写一个常见的数学表达式,例如x < y < z
,它意味着我们通常认为它会做的事情——y
在x
and之间z
。或者换句话说,x < y AND y < z
。
但是,应用于您的原始表达式,这种链接会导致您看到令人惊讶的结果。
即使您单独测试了部分条件,也会发生这种情况,因为问题在于这些子表达式的特定组合中。如果您是通过将左侧部分分组来编写的
("pagination" in str(data)) == True
像那样,它实际上会起作用——尽管它是不必要的。在 Python 中只需做if item in sequence
就足够了,而且风格要好得多。
推荐阅读
- java - MATCH_PARENT/XML 和以编程方式生成的按钮之间的水平填充像素差异
- angular - 由于 localStorage 变量的值而动态更改导航栏的问题
- python - 计算从最接近的矩阵获得的矩阵索引的平均值
- java - 如何扩展 Android Chronometer?
- python - 关于使用 dict 拆分数据帧的错误
- vue.js - webpack 将不同入口点的所有依赖项捆绑在一个包中,并在所有相应的 html 中使用相同的包
- swift - 如何在可可应用程序中合成鼠标点击?
- xamarin.forms - 使用 xamarin.forms 未完全加载 ListView 项目
- quantum-computing - 在真正的量子计算机上测试 Q# 代码?
- animation - 调整大小时的 SwiftUI 文本剪辑