Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从无法访问的JsonObject()中提取数据_Json_Beautifulsoup_Python Requests_Algolia - Fatal编程技术网

从无法访问的JsonObject()中提取数据

从无法访问的JsonObject()中提取数据,json,beautifulsoup,python-requests,algolia,Json,Beautifulsoup,Python Requests,Algolia,我正试图找到一个物体来刮它 import requests from bs4 import BeautifulSoup url ='https://fjrgcwbcbo-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%20(lite)%203.27.0%3Binstantsearch.js%202.8.0%3BJS%20Helper%202.26.0&x-a

我正试图找到一个物体来刮它

import requests
from bs4 import BeautifulSoup

url ='https://fjrgcwbcbo-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%20(lite)%203.27.0%3Binstantsearch.js%202.8.0%3BJS%20Helper%202.26.0&x-algolia-application-id=FJRGCWBCBO&x-algolia-api-key=a214a1e7afd822b517723830f05e9449'
jsonObj = requests.get(url).json()

print(JsonObj)
此URL中有四个JsonObject,但每个JsonObject似乎都被API阻止。


非常感谢。

您需要输入查询参数和负载,并确定它是如何接收的,这是一种很棘手的方法。但这确实起到了关键作用:

import requests
import json

url ='https://fjrgcwbcbo-dsn.algolia.net/1/indexes/*/queries'

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}

params = {
'x-algolia-agent': 'Algolia for vanilla JavaScript (lite) 3.27.0;instantsearch.js 2.8.0;JS Helper 2.26.0',
'x-algolia-application-id': 'FJRGCWBCBO',
'x-algolia-api-key': 'a214a1e7afd822b517723830f05e9449'}

data = {"requests":[{"indexName":"CAPI-agents-stage","params":"query=&hitsPerPage=20&maxValuesPerFacet=10&page=0&filters=source.name%3Atremplin%20AND%20NOT%20source.id%3A400%20AND%20NOT%20source.id%3A2662%20AND%20NOT%20source.id%3A3292%20AND%20NOT%20source.id%3A720%20AND%20NOT%20source.id%3A1%20AND%20NOT%20source.id%3A5167%20AND%20NOT%20source.id%3A177%20AND%20NOT%20source.id%3A7907%20AND%20NOT%20source.id%3A4999%20AND%20NOT%20source.id%3A979%20AND%20NOT%20source.id%3A5538%20AND%20NOT%20source.id%3A8062%20AND%20NOT%20source.id%3A7908%20AND%20NOT%20source.id%3A38%20AND%20NOT%20source.id%3A7957%20AND%20NOT%20source.id%3A8084%20AND%20NOT%20source.id%3A8078%20AND%20NOT%20source.id%3A8158%20AND%20NOT%20source.id%3A9298%20AND%20NOT%20source.id%3A9299%20AND%20NOT%20source.id%3A9368%20AND%20NOT%20source.id%3A540%20AND%20NOT%20source.id%3A7905%20AND%20NOT%20source.id%3A10173&facets=%5B%22identity.last_name%22%2C%22geolocation.city%22%2C%22geolocation.postal_code%22%2C%22geolocation.region%22%2C%22geolocation.department%22%2C%22geolocation.country%22%2C%22specialities%22%5D&tagFilters="}]}
jsondata = json.dumps(data)

jsonObj = requests.post(url, data=jsondata, params=params).json()

print(jsonObj['results'][0])

for each in jsonObj['results'][0]['hits']:
    print (each['email_address'])
附加:

我调整了更改查询/数据参数的方式

import requests
import urllib

url ='https://fjrgcwbcbo-dsn.algolia.net/1/indexes/*/queries'

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}

params = {
'x-algolia-agent': 'Algolia for vanilla JavaScript (lite) 3.27.0;instantsearch.js 2.8.0;JS Helper 2.26.0',
'x-algolia-application-id': 'FJRGCWBCBO',
'x-algolia-api-key': 'a214a1e7afd822b517723830f05e9449'}


#Utilize a simplier way to input query parameters
query = {
"indexName":"CAPI-agents-stage", 
"hitsPerPage": "20",
"maxValuesPerFacet": "10",
"page": "0",
"filters": "source.name:tremplin AND NOT source.id:400 AND NOT source.id:2662 AND NOT source.id:3292 AND NOT source.id:720 AND NOT source.id:1 AND NOT source.id:5167 AND NOT source.id:177 AND NOT source.id:7907 AND NOT source.id:4999 AND NOT source.id:979 AND NOT source.id:5538 AND NOT source.id:8062 AND NOT source.id:7908 AND NOT source.id:38 AND NOT source.id:7957 AND NOT source.id:8084 AND NOT source.id:8078 AND NOT source.id:8158 AND NOT source.id:9298 AND NOT source.id:9299 AND NOT source.id:9368 AND NOT source.id:540 AND NOT source.id:7905 AND NOT source.id:10173",
"facets": str(["identity.last_name","geolocation.city","geolocation.postal_code","geolocation.region","geolocation.department","geolocation.country","specialities"]),
"tagFilters": ""}

#Create the string for the data parameter using the urllib parse quote
data = '''{"requests": [{"indexName": "%s", "params": "query=&hitsPerPage=%s&maxValuesPerFacet=%s&page=%s&filters=%s&facets=%s&tagFilters=%s"}]}''' %(query['indexName'],query['hitsPerPage'],query['maxValuesPerFacet'],query['page'],urllib.parse.quote(query['filters']),urllib.parse.quote(query['facets']),query['tagFilters'])

jsonObj = requests.post(url, data=data, params=params).json()


print(jsonObj['results'][0])

for each in jsonObj['results'][0]['hits']:
    print (each['email_address'])

我找到了另一个解决方案,可以一次性删除所有电子邮件地址

import requests
import json
from algoliasearch import algoliasearch

url ='https://fjrgcwbcbo- 
dsn.algolia.net/1/indexes/*/queries'

client = algoliasearch.Client("FJRGCWBCBO", "a214a1e7afd822b517723830f05e9449")
index = client.init_index('CAPI-agents-stage')

for hit in index.browse_all({"query": ""}):
print(hit['email_address'])

如果它可以帮助任何人,非常感谢Chitown88

这是一个权限错误,意味着您访问它时做错了什么。外面的人做不了什么,但我会先从查询中删除空格<代码>{“消息”:“此API键不允许使用索引”,“状态”:403}是我在修复查询中的格式错误时得到的结果。否则,我会得到
{“message”:“indexName无效”,“status”:400}
,这意味着URL和参数不正确。看起来你的API密钥无效。请给我一分钟,我找到了答案,并将在我向上键入时立即发布解决方案,非常感谢!!!实际上,这似乎非常棘手!我想让Algolia医生明白你是怎么做的。谢谢。棘手的部分是
data={“requests”:[{“indexName”:“CAPI代理阶段”,“params”:“query=…
通常,您只需按照上面看到的
headers
params
的方式输入字典。但是该部分的查询字符串(
data
),不仅是一个嵌套字典,而且还需要以字符串的形式。我仍在寻找/研究它,看看是否有更简洁的方法来实现它。是的,他们的文档对我帮助不大。我添加了一些额外的东西,以使输入这些数据参数变得更容易。我不知道怎么做它会改变结果,因为我没有玩它,但我可以让你决定。是的,还有一个“paginationLimitedTo index parameter”限制,我可以取消前一千封电子邮件,但无法访问第50页。我正在找文档来修复它。