64,637
社区成员
发帖
与我相关
我的任务
分享
# request with first searching page
page_request = requests.get(api_resource + search_param, headers=headers)
# response to json
page = json.loads(page_request.content.decode("utf-8"))
# List of articles from this page
articles_list = page['search-results']['entry']
fileGet=(CHttpFile*)session.OpenURL(url,1,1,header);
while(fileGet->ReadString(strLine)!=NULL){
strHTML+=strLine;}
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?[/quote]
你的请求报文头是不是没加一些校验项?从回复来看,确实像是缺少授权。
需要模拟登录。
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?[/quote]
No APIKey provided for request 这个也是server返回的吧。你要有server端的代码或者文档,可以查查到底出了什么问题。
没法查看server端,那么python没问题,CInternetSession这个有问题,那最好抓包看看报文到底有什么区别。比如user-agent,说不定server认python,不认CInternetSession的。像爬虫就会自己标注为爬虫/机器人,然后网站不想爬虫爬自己网站,就可以把这些agent拒之门外。
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?[/quote]
你的请求报文头是不是没加一些校验项?从回复来看,确实像是缺少授权。
需要模拟登录。[/quote]
https://api.elsevier.com/content/search/scopus
我在python里就是没有管它,直接根据key来取我要的value,就能取出来。
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?[/quote]
No APIKey provided for request 这个也是server返回的吧。你要有server端的代码或者文档,可以查查到底出了什么问题。
没法查看server端,那么python没问题,CInternetSession这个有问题,那最好抓包看看报文到底有什么区别。比如user-agent,说不定server认python,不认CInternetSession的。像爬虫就会自己标注为爬虫/机器人,然后网站不想爬虫爬自己网站,就可以把这些agent拒之门外。[/quote]
这个是那个网站的API文档https://api.elsevier.com/content/search/scopus,里面也有一些错误的example,但只说是授权或身份验证出了问题。
怎么抓请求报文的信息呀?我不是很懂这个类,要用哪个方法呢?[/quote]
抓包可以用wireshark
但https的话,抓了也是加密的。
你可以看看CInternetSession和python的类本身有没有提供接口,来获取要发送的HTTP报文头部(字符串)
从文档看,说的就是你没权限。查查你的python代码,是不是在哪已经设置了apikey了[/quote]
我的headers里面已经包含了我的apikey。我刚才做了一下测试,当我直接在地址栏粘贴https://api.elsevier.com/content/search/scopus?apikey=**********&query=abs(%22heart%20attack%22)时,可以得到我要的XML。(apikey=******是我申请的key),我把这个url放在python里面直接用一句requests.get(),也可以返回我要的内容。但我把python代码好好写,用
api_resource = "https://api.elsevier.com/content/search/scopus?"
search_param = 'query=abs("heart attack")' # for example
# headers
headers = dict()
headers['X-ELS-APIKey'] ='*********'
headers['X-ELS-ResourceVersion'] = 'XOCS'
headers['Accept'] = 'application/json'
# request with first searching page
page_request = requests.get(api_resource + search_param, headers=headers)
时,print page_request.url得到https://api.elsevier.com/content/search/scopus?query=abs(%22heart%20attack%22,这样点进去就有错了。
你看这个返回的url跟我直接复制粘贴的少了个apikey=*******,有没可能是我的key没有正确的传进去?但是代码还有格式看起来并没有问题呀。
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?[/quote]
你的请求报文头是不是没加一些校验项?从回复来看,确实像是缺少授权。
需要模拟登录。[/quote]
https://api.elsevier.com/content/search/scopus
我在python里就是没有管它,直接根据key来取我要的value,就能取出来。
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?[/quote]
No APIKey provided for request 这个也是server返回的吧。你要有server端的代码或者文档,可以查查到底出了什么问题。
没法查看server端,那么python没问题,CInternetSession这个有问题,那最好抓包看看报文到底有什么区别。比如user-agent,说不定server认python,不认CInternetSession的。像爬虫就会自己标注为爬虫/机器人,然后网站不想爬虫爬自己网站,就可以把这些agent拒之门外。[/quote]
这个是那个网站的API文档https://api.elsevier.com/content/search/scopus,里面也有一些错误的example,但只说是授权或身份验证出了问题。
怎么抓请求报文的信息呀?我不是很懂这个类,要用哪个方法呢?[/quote]
抓包可以用wireshark
但https的话,抓了也是加密的。
你可以看看CInternetSession和python的类本身有没有提供接口,来获取要发送的HTTP报文头部(字符串)
从文档看,说的就是你没权限。查查你的python代码,是不是在哪已经设置了apikey了
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?[/quote]
你的请求报文头是不是没加一些校验项?从回复来看,确实像是缺少授权。
需要模拟登录。[/quote]
https://api.elsevier.com/content/search/scopus
我在python里就是没有管它,直接根据key来取我要的value,就能取出来。
page = json.loads(page_request.content.decode("utf-8"))
self.N=page['search-results']['opensearch:totalResults']
所以是我的APIKey有问题吗?[/quote]
No APIKey provided for request 这个也是server返回的吧。你要有server端的代码或者文档,可以查查到底出了什么问题。
没法查看server端,那么python没问题,CInternetSession这个有问题,那最好抓包看看报文到底有什么区别。比如user-agent,说不定server认python,不认CInternetSession的。像爬虫就会自己标注为爬虫/机器人,然后网站不想爬虫爬自己网站,就可以把这些agent拒之门外。[/quote]
这个是那个网站的API文档https://api.elsevier.com/content/search/scopus,里面也有一些错误的example,但只说是授权或身份验证出了问题。
怎么抓请求报文的信息呀?我不是很懂这个类,要用哪个方法呢?