Django rest framework + Scrapy [twisted.internet.error.ReactorNotRestartable]. (Flutter + Dart)

Я работаю над проектом, в котором Django API сочетается со Scrapy, идея состоит в том, чтобы запустить API с моего мобильного телефона, этот API запустит паука, а затем вернет всю информацию, которую я получу на свой мобильный телефон. Когда я выполняю поиск в первый раз на мобильном телефоне, все работает отлично, но когда я пытаюсь выполнить другой поиск, я получаю "twisted.internet.error.ReactorNotRestartable"

Вот мой API

class Prueba(APIView):
def post(self, request):
    dato = request.data['dato']
    if dato:
        imprimir = self.execute(dato)
        res = json.dumps([o.dump() for o in imprimir], indent=3)
        return HttpResponse(res, content_type='application/json', status = status.HTTP_200_OK)  
    else:
        return HttpResponse("NO", content_type='application/json')


def execute(self, peticion):

    url = ['https://listado.mercadolibre.com.co/'+peticion]
    url2 = ['https://www.olx.com.co/items/q-'+peticion]
            
    process = CrawlerProcess({'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'})
    process.crawl(ProductoSpider, start_urls=url)
    process.crawl(ProductoSpiderDos, start_urls=url2)
    process.start()
    
    return outputResponse #global variable in my spider

Вот один из моих пауков, я знаю, что он немного странный, но это потому, что я тестировал несколько вещей.

class ProductoSpiderDos(CrawlSpider):
name = 'olx'

item_count = 0
allowed_domain = ['www.olx.com.co']

def __init__(self, **kwargs):
    super().__init__(**kwargs)


#//button[@data-aut-id="btnLoadMore"]
#//div[@class="JbJAl"]
rules = {

    Rule(LinkExtractor(allow = (), restrict_xpaths = ('//button[@data-aut-id="btnLoadMore"]'))),
    Rule(LinkExtractor(allow = (), restrict_xpaths = ('//li[@data-aut-id="itemBox"]/a')),
                        callback = "parse_item", follow = False),
}

def parse_item(self, response):
    global outputResponse

    lista = {}
    
    agg = Producto()

    agg.titulo = response.xpath('//h1[@class="_3rJ6e"]/text()').extract_first()
    agg.urlimg = response.xpath('//img[@data-aut-id="defaultImg"]/@src').extract_first()
    p = response.xpath('//span[@data-aut-id="itemPrice"]/text()').extract_first()
    ch = ".$ "
    for x in range(len(ch)):
        p = p.replace(ch[x],"")
    agg.precio = p
    agg.url = response.request.url

    lista['url'] = response.request.url
    
    outputResponse.append(agg)
    self.item_count += 1
    if self.item_count > 3:
        raise CloseSpider('item_exceeded')
        
    yield lista

Не знаю, поможет ли это, но вот часть кода моего мобильного приложения (Flutter + Dart)

Когда я вызываю API

void buscar(BuildContext context) async {
  List<Producto> ulist = [];
  if (buscarController.text.isNotEmpty) {
    var response = await http.post(
      Uri.parse("http://192.168.1.3:8000/api/experimento"),
      body: {'dato': buscarController.text});

    if (response.statusCode == 200) {
      var urjson = json.decode(response.body);

      for (var jsondata in urjson) {
        ulist.add(Producto.fromJson(jsondata));
      }
    } else {
      ScaffoldMessenger.of(context)
          .showSnackBar(SnackBar(content: Text("Ha ocurrido un problema")));
    }
  }
  setState(() {
    productos = ulist;
  });
}

В качестве теста я использую только две из данных, которые получаю от API

return Card(
            child: Column(
              children: [
                Text(productos[index].titulo.toString()),
                Text(productos[index].precio.toString())
              ],
            ),
          );

Вот картинка, чтобы вы могли понять, что я хочу сделать. вот как это выглядит, когда я использую это в первый раз

Screenshot

Вернуться на верх