无法修改字典中的页码

问题描述 投票:1回答:1

我在python中编写了一个脚本,使用post请求从网页中获取json内容。如果我只坚持它的默认页面,脚本就可以了。但是,我的目的是创建一个循环来从几个不同的页面收集内容。我正在努力解决的唯一问题是在page中使用payload关键字来循环三个不同的页面。考虑我作为占位符的错误方法。

如何在dict中使用格式来更改页码?

工作脚本(如果我摆脱了分页循环):

import requests

link = 'https://nsv3auess7-3.algolianet.com/1/indexes/idealist7-production/query?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.30.0&x-algolia-application-id=NSV3AUESS7&x-algolia-api-key=c2730ea10ab82787f2f3cc961e8c1e06'

for page in range(0,3):
    payload = {"params":"getRankingInfo=true&clickAnalytics=true&facets=*&hitsPerPage=20&page={}&attributesToSnippet=%5B%22description%3A20%22%5D&attributesToRetrieve=objectID%2Ctype%2Cpublished%2Cname%2Ccity%2Cstate%2Ccountry%2Curl%2CorgID%2CorgUrl%2CorgName%2CorgType%2CgroupID%2CgroupUrl%2CgroupName%2CisFullTime%2CremoteOk%2Cpaid%2ClocalizedStarts%2ClocalizedEnds%2C_geoloc&filters=(orgType%3A'NONPROFIT')%20AND%20type%3A'JOB'&aroundLatLng=40.7127837%2C%20-74.0059413&aroundPrecision=15000&minimumAroundRadius=16000&query="}
    res = requests.post(link,json=payload.format(page)).json()
    for item in res['hits']:
        print(item['name'])

我按原样运行脚本时收到错误:

res = requests.post(link,json=payload.format(page)).json()
AttributeError: 'dict' object has no attribute 'format'
python json python-3.x web-scraping
1个回答
1
投票

format是一种字符串方法。您应该将它应用于payload的字符串值:

payload = {"params":"getRankingInfo=true&clickAnalytics=true&facets=*&hitsPerPage=20&page={}&attributesToSnippet=%5B%22description%3A20%22%5D&attributesToRetrieve=objectID%2Ctype%2Cpublished%2Cname%2Ccity%2Cstate%2Ccountry%2Curl%2CorgID%2CorgUrl%2CorgName%2CorgType%2CgroupID%2CgroupUrl%2CgroupName%2CisFullTime%2CremoteOk%2Cpaid%2ClocalizedStarts%2ClocalizedEnds%2C_geoloc&filters=(orgType%3A'NONPROFIT')%20AND%20type%3A'JOB'&aroundLatLng=40.7127837%2C%20-74.0059413&aroundPrecision=15000&minimumAroundRadius=16000&query=".format(page)}
res = requests.post(link,json=payload).json()
© www.soinside.com 2019 - 2024. All rights reserved.