Я пытаюсь вызвать scrapy spider из Django файла Views.py. Паук действительно вызывается, но его вывод отображается в командной строке и не сохраняется в Django моделях для отображения на странице. Я проверил запускать spider отдельно, чтобы убедиться, что scrapy и Django подключены и работает правильно, но при автоматизации с использованием скрипта CrawlerRunner () этого не происходит. Так что в реализации CrawlerRunner () отсутствует файл из Django views.py файла , Ниже приведен файл Django Views.py, который вызывает паука:
@csrf_exempt
@require_http_methods(['POST', 'GET'])
def scrape(request):
import sys
from newscrawler.spiders import news_spider
from newscrawler.pipelines import NewscrawlerPipeline
from scrapy import signals
from twisted.internet import reactor
from scrapy.crawler import Crawler,CrawlerRunner
from scrapy.settings import Settings
from scrapy.utils.project import get_project_settings
from scrapy.utils.log import configure_logging
from crochet import setup
setup()
configure_logging()
runner= CrawlerRunner(get_project_settings())
d=runner.crawl(news_spider.NewsSpider)
return redirect("../getnews/")
Мой паук выполняет работу по сканированию новостного веб-сайта и сохраняет URL-адрес, изображение и заголовок главных новостей. сохраняя эти три поля в файле models.py, он печатает в cmd. Кто-нибудь может помочь?
Файл из скрапа
import scrapy
from scrapy_djangoitem import DjangoItem
import sys
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'News_Aggregator.settings'
from news.models import Headline
class NewscrawlerItem(DjangoItem):
# define the fields for your item here like:
django_model = Headline
Файл с конвейерами
class NewscrawlerPipeline(object):
def process_item(self, item, spider):
print("10000000000000000")
item.save()
return item