сигнал работает только в основном потоке: scrappy - PullRequest
0 голосов
/ 16 октября 2018

Я делаю API, который возвращает JsonResponse как мой текст из скрапа.Когда я запускаю сценарии индивидуально, он работает отлично.Но когда я пытаюсь интегрировать сценарий scrapy в python django, я не получаю вывод.

Я хочу только вернуть ответ на запрос (в моем случае это POSTMAN POST запрос.

Вот код, который я пытаюсь

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
import scrapy
from scrapy.crawler import CrawlerProcess


@csrf_exempt
def some_view(request, username):
    process = CrawlerProcess({
        'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
        'LOG_ENABLED': 'false'
    })
    process_test = process.crawl(QuotesSpider)
    process.start()

    return JsonResponse({'return': process_test})


class QuotesSpider(scrapy.Spider):
    name = "quotes"

    def start_requests(self):
        urls = [
            'http://quotes.toscrape.com/random',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        return response.css('.text::text').extract_first()

Я очень плохо знаком с Python и Django. Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 28 октября 2018

В вашем коде process_test - это CrawlerProcess, а не результат сканирования.

Вам нужна дополнительная конфигурация, чтобы ваш паук сохранял свои выходные данные "где-то" .См. это SO Q & A о написании пользовательского конвейера.

Если вы просто хотите синхронно получить и проанализировать одну страницу, вам может быть лучше использовать запросы для извлечениястраницы и parsel для ее анализа.

...