url返回JSON,但使用Scrapy时,我得到了一个奇怪的响应

vd2z7a6w  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(133)

我是Scrappy的新手,我很难理解我从一个简单的地址中得到的响应。地址是https://fr.getaround.com/search.json?address=Gare de Bordeaux Saint-Jean,它给予了一个很长的JSON响应(〉130 k字符)。
这个json的想法是,然后刮取响应提供的汽车列表。
getaround api在其回答中是相当标准的,所以即使没有汽车,我仍然会收到带有空汽车列表的全局json结构。
当我尝试用Scrapy的时候,我得到了一个非常简短的回应:b'{"redirect_to":"/"}'
下面是我使用的代码

def start_requests(self):
    addresses= ["Gare de Bordeaux Saint-Jean"]       

    for address in addresses:
        yield scrapy.Request(
            f"https://fr.getaround.com/search.json?address={address}"
        )

def parse(self, response):
    print("--------------------------------------------------------\nRESPONSE\n--------------------------------------------------------")
    print(response)
    print("--------------------------------------------------------\nBODY\n--------------------------------------------------------")
    print(response.body)

我试了几样东西:

  • 使用剧作家

它基本上将前面的response.body封装在一些html标记之间

  • 使用shell

相同的响应。我试图强制该方法GET(request = request.replace(method="GET"))或POST(method="POST"

  1. GET给出200代码,在POSTMAN中正确响应,200状态,仅主体为b'',外壳不牢固
  2. POST在POSTMAN和Scrapy中都给出了404代码
  • 我试着在www.example.com上启用或不启用cookiesettings.py但没有成功。
  • 我试着把主页(fr.getaround.com)从response.body中刮出来,看起来很好。

你知道我做错了什么吗?

编辑

Here我从POSTMAN得到的json响应/打开url

g6ll5ycj

g6ll5ycj1#

所以在Chrome / Postman中打开的请求和Scrapy所做的事情之间的区别是一个简单的cookie问题。在我的例子中,Postman添加了一些保存的cookie(可能来自初始查询),这使得getaround仍然可以根据生成cookie的请求为格式不正确的URL提供答案
因此,问题不是来自Scrapy,而是来自Postman中未丢弃的Cookie(发送按钮下的小“Cookie”链接),这让我相信我的GET请求是正确的。

相关问题