【发布时间】:2021-01-06 05:33:31
【问题描述】:
我目前正在尝试使用 API 和网站的标头,而不是创建网络抓取工具。我一直在尝试使用 Chrome 开发工具检查网站,并在发出 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()
【问题讨论】:
-
专业提示:将字典而不是字符串传递到
requests.post(data=...)并让请求为您序列化它。这方式比手动将字典写成 JSON 更不容易出错。 -
@KirkStrauser 谢谢你的提示!!
标签: python api google-chrome-devtools