如何解决api端点上的发布请求不返回数据
我目前正在尝试使用 API 和网站标头,而不是创建网页抓取工具。我一直在尝试使用 Chrome Dev Tools 检查网站,并在发出 POST 请求时捕获 network
标签下的信息。
到目前为止,我没有运气,只能从端点获取 <Response [200]>
,但没有返回数据。
请告知我做错了什么。
以下是我的 Python 代码:
import requests
def get_data_from_api():
search_keyword = 'money'
api_endpoint = 'https://45bwzj1sgc-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20JavaScript%20(4.2.0)%3B%20browser'
payload = {
'x-xxxx-application-id': '45BWZJ1SGC','x-xxx-api-key': 'MTRkMGNlOGFhMWQ4YThmZDA0YmViNGY2M2ViYzBlMGMwNTBmMjllNjJmMDA4YmY1YzY3YzI2NzRmMzlhYThkM3RhZ0ZpbHRlcnM9JTVCJTVCJTIyc3VzX3B1YmxpYyUyMiUyQyUyMnN1c19jaGFubmVsX2FsbCUyMiUyQyUyMnN1c19jaGFubmVsX2ZlYXR1cmVkJTIyJTJDJTIyc3VzX2NoYW5uZWxfd2Vla2x5LW5ld3NsZXR0ZXIlMjIlMkMlMjJzdXNfY2hhbm5lbF9hbWElMjIlMkMlMjJzdXNfY2hhbm5lbF9saXZlc3RyZWFtJTIyJTJDJTIyc3VzX2NoYW5uZWxfc2hvdy1zdXMlMjIlMkMlMjJzdXNfY2hhbm5lbF9lbmdpbmVlcmluZyUyMiU1RCU1RCZhbmFseXRpY3NUYWdzPSU1QiUyMnN1cyUyMiU1RA=='
}
r = requests.post(api_endpoint,headers= payload,data=str(''' {"requests":[{"indexName":"OmniSearch_sus_production","query":"'''+search_keyword+'''","params":"attributesToSnippet=%5B%22body%3A80%22%2C%22searchable_comments%3A30%22%5D&page=0&hitsPerPage=10&filters=&facetFilters=%5B%5B%5D%5D&facets=%5B%22channel%22%5D&sortFacetValuesBy=count&clickAnalytics=true"}]} '''))
print(r)
if __name__ == "__main__":
get_data_from_api()
解决方法
你可以试试:
print(r.json())
,
r
是一个 response 对象。
你可以使用
-
r.content
获取二进制正文。 -
r.text
获取字符串主体 -
r.json()
或orjson.loads(r.content)
获取 json 正文
通过here查看更多详情
,为了跟进我的评论,有几个地方可以让 Python 为您完成繁重的工作。考虑使用 urllib.parse.urlencode
创建 params
值的替代方案,然后让请求序列化您的数据结构:
from urllib.parse import urlencode
import requests
def get_data_from_api():
search_keyword = "money"
api_endpoint = "..."
headers = {
"x-xxxx-application-id": "...","x-xxx-api-key": "...",}
params = {
"attributesToSnippet": '["body:80","searchable_comments:30"]',"page": "0","hitsPerPage": "10","facetFilters": "[[]]","filters": "","facets": '["channel"]',"sortFacetValuesBy": "count","clickAnalytics": "true",}
r = requests.post(
api_endpoint,headers=headers,data={
"requests": [
{
"indexName": "OmniSearch_sus_production","query": search_keyword,"params": urlencode(params),}
]
},)
return r.json()
快点,ApplePie!现在是凌晨 2 点,有些东西坏了,每个人都惊慌失措!您更愿意对哪个版本的代码(功能相同)进行故障排除?
我知道这并不能直接回答您的问题,但本着“当我们讨论这个主题时……”的精神来回答这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。