有一个API,每页只产生100个结果。我正在尝试做一个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结果在字典中,params‘=零剩余( API中的页面从零开始)。
启动循环后调用params时,结果是:
{'area': 1,
'no_magic': 'false',
'order_by': 'salary_desc',
'page': 0,
'per_page': 100,
'period': 30,
'search_field': 'name',
'text': '"python"'}也许我做的循环不正确,从逻辑开始,虽然字典中有结果,但必须执行循环。
发布于 2020-12-17 17:57:23
while vacancies == True: #
params['page'] += 1将永远不会计算到文字True,不管它的内容如何。Python的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)结果将是所有项目的详细清单。
发布于 2020-12-17 18:01:59
vacancies绝不是True。如果要测试“空缺”的布尔值,可以使用bool(vacancies)。但是有了Python,您可以使用
while vacancies:
# some code logic这样,Python将自动转换为bool您的列表。如果您的列表是内部(len(your_list) > 0)中的某个内容,则bool(your_list)计算结果为True,否则就是False。
另外,不用使用dict(),您可以用以下方式编写dict:
params = {
'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
}更多的是琵琶。
https://stackoverflow.com/questions/65345816
复制相似问题