我正在尝试分析来自这个website的数据。
在inspect元素的Network部分,我找到了这个链接https://busfor.pl/api/v1/searches,它用于返回我感兴趣的JSON的POST请求。
但是对于发出这个POST请求,有一个带有字典的请求负载。
我假设它与我们在scrapy中用于发出FormRequest的普通formdata一样,但它返回403错误。
我已经尝试了以下方法。
url = "https://busfor.pl/api/v1/searches"
formdata = {"from_id" : d_id
,"to_id" : a_id
,"on" : '2019-10-10'
,"passengers" : 1
,"details" : []
}
yield scrapy.FormRequest(url, callback=self.parse, formdata=formdata)
返回403错误
我还通过引用一个StackOverflow post尝试了这一点。
url = "https://busfor.pl/api/v1/searches"
payload = [{"from_id" : d_id
,"to_id" : a_id
,"on" : '2019-10-10'
,"passengers" : 1
,"details" : []
}]
yield scrapy.Request(url, self.parse, method = "POST", body = json.dumps(payload))
但即使这样也会返回相同的错误。
有人能帮我吗。找出如何使用Scrapy解析所需的数据。你知道吗
用json数据发送POST请求的方法是后者,但是您将错误的json传递到站点,它需要的是一个字典,而不是一个字典列表。 所以不是:
您应该使用:
另一件您没有注意到的事情是传递给POST请求的
headers
,有时站点使用id和哈希来控制对其API的访问,在本例中,我发现了两个似乎需要的值,X-CSRF-Token
和X-NewRelic-ID
。幸运的是,这两个值可以在搜索页面上找到。你知道吗这是一个工作的spider,搜索结果在方法
self.parse_search
中可用。你知道吗相关问题 更多 >
编程相关推荐