python - 如何使用 python 迭代器阅读 API 的下一页?
问题描述
有一个 API 每页只产生一百个结果。我正在尝试制作一个while循环,以便它遍历所有页面并从所有页面获取结果,但它不起作用。如果您能帮我弄清楚,我将不胜感激。
params = dict(
order_by='salary_desc',
text=keyword,
area=area,
period=30, # days
per_page=100,
page = 0,
no_magic='false', # disable magic
search_field='name' # available: name, description, company_name
)
response = requests.get(
BASE_URL + '/vacancies',
headers={'User-Agent': generate_user_agent()},
params=params,
)
response
items = response.json()['items']
vacancies = []
for item in items:
vacancies.append(dict(
id=item['id'],
name=item['name'],
salary_from=item['salary']['from'] if item['salary'] else None,
salary_to=item['salary']['to'] if item['salary'] else None,
currency = item['salary']['currency'] if item['salary'] else None,
created=item['published_at'],
company=item['employer']['name'],
area = item['area']['name'],
url=item['alternate_url']
))
我遍历字典,如果字典中有结果,我将 +1 作为迭代器添加到页面参数:
while vacancies == True:
params['page'] += 1
结果字典参数 ['page'] = 零剩余(API 中的页面从零开始)。
启动循环后调用 params 时,结果为:
{'area': 1,
'no_magic': 'false',
'order_by': 'salary_desc',
'page': 0,
'per_page': 100,
'period': 30,
'search_field': 'name',
'text': '"python"'}
也许我做的循环不正确,从逻辑开始,虽然字典中有结果,但必须执行循环。
解决方案
while vacancies == True: #
params['page'] += 1
True
无论其内容如何,都不会评估为文字。蟒蛇dict
的; 甚至认为他们是真实的他们不是True
。你需要减少声明的严格性。
if vacancies: # is truthy if it's len > 0, falsey otherwise
# Do something
或者您可以明确检查它是否有内容
if len(vacancies) > 0:
# Do something
这解决了如何基于对象进行评估的问题,但并没有解决整体逻辑问题。
for _ in vacancies:
params["page"] += 1
# Does something for every item in vacancies
您在每个循环中所做的操作将取决于问题,并且需要另一个问题!
固定在下面
params = dict(
order_by='salary_desc',
text=keyword,
area=area,
period=30, # days
per_page=100,
page = 0,
no_magic='false', # disable magic
search_field='name' # available: name, description, company_name
)
pages = []
while True:
params["page"] += 1
response = requests.get(BASE_URL + '/vacancies', headers={'User-Agent': generate_user_agent()}, params=params,)
items = response.json()['items']
if not items:
break
pages.append(items) # Do it for each page
为每个页面制作空缺
results = []
for page in pages:
vacancies = []
for item in page:
vacancies.append(dict(
id=item['id'],
name=item['name'],
salary_from=item['salary']['from'] if item['salary'] else None,
salary_to=item['salary']['to'] if item['salary'] else None,
currency = item['salary']['currency'] if item['salary'] else None,
created=item['published_at'],
company=item['employer']['name'],
area = item['area']['name'],
url=item['alternate_url']
))
results.append(vacancies)
结果将是所有项目的精细列表。
推荐阅读
- python - 如何在mac上卸载python3?
- microsoft-teams - 有没有一种通过 MS Graph API 访问 Teams 报告和分析数据的方法,与 Teams Admin Center 中的方法相同
- c# - SHA256 C# 与 PHP 的区别
- java - 带有令牌持有者的 POST 标头
- office365 - 如何使用 powerpoint javascript API 创建一个 Power Point 模板?
- javascript - 如何在 react-chartjs-2 中更改甜甜圈的文本大小?
- java - DTO 中是否需要 Setter 来通过 Spring Web 客户端解析 API JSON 响应?
- javascript - 如何获取 Mat Autocomplete 的 Panel ElementRef
- amazon-web-services - 我在云端更新了我的内容,但我在路由 53 上的域名没有提供更新的内容
- html - post语句下的django重定向不起作用