scrapy 在Django Rest api GET上获取scray spider的响应

c8ib6hqw  于 2022-11-09  发布在  Go
关注(0)|答案(1)|浏览(185)

我正在做一个项目,它包含一个GET请求,带有一些参数,比如(航空公司代码和航班日期),我把这些参数传递给一个用scrapy编码的爬虫。我在management/commands中创建了Django命令来攻击scrapy爬虫,一旦抓取完成,数据就被保存在特定的模型中。因为我想把保存的数据返回到同一个GET请求,我有一些关于它的问题。

  • 如何在GET请求中返回数据?因为我找不到一种方法来从Scrapy Crawler中获取返回的数据。
  • 当正在进行擦除时,如何使GET请求等待特定的时间。
  • 假设GET请求处于等待状态,并且现在已经完成了报废,我必须验证数据库中是否存在与参数相应的报废数据。
  • 假设在数据库中找到了数据,那么我如何将其返回给同一个GET请求?
  • 如果我想在整个过程中使用celery ,什么可以是它的最佳用途?
hrysbysz

hrysbysz1#

你可以创建一个异步任务来使用你的scraper来抓取数据,然后你可以反复检查任务是否已经完成,如果是,那么你可以调用你的API来返回你的被抓取的数据。
1.创建任务视图以创建作业
1.检查任务完成情况以创建
1.您的APIView以获取数据
从django.core.management导入调用命令

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

# configure and import app from celery

from cel.tasks import app
from celery.result import AsyncResult
from django.core.management import call_command

@app.task(bind=True)
def your_async_task(self, *args,**kwargs):
    call_command("your_command_name", *args,**kwargs)

class CreateTaskView(APIView):

    def get(self, request):
        my_task = your_async_task.delay("Hi", keyword_arg="Hello World!")
        return Response({'task_id': my_task.id}, status=status.HTTP_200_OK)

class CheckTaskCompletionView(APIView):

    def get(self, request):
        res = AsyncResult(request.GET.get('task_id'),app=app)
        return Response({'task_state': res.state}, status=status.HTTP_200_OK)

class YourAPIView(APIView):

    pass
    # Now you can call your get api to get the relevant data

相关问题