无法修改词典中的页码

时间:2019-03-29 04:40:53

标签: python json python-3.x web-scraping

我已经使用POST请求在python中编写了一个脚本,以从网页中获取json内容。如果我只坚持默认页面,该脚本就很好。但是,我的目的是创建一个循环,以从几个不同的页面收集内容。我要解决的唯一问题是在page中使用payload关键字来循环三个不同的页面。认为我的错误做法是占位符。

  

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

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

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'

1 个答案:

答案 0 :(得分: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()