Python 使用Scrapy请求获取403错误
当我对以下HTTP请求使用Python请求模块时,它会返回一个我所需要的dict:Python 使用Scrapy请求获取403错误,python,request,scrapy,Python,Request,Scrapy,当我对以下HTTP请求使用Python请求模块时,它会返回一个我所需要的dict: import requests payload = {'x-algolia-application-id':'Q0TMLOPF1J','x-algolia-api-key':'30a0c84a152d179ea8aa1a7a59374d08', 'hitsPerPage':'40', 'numericFilters': ['startdate > 1511095966851'],'facets': '*'
import requests
payload = {'x-algolia-application-id':'Q0TMLOPF1J','x-algolia-api-key':'30a0c84a152d179ea8aa1a7a59374d08', 'hitsPerPage':'40', 'numericFilters': ['startdate > 1511095966851'],'facets': '*' }
url = 'https://q0tmlopf1j-3.algolianet.com/1/indexes/sitecore-events'
r = requests.get(url, params=payload).json()
但是,当我尝试将其实现为一个scrapy请求,以便分析结果时:
def start_requests(self):
payload = {'x-algolia-application-id':'Q0TMLOPF1J','x-algolia-api-key':'30a0c84a152d179ea8aa1a7a59374d08', 'hitsPerPage':'40', 'numericFilters': ['startdate > 1511095966851'],'facets': '*' }
url = 'https://q0tmlopf1j-3.algolianet.com/1/indexes/sitecore-events'
yield scrapy.Request(url,
body=json.dumps(payload),
method='GET',
callback=self.parse_item)
def parse_item(self,response):
# I want to parse the dict here
我得到一个403错误。我知道我做错了一些简单的事情,这是什么?我知道您通过省略参数“解决”了问题,但正确的方法是使用
是的,我试过这个。它仍然给出了一个403。特别是:站点API返回一个错误,即API密钥或应用程序ID无效,但事实并非如此,因为相同的凭据使用请求工作。在编码后通过打印检查url这带来了一个有趣的发现:dict元素“'numericFilters':['startdate>1511095966851']”Scrapy没有正确地将其转换为URL,这就是问题所在。请求将其全部剥离。我从Scrapy请求中手动删除了它,因为它是一个不重要的过滤器,并且可以正常工作。您的意思是这可以正确地解析省略的参数吗?它没有;它仍然返回403错误。不过,没有它也行,对我来说非常好。我得到的响应与请求相同。
yield scrapy.FormRequest(
url=url,
method='GET',
formdata=payload,
callback=self.parse_item
)